Studium
Home Login Anleitung Anmelden Über uns Kontakt Impressum

   Google-Anzeigen



   Google-Anzeigen



   Google-Anzeigen





Studium - Mathe: Logo (Turtlesystem) in 3D. Watt is'n Vektor? [edited]

Hallo!

Ich habe eine kleine Frage zu einer Nachprogrammierung der Turtle aus Logo
(http://de.wikipedia.org/wiki/Logo_%28Programmiersprache%29#Turtlegraphics-Befehlssatz

oder

http://de.wikipedia.org/wiki/Logo_%28Programmiersprache%29).

Ich bin gerade dabei, dies nachzuprogrammieren.

Jedoch will ich dies in 3D tun, d.h. neben dem Winkel in der Ebene WinkelHorzizontal wie in den Beispielprogrammen auf obiger Webseite, der sich mit Rechts- und Linksdrehen ändern lässt, gibt es einen zweiten Winkel, senkrecht zu der Ebene, der Winkel WinkelVertikal.

Nun kann man WinkelVertikal durch Aufwärts- und Abwärtsdrehen ändern.

Durch Kombination von Aufwärts- und Abwärtsdrehen und Rechts- und Linksdrehen kann man also leicht einen Würfel oder eine Pyramide zeichnen.

Das funktioniert auch.

Dir Turtle wird durch Kombination von Aufwärts- und Abwärtsdrehen und Rechts- und Linksdrehen in eine 3D-Richtung gedreht (man stelle sie sich im Zentrum eines Globus vor, dann kann sie auf jeden Punkt der Erdoberfläche ausgerichtet werden).
Dann wird sie mit Vorwärts um eine Strecke S vorwärts bewegt. Dann kann sie wieder gedreht werden und erneut eine Linie zeichnen lassen.

Jede Vorwärtsbewegung verbindet als Linie die alte und die neue Position der Turtle.
Die Position der Turtle wird durch die Koordinaten x,y,z und angegeben.

Um es zeichnen zu lassen, muss ich das relative Koordinatensystem in ein absolutes Koordinatensystem umwandeln.

Mein Vorgehen ist so, dass ich zunächst aus dem WinkelVertikal und der Strecke S, die ich mir als Hypotenuse vorstelle, Ankathede und Gegenkathede erhebe (in einem als aufrecht stehenden Dreieck). Gegenkathede ist die Höhe über der Höhe. Die Gegenkathede addiere ich zur jetzigen Z-Position der Turtle hinzu. Die Ankathede ist die Strecke, die die Turtle in der Ebene zurücklegt. Sie stelle ich mir wiederum als Hypotenuse in einem neuen, diesmal liegenden Dreieck vor. Ankathede und Gegenkathede erhebe ich über den WinkelHorizontal. Ankathede und Gegenkathede werden zu der X- bzw. Y-Position addiert.

Nun mein Problem: Unter bestimmten Bedingungen funktioniert es nicht.

Die Bedingungen lauten: Die Turtle wird nicht nur einmal im Raum gedreht, sondern mehrfach.

Dies liegt hauptsächlich daran, dass ich stur die erhobenen Werte für die beiden Ankatheden und Gegenkatheden zu den x,y,z-Werten addiere, auch wenn die Turtle schon zweimal im Raum gedreht ist (und die beiden gedachten Dreiecken schon anders im Raum liegen). Problem ist also die Umwandlung von relativem Koordinatensystem in ein absolutes Koordinatensystem.

Unten der Code.

Mir fehlt aber die Mathematik, um das zu lösen.

Bin für jede gute Fee dankbar!

Danke, Danke, Danke!

Chrisir

P.S. ich poste in diesem Forum, weil es primär ein mathemat. Problem und kein Programmierproblem ist.



' Basic Turtle Commands **************************

Sub FW(Lang)
' Sub FW(x, y, z, WinkelHorizontal, WinkelVertikal, Lang)

' FW = Vorwaerts
' Malt ggf. (Wenn not Stifthoch gilt) eine Linie und
' ändert die Turtle-Position.
' Die Linie verbindet alte und neue Turtle-Position

Dim OldX, OldY, OldZ
Dim LangX, LangY, LangZ
Dim LangV ' Lang vorwärts (horizontal)
Dim LangH ' und Lang hoch (senkrecht)
Dim LangNeu


OldX = x
OldY = y
OldZ = z

' Vertikalen Winkel auswerten
' Die Gesamtstrecke erstmal anhand des WinkelVertikal
' in den horizontalen und vertikalen Anteil splitten:
ErhebeLaengeKatheden WinkelVertikal, Lang, LangH, LangV

' Horizontalen Winkel auswerten;
' der horizontale Anteil LangV wird als LangNeu
' nochmal in x und y gesplittet:
LangNeu = LangV
LangZ = LangH
ErhebeLaengeKatheden WinkelHorizontal, LangNeu, LangX, LangY

x = x + LangX
y = y + LangY
z = z + LangZ

If Not StiftOben Then

LogFile OldX, OldY, OldZ, x, y, z, StiftFarbe, StiftDicke

intAnzZeilen = intAnzZeilen + 1

End If

End Sub

Sub ErhebeLaengeKatheden(Winkel, Hypotenuse, LaengeX, LaengeY)

' Erhebe Laenge der Katheden LaengeX, LaengeY aus
' Winkel (Alpha) und Länge der Hypotenuse (im
' rechtwinkligen Dreieck).
' Eingabewert: Winkel, Hypotenuse
' Rückgabewert: LaengeX, LaengeY
' Anwendung: siehe TestOn_ErhebeLaengeKatheden und
' vor allem FW.


If Not boolSinCosTabelleDone Then
MsgBox "SinCosTabelle not Done", _
vbCritical, _
"Turtle"
ErstelleSinCosTabelle
End If

LaengeX = SinTab(Winkel) * Hypotenuse
LaengeY = CosTab(Winkel) * Hypotenuse

End Sub

Sub ErstelleSinCosTabelle()

' Die mathematische Konstante Pi.
Const Pi = 3.14159265358979

' Variable (im Prinzip Konstante)
' zur Umrechnung beliebiger
' Winkel in das Bogenmass:
Dim PiDurch180
Dim Winkel As Integer
Dim WinkelBogenmass As Double


PiDurch180 = Round(Pi / 180, 5)

For Winkel = 0 To 361
WinkelBogenmass = Winkel * PiDurch180
SinTab(Winkel) = Round(Sin(WinkelBogenmass), 15)
CosTab(Winkel) = Round(Cos(WinkelBogenmass), 15)
Next

boolSinCosTabelleDone = True

End Sub


Geschickt von Chrisir, So 02.04.2006 20:21



- Anzeige -
Lust auf eine eigene Homepage? Günstige Angebote gibt's hier...

Spotlight-Wissen.de distanziert sich ausdrücklich von im Forum eingestellten Fremdinhalten jeglicher Art.