Computergrafik Bezierkurven in Java?

1 Antwort

https://de.wikipedia.org/wiki/De-Casteljau-Algorithmus

An sich ist der Algorithmus ganz einfach.

Eine Kurve wird mittels des Algorithmus angenähert. Dazu wird die Kurve in zwei neue Kurven aufgeteilt. Die neu entstandenen dann wieder, und die daraus entstandenen dann auch wieder(rekursiv), solange, bis eine bestimmte Genauigkeit erreicht wurde.

Was du zuerst Implementieren solltest, wäre ein Funktion, die eine Kurve in zwei neue Kurven aufteilt(also einen Schritt durchführt).

Der algorithmus tut dies folgendermaßen:

1.) Gegeben ist eine bezerkurve, genauer, deren Kontrollpunkte P0 bis Pn.

Außerdem ist ein Parameter t gegeben, das angibt, wo die Kurve geteilt werden soll.

2.) Für alle zwei Kontrollpunkte(Also immer zwischen zwei Punkten) wird ein neuer Kontrollpunkt folgendermaßen berechnet:

P_1_0= (1-t)*P0+t*P1;

3.) Wiederhole 2.) für die neu erzeugten Kontrollpunkte solange, bis nur noch ein Kontrollpunkt berechnet wird.

(Für 4 Kontrollpunkte sähe deine berechnung also folgendermaßen aus:

P_1_0 = ...; P_1_1= (1-t)*P1+t*P2; P_1_2 = (1-t)*P2+t*P3;

P_2_0 = (1-t)*P_1_0+t*P_1_1; P_2_1 = (1-t)*P_1_1+t*P_1_2;

P_3_0 = (1-t)*P_2_0+t*P_1;)

Der letzte berechnete Punkt liegt dabei auf der Kurve.

4.) Du erhälst jetzt zwei neue Bezierkurven aus den berechneten Punkten folgendermaßen(Auf Wikipedia ist das etwas besser ersichtlich mit dne Indizes):

Bezierkurve1:

P0 P_1_0 P_2_0 P_3_0

Bezierkurve2:

P_3_0 P_2_1 P_1_2 P3

Woher ich das weiß:Recherche