Hi all...
Ich bin gerade dabei ein bissl OpenGL mit Delphi zu proggen und dafür wollte ich mir meine eigene Sphäre
erschaffen - erstmal brauch ich dafür ja die Koordinaten...
Also hab ich mir folgendes gedacht :
Zuerst berechne ich die Y Koordinaten eines Halbkreises in 2D, von x = 0 bis 2 * r...
Quelltext
1: 2: 3: 4: 5: 6:
| y ---- y y / | | \ | y | | y | /| | | |\ __________________________________x-Achse ArrOfY[1] [2] [3] [4] |
und speichere diese y Werte in einem Array.
Dann lasse ich das gleiche nochmal durchlaufen, nur das ich Kreise an der YZ-Achse beschreiben lasse, wobei
der Radius immer dem aktuellen Y-Wert entspricht...
Hier mal der Quellcode...
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37:
| var .. ArrOfY: Array of Double; ArrOfZ: Array of Double; .. procedure TForm1.bCalcKrClick(Sender: TObject); var r: Double; i: Integer; begin r := StrToFloat(eRadius.Text); mOutputKr.Lines.Text := ''; setLength( ArrOfY, (round(r) * 2) + 1 ); for i := 0 to (2 * round(R)) do ArrOfY[i] := sqrt( sqr(R) - sqr(R - i) ); for i := 0 to high(ArrOfY) do mOutputKr.Lines.Text := mOutputKr.Lines.Text + createOutput( FloatToStr(ArrOfY[i]), IntToStr(i) ) end; .. procedure TForm1.bCalcSphClick(Sender: TObject); var r: Double; y, i, j: Integer; begin r := StrToFloat(eRadius.Text); mOutputSph.Lines.Text := ''; setLength( ArrOfZ, round(r) * 2 + 1); for i := 1 to high(ArrOfZ) do begin y := round(ArrOfY[i]); setLength( ArrOfZ, High(ArrOfZ) + (y * 2) + 1 ); for j := round(ArrOfY[i - 1]) to round(ArrOfY[i - 1]) + ((y) * 2) do ArrOfZ[j] := sqrt( sqr(round(ArrOfY[i - 1])) - sqr(round(ArrOfY[i - 1]) - j) ) end; for i := 0 to high(ArrOfZ) do mOutputSph.Lines.Text := mOutputSph.Lines.Text + createOutput( FloatToStr(ArrOfZ[i]), IntToStr(i) ) end; |
soweit so gut, nur wenn ich jetzt die YZ-Koordinaten berechnen lassen möchte, kommt "invalid floating point operation" , und zwar bei
folgender Zeile :
Delphi-Quelltext
1:
| ArrOfZ[j] := sqrt( sqr(y) - sqr(y - j) ) |
Nun bin ich heute wohl zu Müde, breit oder sonst was, nur ich finde meinen Fehler nicht, die Länge des Arrays ist einwandfrei, ebenso die Berechnung...mein ich doch
(
Moderiert von Christian S.: Code-Tags hinzugefügt