ich bin gerade dabei einen kochlinien generator zu schreiben, nur leider komm ich bei einem problem nicht weiter.
ich vermute es liegt an meinen mangelnden fähigkeiten was geometrie angeht. wäre super wenn einer von euch mir kurz auf die sprünge helfen kann.
anscheinend berechne ich den punkt D (die neue spitze) nicht richtig,...
hier mal der code:
Code: Alles auswählen
...
type
{ TExtendedPoint }
TExtendedPoint = record
X, Y: Extended;
end;
...
...
procedure TForm1.kochLinie(iterationstiefe: Integer; A, B: TExtendedPoint; myCanvas: TCanvas);
var
C, D, E: TExtendedPoint;
alpha, laenge: Extended;
begin
if iterationstiefe > 0 then
begin
alpha:=arctan((B.X-A.X)/(B.Y-A.Y))+pi/3;
C.X:=A.X+((B.X-A.X)/3);
C.Y:=A.Y+((B.Y-A.Y)/3);
E.X:=A.X+(2*(B.X-A.X)/3);
E.Y:=A.Y+(2*(B.Y-A.Y)/3);
laenge:=-1*sqrt((C.X-A.X)*(C.X-A.X) + (C.Y-A.Y)*(C.Y-A.Y));
D.X:=C.X+cos(alpha)*laenge;
D.Y:=C.Y+sin(alpha)*laenge;
kochLinie(iterationstiefe-1, A, C, myCanvas);
kochLinie(iterationstiefe-1, C, D, myCanvas);
kochLinie(iterationstiefe-1, D, E, myCanvas);
kochLinie(iterationstiefe-1, E, B, myCanvas);
end
else
begin
myCanvas.Line(Round(A.X), Round(A.Y), Round(B.X), Round(B.Y));
end;
end;
...
C der +60° knick
D der -120° knick
und
E der 2te +60° knick
in etwa so sollte es aussehen:
Code: Alles auswählen
. D
. / \
. / \
.A--------C E---------B
.
Code: Alles auswählen
. D
. / |
. / |
.A--------C E---------B
.
zur koch kurve: http://de.wikipedia.org/wiki/Koch-Kurve" onclick="window.open(this.href);return false;
vielen dank schon im vorraus!!
lgl