Как сделать линию кривой через точки

Я ищу способ сделать линию кривой через ряд точек. Было бы предпочтительнее использовать 3 балла, хотя ямы считали, что для того, чтобы дать контекст углу линии, входящей в точку, может потребоваться больше, чтобы, так сказать, дать контекст кривой.

Как правило, начальная точка P1, контрольная точка P2 и конечная точка P3, линия должна изгибаться от P1 до P2, а затем от P2 до P3.

Фактически, вот прекрасный пример эффекта, которого я хотел бы достичь:

Если бы я мог сделать это, я был бы вечно благодарен!

До сих пор в Java я пытался поиграть с такими вещами, какQuadCurve2D.Double,Cub icCurve2D.Double а такжеPath2D.Double (с использованием CurveTo с Path2D.Double), но безрезультатно - кривые, которые нарисованы не 't даже близко к прохождению через указанную контрольную точку.

Вот изображение методов, которые я пробовал до сих пор:

И вот код, который я использовал для генерации точек и кривых на изображении:

    Graphics2D g = (Graphics2D) window.getGraphics();
    g.setColor(Color.blue);
    int d = 4;

    // P0
    int x0 = window.getWidth()/8;
    int y0 = 250;
    g.drawString("P0", x0, y0 + 4*d);
    g.fillRect(x0, y0, d, d);

    // P1
    int x1 = (window.getWidth()/7)*2;
    int y1 = 235;
    g.drawString("P1", x1, y1 + 4*d);
    g.fillRect(x1, y1, d, d);

    // P2
    int x2 = (window.getWidth()/2);
    int y2 = 200;
    g.drawString("P2", x2, y2 - 2*d);
    g.fillRect(x2, y2, d, d);

    // P3
    int x3 = (window.getWidth()/7)*5;
    int y3 = 235;
    g.drawString("P3", x3, y3 + 4*d);
    g.fillRect(x3, y3, d, d);

            // P4
    int x4 = (window.getWidth()/8)*7;
    int y4 = 250;
    g.drawString("P4", x4, y4 + 4*d);
    g.fillRect(x4, y4, d, d);

    g.setColor(Color.cyan);
    QuadCurve2D quadCurve = new QuadCurve2D.Double(x0, y0, x2, y2, x4, y4);
    g.draw(quadCurve);


    g.setColor(Color.YELLOW);
    CubicCurve2D.Double cubicCurve = new CubicCurve2D.Double((double)x0, (double)y0, 
                                                             (double)x1, (double)y1, 
                                                             (double)x2, (double)y2, 
                                                             (double)x4, (double)y4);
    g.draw(cubicCurve);


    g.setColor(Color.red);      
    Path2D.Double path1 = new Path2D.Double();
    path1.moveTo(x1, y1);
    path1.curveTo(x0, y0, x2, y2, x4, y4);
    g.draw(path1);

Мои причины для того, чтобы изогнутая линия проходила через точки, заключается в том, что я хочуразглаживают» переход между вершинами на линейном графе я написал. Прежде чем кто-либо упоминает этоJFree Chart не вариант, Я понимаю, что используются разные типы кривых и сплайнов, но яУ меня не было большой удачи в понимании того, как именно они работают или как реализовать то, что соответствует моим потребностям.

Буду очень признателен за любую предложенную помощь - заранее спасибо.

Ответы на вопрос(3)

Ваш ответ на вопрос