Jak zrobić krzywą linii przez punkty

Szukam sposobu na wykonanie krzywej linii przez wiele punktów. Lepiej byłoby użyć 3 punktów, chociaż uważałem, że aby nadać kontekst kątowi wchodzącemu w linię, może być potrzebny więcej punktów, aby dać kontekst krzywej, żeby tak powiedzieć.

Zasadniczo punkt początkowy P1, punkt kontrolny P2 i punkt końcowy P3, linia powinna zakrzywiać się do P2 z P1, a następnie zakrzywiać od P2 do P3.

W rzeczywistości jest to doskonały przykład efektu, który chciałbym osiągnąć:

Gdybym mógł to zrobić, naprawdę byłbym wiecznie wdzięczny!

W Javie do tej pory próbowałem bawić się takimi rzeczami jakQuadCurve2D.Double , Cub icCurve2D.Double i równieżPath2D.Double (używając curveTo z Path2D.Double), ale bezskutecznie - krzywe, które są malowane, nie są nawet bliskie przejścia przez określony punkt kontrolny.

Oto obraz metod, które dotychczas wypróbowałem:

A oto kod, którego użyłem do wygenerowania punktów i krzywych na obrazie:

    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);

Moje powody, dla których zakrzywiona linia ma przechodzić przez punkty, to to, że chcę „wygładzić” przejście między wierzchołkami na wykresie liniowym, który napisałem. Zanim ktokolwiek to wspomniWykres JFree nie jest opcją. Rozumiem, że istnieją różne rodzaje krzywych i splajnów, które są używane, ale nie miałem wiele szczęścia w zrozumieniu, jak one działają lub jak wdrożyć coś, co odpowiada moim potrzebom.

Byłbym naprawdę wdzięczny za każdą oferowaną pomoc - Z góry dziękuję.

questionAnswers(3)

yourAnswerToTheQuestion