Я ищу способ сделать линию кривой через несколько точек. Было бы предпочтительнее использовать 3 балла, хотя я считаю, что для того, чтобы дать контекст углу линии, входящей в точку, может потребоваться больше, чтобы дать контекст кривой, так сказать.Как сделать линию кривой через точки
В общем, начальная точка P1, контрольная точка P2 и конечная точка P3, линия должна быть кривой P2 от P1, а затем кривой от P2 до P3.
На самом деле здесь является прекрасным примером эффекта я хотел бы достичь:
Если бы я мог сделать это, я действительно был бы вечно благодарен!
В Java до сих пор, я пытался играть с вещами, такими, как QuadCurve2D.Double, Cub icCurve2D.Double, а также Path2D.Double (с использованием curveTo с Path2D.Double), но безрезультатно - кривые, которые окрашены не даже близко к проходящей через указанная контрольная точка.
Вот изображение из методов я пытался до сих пор:
А вот код, который я использовал для создания точек и кривых на изображении:
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 не является опцией. Я понимаю, что существуют разные типы кривых и сплайнов, которые используются, но мне не очень повезло в том, что они точно понимают, как они работают, или как реализовать то, что соответствует моим потребностям.
Я был бы очень благодарен за любую помощь, предлагаемую - Спасибо заранее.
Позвольте пояснить, вы просите, чтобы можно было нарисовать кривую через массив точек? –
Да, считайте, что каждая точка сплайна Irwin-Hall является элементом массива. –