Sto cercando un modo per tracciare una curva di linea attraverso un numero di punti. Sarebbe preferibile utilizzare 3 punti, anche se ho considerato che, per dare un contesto all'angolo della linea che entra in un punto, potrebbe essere necessario più per dare un contesto alla curva, per così dire.Come eseguire una curva di linea attraverso i punti
In generale un punto iniziale P1, un punto di controllo P2 e un punto finale P3, la linea deve curvare verso P2 da P1 e quindi curvare da P2 a P3.
Infatti ecco un perfetto esempio dell'effetto vorrei realizzare:
Se potessi fare questo ho davvero sarei eternamente grato!
In Java finora, ho provato a giocare con cose come QuadCurve2D.Double, Cub icCurve2D.Double e anche Path2D.Double (utilizzando curveTo con Path2D.Double), ma senza alcun risultato - le curve che sono dipinte non sono nemmeno vicino a passando per il punto di controllo specificato.
Ecco un'immagine dei metodi che ho provato finora:
E qui è il codice che ho usato per generare i punti e curve nell'immagine:
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);
Le mie ragioni per cui voglio che una linea curva passi attraverso i punti è che voglio "ammorbidire" la transizione tra i vertici su un grafico a linee che ho scritto. Prima che qualcuno lo menzioni, JFree Chart non è un'opzione. Capisco che ci sono diversi tipi di curve e spline che vengono utilizzati, ma non ho avuto molta fortuna nel capire esattamente come funzionano o come implementare qualcosa che si adatta alle mie esigenze.
Sarei davvero grato per qualsiasi aiuto offerto - Grazie in anticipo.
Mi permetta di chiarire che stai chiedendo di essere in grado di disegnare una curva attraverso una serie di punti? –
Sì, quindi considera che ogni punto della spline di Irwin-Hall è un elemento dell'array. –