Ich suche nach einer Möglichkeit, eine Linie Kurve durch eine Reihe von Punkten zu machen. Es wäre vorzuziehen, 3 Punkte zu verwenden, obwohl ich berücksichtigt habe, dass, um dem Winkel der Linie, die in einen Punkt eintritt, Kontext zu geben, mehr benötigt werden kann, um der Kurve sozusagen einen Kontext zu geben.Wie mache ich eine Linie Kurve durch Punkte
Im Allgemeinen sollte ein Startpunkt P1, ein Steuerpunkt P2 und ein Endpunkt P3 sein, die Linie sollte von P1 zu P2 und dann von P2 zu P3 gekrümmt sein.
In der Tat hier ist ein perfektes Beispiel für die Wirkung würde Ich mag erreichen:
Wenn ich dies tun könnte, würde ich wirklich ewig dankbar sein!
In Java bisher habe ich versucht, mit Dingen wie QuadCurve2D.Double, Cub icCurve2D.Double und auch Path2D.Double (mit curveTo mit Path2D.Double) herumspielen, aber ohne Erfolg - die Kurven, die lackiert werden, sind nicht einmal in der Nähe, die durch der Kontrollpunkt angegeben. Hier
ist ein Bild von den Methoden, die ich versucht habe bisher:
Und hier ist der Code, den ich verwenden, um die Punkte und Kurven im Bild zu erzeugen:
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);
Ich möchte, dass eine gekrümmte Linie durch Punkte verläuft, dass ich den Übergang zwischen den Scheitelpunkten in einem Liniendiagramm, das ich geschrieben habe, "glätten" möchte. Bevor es jemand erwähnt JFree Chart ist keine Option. Ich verstehe, dass es verschiedene Arten von Kurven und Splines gibt, die verwendet werden, aber ich hatte nicht viel Glück darin, genau zu verstehen, wie sie funktionieren oder etwas umzusetzen, das meinen Bedürfnissen entspricht.
Ich wäre wirklich dankbar für jede Hilfe angeboten - Vielen Dank im Voraus.
Lassen Sie mich klarstellen, ob Sie eine Kurve durch eine Reihe von Punkten zeichnen möchten? –
Ja, beachten Sie, dass jeder Punkt auf dem Irwin-Hall-Spline ein Element im Array ist. –