Bei welchen Berechnungen verwendet man intelligenterweise diese Winkelfunktionen?
Wo werden bestimmte Segmente dadurch vereinfacht, oder erst möglich gemacht?
Ich versuche ein komplettes Tutorial für Anfänger zu schreiben und möchte dieses Thema auch mit anschneiden, und suche daher Informationen usw. betreffs GLB.
Einen Wurf, Kreisbahn, Pendelbewegung, Softe auf-Abwerts bewegung(Sin),Seitwertsbewegung(Cos) usw....
Tan/Atan
ist da schon schwerer
z.B einen Winkel(Richtung) zweier Objekte lässt sich damit erstellen!
MOD((ATAN(Y1-Y2,X1,X2)+360),360)Geht bestimmt auch schicker aber naja ;)
Da gibts einen haufen, wer in der schule schon nicht aufgepasst hat, wird sich da eh schwer tun es zu verstehen!
Aha interessant, auch wenn ich das Beispiel von dir noch nicht so ganz durchblicke, aber vielleicht bin ich auch schon zu lange aus der Schule raus, und brauch da etwas länger zu.
Hier mal ein Beispiel mit ATAN()
// --------------------------------- //
// Project: Atan
// Start: Saturday, January 27, 2007
// IDE Version: 4.051
// Zwei bilder erstellen und laden
rect ( 0,0,32,32,200,50,50)
GRABSPRITE 0,0,0,32,32
SAVESPRITE 0,"rect0.bmp"
LOADSPRITE "rect0.bmp",0
rect ( 32,32,32,32,200,250,50)
GRABSPRITE 1,32,32,32,32
SAVESPRITE 1,"rect1.bmp"
LOADSPRITE "rect1.bmp",1
//Mainschleife
WHILE TRUE
// Mouskoordinaten zuweisen
MOUSESTATE mx,my,b1,b2
// Bild 0 hat eine feste Koordinate
SPRITE 0,300,250
// Bild 1 hängt an der Mousekoordinate
SPRITE 1,mx,my
// Mod((Atan(yBild0 - yBild1,xBild0 -xBild1)+360),360)
winkel = MOD((ATAN(250-my,300-mx)+360),360)
// Linie zu den Eckpunkten zeichnen
DRAWLINE 300,250,mx,my,RGB(255,0,0)
// Den Winke ausgeben
PRINT winkel+"°",mx+38,my
SHOWSCREEN
WEND
FUNCTION rect:l_x,l_y,l_tx,l_ty,l_r,l_g,l_b
FILLRECT l_x,l_y,l_x+l_tx,l_y+l_ty,RGB(l_r,l_g,l_b)
ENDFUNCTIONEdit//
Das könnte für Dich auch Interessant sein,
http://www.glbasic.com/forum/viewtopic.php?id=651
Jow, schicke sache das Beispielprogramm!
@ X-tra:
MOD((ATAN(Y1-Y2,X1-X2)+360),360)
Das errechnet einen Winkel zwischen 2 Bildern.
Man könnte das wie D²O anwenden.
Haltet mich nicht für blöd, aber ich hab eins nicht verstanden.
Und zwar mod(a,b) gibt den wert der division a und b zurück.
Soweit schon klar und verständlich.bei: ((ATAN(Y1-Y2,X1,X2)+360),360)Welches ist vor dem komma und welches dannach? also a und b?
Oder sind die Divisionsvariablen in der klammer von mod(,) beliebig?
Also auch mod(a,b,c,d) möglich.
Ich komm bei den obigen Klammern und deren Inhalt etwas durcheinander.
[edit] ahhh ich habs, voll im stress hier.
....,360) ist ,b#) und alles vor dem komma ist die winkelberechnung atan, und somit (a#
ist das soweit richtig?
So wäre es übrigends richtig, oder?
((ATAN(Y1-Y2,X1-X2)+360),360)X1-X2 und nicht X1,X2
das hier: ((ATAN(Y1-Y2,X1-X2)habe ich jetzt verstanden, nur das dahinter noch nicht, kann mir das jemand erklären? Bitte...
Jow schreibfehler Sorry!^^
Habs geändert
Ich hoffe es nervt niemanden, aber ich blicke bei den ganzen Winkelfunktionen nicht wirklich durch.
Hab hiermal was gezeichnet, und erklärt, inwieweit ich es verstehe.
(http://img463.imageshack.us/img463/8520/unbenanntjr2.jpg)
Koordinaten für B1: xB1= 1 yB1= 2
Koordinaten für B2: xB2= 6 yB2=7
Um den Winkel alpha zu bestimmen würde man ja nun: tan(alpha)=Gegenkathete/Ankatheterechnen.
In diesem Fall wäre dies: tan(alpha)=(yB2-yB1)/(xB2-xB1)Sehe ich das so richtig, denn wenn ich wie oben tan(alpha)=(yB1-yB2)/(xB1-xB2) nehmen würde, würden negative Zahlen herauskommen.
Oder spielt das keine Rolle.
Theoretisch hätte ich ja damit schon meinen Winkel, oder?
Somit habe ich erstmal die Winkelfunktion verstanden, so im Groben jedenfalls, denke ich.
Nun würde ich mich trotzdem freuen, wenn ihr mich korrigiert, falls ich da falsch liege.
Und nun stehe ich noch vor dem Problem, was am Ende von Mod((Atan(yBild0 - yBild1,xBild0 -xBild1)+360),360)steht.
Wozu +360),360) ???
Was passiert dort, und warum wird ATAN genommen?
Den Winkel hätte man ja mit einer einfach Tangensberechnung schon heraus.
Aber wahrscheinlich verwurschtel ich da was, aber Winkelfunktionen waren wohl nie meine Stärke, und nunja sind schon paar jahre her.
Und entschuldigt, daß ich durch meine dummen Fragen hier das Forum so zuspamme, aber ich sitz wie man sieht um diese Uhrzeit immer noch dran, und grübel und grübel.
[edit] habe mich gerade etwas belesen, und gesehen, daß ja ATAN die Umkehrfunktion von TAN ist, und ab da versteh ich nur Bahnhof....Sorry.
Bei Deinem Bild:
Verschieb' beide Punkte so, dass der Punkt A im Ursprung ist. Also A=(0,0), B=(xB-xA, yB-yA). Klar so weit?
Jetzt ist der Punkt A im Ursprung, und über den Tangens kannst Du jetzt den Winkel zwischen A und B herausfinden:
tan(alpha) = dy/dy
mit: dy = Höhe
dx = Breite
alpha = ATAN(yB-yA, xB-xA);
Alpha ist jetzt -180 bis +180
Schranzor will das aber von 0..360 haben, also macht er:
alpha = MOD(alpha+360, 360)
In D2Oś Beispiel trifft das mit Punkt A aber nicht zu?
winkel = MOD((ATAN(250-my,300-mx)+360),360)Oder ist A dort trotzdem immer der Ursprung? Also my und mx = 0?
Weil es ja eigentlich die Mauskoordinaten sind.
Könnte natürlich trotzdem sein, daß es für jede Berechnung dann als Ursprung zählt.
Soweit hab ich es vollkommen verstanden, was aber ist, wenn die Koordinaten von A größer sind als die von B?
wo der ursprungspunkt ist, sollte egal sein!
Wichtig zu wissen ist nur, das wenn du ein Dreieck hast, alle Winkel zusammen 180 ° ergeben.
Hast du jetzt ein rechtwinkliges Dreieck ergiben sich die Winkel ja automatisch (180 - 90)/2 sprich 45.
Die Formel(D²O und meine) aber errechnet ja nicht diese winkel so wie du meinst, sondern rechnet den Winkel von Bild A relativ zu Bild B. Oder ich laber wieder schwachsinn, aber funzen tut es ;)
Das verstehe ich ja, aber nehmen wir mal an, BildA befindet sich bei deinem Beispiel im Koordinatensystem unterhalb von BildB.(gehen wir mal davon aus, daß BildA=Kanone und BildB=Ziel), dann haut das auch hin, und wir bekommen den Winkel für die Peilung.
Wenn nun aber BildA oberhalb von BildB ist, also xBildA größer als xBildB, dann kämen ja bei der Gleichung (xBildB-xBildA) Werte kleiner 0 raus.
Und das verstehe ich eben nicht.
@SchranzOr: kannst du mal eine zeichnung machen, wie du das meinst?
Ich glaub ich habs rausgefunden.
Bei werten welche die klammerberechnungen der jeweiligen x und y koordinaten betreffen, und die summe in den klammern kleiner 0 ist, vergrößert sich der winkel trotzdem, als Beispiel, ergibt ybildA - ybildB = -1, so ist es um den Winkel nahe 360grad, vorausgesetzt, xbildA - xbildB > 0.
Hab ich das so richtig verstanden?
Ähm ich glaub die beschreibung stimmt nicht so wirklich, aber ich hab verstanden, daß trotz negativer werte als ergebnis der berechnungen in den klammer, winkel erzeug werden, die eben größer als 90 grad sind.
habe den Quellcode ganz oben genommen, und mir einfach die jeweilgen Koordinaten des beweglichen Sprites anzeigen lassen.
Man könnte Prüfen, welche X-koordinate und welche Y größer ist Bild A oder Bild B.
Jenachdem könnte man die Formel setzten um einen Positiven Wert zu berechen
aber das ist ja egal ob Winkel < 0 oder > 0 ist, da es den Winkel an sich nicht stört!
If Winkel < -359 then Winkel = 0
if Winkel > 359 then Winkel = 0
also ist es egal! der Punkt wird immerwieder erreicht!
Man muss auch nicht umbedingt immer "reseten" da muss man schon viel drehen, damit man mal den Max Intger/Float Wert ausreizt ;)