Winkelberechnung für Bilddrehung
Übersicht

![]() |
CrowSmithehemals "Fleisch"Betreff: Winkelberechnung für Bilddrehung |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo.
Ich brauche für mein aktuelles Projekt eine Drehung, dessen Winkel ich durch die ArcusCosinus-Funktion ermiteln muss. Ich habe meine Berechnungen einige male durchgesehen und durchgeprüft aber mir fällt der Fehler nicht auf, der jedoch da ist und somit die Berechnung verfälscht. Es gibt eine PositionX und eine PositionY. An der daraus resultierenden Koordinate sitzt das Bild, das ich drehen will. Das Bild soll in Richtung des Cursors (Also der aktuellen Koordinate MouseX()/MouseY()) gedreht werden. Aktueller Code: BlitzBasic: [AUSKLAPPEN]
Hier das erklärende Bild zum Code: ![]() Jedoch bekomme ich bei dieser Berechnung nicht das gewünschte Resultat ... Manuell am Taschenrechner habe ich es hunderte male überprüft und HIER bekomme ich dann den Winkel ganz ohne Probleme heraus... Ich bin ratlos... Weiss einer eine Lösung? MfG, der Fleisch |
||
Worklogs: TotalWar2D
Wbsites: Privat / Entwicklerstudio / Gewerbe (Folgen bald) Smartphones: Samsung Galaxy S I9000 / Samsung Galaxy S2 I9100 / Samsung Galaxy S3 (Kommt 2012) Notebook 1: HP Pavillion DV6700 (AMD 64 X2 TL-60 @ 2.00GHz, 4GB DDR3 1333MHz, Nvidia GeFroce 8400M GS, Win Vista Home Premium 32Bit) Notebook 2: HP Pavillion DV6t Quad Edition (KOMMT BALD =] ) Notebook 3: Clevo X7200 (KOMMT BALD =] ) Desktop: (KOMMT BALD =] ) |
![]() |
Eingeproggt |
![]() Antworten mit Zitat ![]() |
---|---|---|
Atan2![]() |
||
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9 |
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Bei deinem Winkelkreis ist die Y-Achse gespiegelt. 90° deuten nach Oben. | ||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
![]() |
CrowSmithehemals "Fleisch" |
![]() Antworten mit Zitat ![]() |
---|---|---|
Habe es jetzt so:
Code: [AUSKLAPPEN] Winkel=ATan2(PositionY-MouseY(),PositionX-MouseX()) Also so wie hier: https://www.blitzforum.de/foru...hp?t=36018 und es funktioniert nicht! Und jetzt? |
||
Worklogs: TotalWar2D
Wbsites: Privat / Entwicklerstudio / Gewerbe (Folgen bald) Smartphones: Samsung Galaxy S I9000 / Samsung Galaxy S2 I9100 / Samsung Galaxy S3 (Kommt 2012) Notebook 1: HP Pavillion DV6700 (AMD 64 X2 TL-60 @ 2.00GHz, 4GB DDR3 1333MHz, Nvidia GeFroce 8400M GS, Win Vista Home Premium 32Bit) Notebook 2: HP Pavillion DV6t Quad Edition (KOMMT BALD =] ) Notebook 3: Clevo X7200 (KOMMT BALD =] ) Desktop: (KOMMT BALD =] ) |
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
"es funktioniert nicht!" Was soll uns dass denn helfen? ![]() Was soll passieren, was passiert stattdessen? |
||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
![]() |
CrowSmithehemals "Fleisch" |
![]() Antworten mit Zitat ![]() |
---|---|---|
Was passieren soll, ist im ersten Post ganz oben sehr detailiert beschrieben Xeres^^ Ich will den Winkel berechnen, um den sich das Bild drehen soll.
Das Bild soll in Richtung meines Cursors ausgerichtet werden. Das heisst ich denke mir das Dreieck zwischen meiner Cursorkoordinate und der Koordinate des Bildes und berechne via Satz des Pythagoras die Seite C (Linie zwischen Koor_Cursor und Koor_Bild). Dann berechne ich via ArcusCosinus-Funktion (Acos) den Winkel alpha. Ist Alles oben zu sehen. Atan2 habe ich ausprobiert wie im Beispiel beschrieben aber es funktioniert nicht. Heißt ich bekomme meinen Winkel nicht korrekt raus, ich bekomme immer irgendwelche völlig sinnfreien Winkel im Minusbereich und auch nur im Bereich des oberen linken viertels des Winkelkreises. So und jetzt habe ich halt gefragt was man noch machen kann^^ Oder habe ich bei Atan2 irgendetwas verwechselt? MfG, Fleisch |
||
Worklogs: TotalWar2D
Wbsites: Privat / Entwicklerstudio / Gewerbe (Folgen bald) Smartphones: Samsung Galaxy S I9000 / Samsung Galaxy S2 I9100 / Samsung Galaxy S3 (Kommt 2012) Notebook 1: HP Pavillion DV6700 (AMD 64 X2 TL-60 @ 2.00GHz, 4GB DDR3 1333MHz, Nvidia GeFroce 8400M GS, Win Vista Home Premium 32Bit) Notebook 2: HP Pavillion DV6t Quad Edition (KOMMT BALD =] ) Notebook 3: Clevo X7200 (KOMMT BALD =] ) Desktop: (KOMMT BALD =] ) |
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich bin mal so frei, auf meinen eigenen Beitrag zu deuten...
Was ein sinnvoller Winkel ist, hängt von der Betrachtungsweise ab... Nachtrag: Ich weiß nicht, ob ich das hier schon mal gepostet habe... seis drum. Bedienung mit den Pfeiltasten: BlitzBasic: [AUSKLAPPEN] AppTitle("Sinus & Kosinus") |
||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
![]() |
CrowSmithehemals "Fleisch" |
![]() Antworten mit Zitat ![]() |
---|---|---|
Jetzt habe ich es so:
Code: [AUSKLAPPEN] ;(-ATan2(ZielY - StartY , ZielX - StartX) + 360) Mod 360 Turmwinkel=(-ATan2(MouseY()-PositionY,MouseX()-PositionX)+360) Mod 360 Der gleiche Fehler wie eben schon... So langsam aber sicher dreh ich echt am Rad... |
||
Worklogs: TotalWar2D
Wbsites: Privat / Entwicklerstudio / Gewerbe (Folgen bald) Smartphones: Samsung Galaxy S I9000 / Samsung Galaxy S2 I9100 / Samsung Galaxy S3 (Kommt 2012) Notebook 1: HP Pavillion DV6700 (AMD 64 X2 TL-60 @ 2.00GHz, 4GB DDR3 1333MHz, Nvidia GeFroce 8400M GS, Win Vista Home Premium 32Bit) Notebook 2: HP Pavillion DV6t Quad Edition (KOMMT BALD =] ) Notebook 3: Clevo X7200 (KOMMT BALD =] ) Desktop: (KOMMT BALD =] ) |
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wie wendest du nun diesen Winkel an? Drehst du die Bilder vor? Sin/Cos? | ||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
![]() |
CrowSmithehemals "Fleisch" |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich wende den Winkel direkt an:
Code: [AUSKLAPPEN] DrawImage3D(Turm,PositionXTurm,PositionYTurm,0,Turmwinkel,1,0) |
||
Worklogs: TotalWar2D
Wbsites: Privat / Entwicklerstudio / Gewerbe (Folgen bald) Smartphones: Samsung Galaxy S I9000 / Samsung Galaxy S2 I9100 / Samsung Galaxy S3 (Kommt 2012) Notebook 1: HP Pavillion DV6700 (AMD 64 X2 TL-60 @ 2.00GHz, 4GB DDR3 1333MHz, Nvidia GeFroce 8400M GS, Win Vista Home Premium 32Bit) Notebook 2: HP Pavillion DV6t Quad Edition (KOMMT BALD =] ) Notebook 3: Clevo X7200 (KOMMT BALD =] ) Desktop: (KOMMT BALD =] ) |
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Man beachte, dass das Draw3D -Koordinatensystem nicht dem gewöhnlichen Koordinatensystem entspricht, sondern seinen Koordinatenursprung im Mittelpunkt des Bildschirms hat. Wobei X+ nach rechts und Y+ nach oben gehen. (DrawImage3D![]() Also flippe die Y-Achse: Code: [AUSKLAPPEN] Turmwinkel=(ATan2(MouseY()-PositionY,MouseX()-PositionX)+360) Mod 360
|
||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
![]() |
CrowSmithehemals "Fleisch" |
![]() Antworten mit Zitat ![]() |
---|---|---|
Oh maaaaan ich blicke nicht mehr durch...
Also hier ist der Code: Code: [AUSKLAPPEN] AppTitle "Test_06" PositionX#=0 PositionY#=0 Graphics3D 800, 600, 32, 2 ;Grafikmodus X,Y,Farbtiefe,Fenstermodus SeedRnd MilliSecs() SetBuffer BackBuffer() ;Setzt den hinteren Buffer als Buffer Local Timer=CreateTimer(60) Local Camera=CreateCamera() CameraClsColor Camera,255,255,255 Include "./Includes/Draw3D2.bb" DrawInit3D(Camera) Rumpf = LoadImage3D("./Grafiken/Rumpf.png",2,2,0,0) Turm = LoadImage3D("./Grafiken/Turm.png",2,2,0,0) MaskImage3D (Rumpf,$FFFFFF) MaskImage3D (Turm,$FFFFFF) Rumpfwinkel#=0 Turmwinkel#=0 GeschwRumpf#=2 GeschwDrehenRumpf=3 Repeat ;HidePointer DrawImage3D(Rumpf,PositionX,PositionY,0,Rumpfwinkel,1,0) PositionXTurm=PositionX-Cos(Rumpfwinkel)*GeschwRumpf PositionYTurm=PositionY+Sin(Rumpfwinkel)*GeschwRumpf DrawImage3D(Turm,PositionXTurm,PositionYTurm,0,Turmwinkel,1,0) If KeyDown(205) Or KeyDown(32) ;Rechts drehen Rumpfwinkel=Rumpfwinkel+GeschwDrehenRumpf EndIf If KeyDown(203) Or KeyDown(30) ;Links drehen Rumpfwinkel=Rumpfwinkel-GeschwDrehenRumpf EndIf If KeyDown(200) Or KeyDown(17) ;Vorwärts PositionX=PositionX+Cos(Rumpfwinkel)*GeschwRumpf PositionY=PositionY-Sin(Rumpfwinkel)*GeschwRumpf EndIf If KeyDown(208) Or KeyDown(31) ;Rueckwärts PositionX=PositionX+Cos(Rumpfwinkel)*GeschwRumpf*-1 PositionY=PositionY-Sin(Rumpfwinkel)*GeschwRumpf*-1 EndIf If Rumpfwinkel>360 Rumpfwinkel=0 ElseIf Rumpfwinkel<0 Rumpfwinkel=360 EndIf If Turmwinkel>360 Turmwinkel=0 ElseIf Turmwinkel<0 Turmwinkel=360 EndIf ;If PositionX>=MouseX() ;Bewegung des Spielers (Turm) ; a=PositionX-MouseX() ;Else ; a=MouseX()-PositionX ;EndIf ;If PositionY>=MouseY() ; b=PositionY-MouseY() ;Else ; b=MouseY()-PositionY ;EndIf a=Abs(PositionX-MouseX()) b=Abs(PositionY-MouseY()) If a<=1 Then a=1 If a>=799 Then a=799 If b>=599 Then b=599 If b<=1 Then b=1 ;c=Sqr((a^2)+(b^2)) ;Turmwinkel=ACos(((((a^2)-(b^2)-(c^2))/(2*b*c))*-1)) ;(-ATan2(ZielY - StartY , ZielX - StartX) + 360) Mod 360 ;Turmwinkel=(ATan2(MouseY()-PositionY,MouseX()-PositionX)+360) Mod 360 Turmwinkel=(-ATan2(MouseY()-PositionY,MouseX()-PositionX)+360) Mod 360 DebugLog MouseX() + "//" + MouseY() ;Begrenzung der Map (X-Achse) If PositionX>=400-16 PositionX=400-16 ElseIf PositionX<=-400+16 PositionX=-400+16 EndIf ;Begrenzung der Map (Y-Achse) If PositionY>=300-16 PositionY=300-16 ElseIf PositionY<=-300+16 PositionY=-300+16 EndIf FlushKeys WaitTimer Timer RenderWorld Clear3D() Flip 0 Forever Also wie zur verdammten Hölle kriege ich den verdammten Winkel ordentlich raus??? Ich habe schon unzählige Versuche, das Problem zu lösen durchgemacht und nichts hat auch nur ansatzweise geholfen... ich weiss nicht mehr weiter... |
||
Worklogs: TotalWar2D
Wbsites: Privat / Entwicklerstudio / Gewerbe (Folgen bald) Smartphones: Samsung Galaxy S I9000 / Samsung Galaxy S2 I9100 / Samsung Galaxy S3 (Kommt 2012) Notebook 1: HP Pavillion DV6700 (AMD 64 X2 TL-60 @ 2.00GHz, 4GB DDR3 1333MHz, Nvidia GeFroce 8400M GS, Win Vista Home Premium 32Bit) Notebook 2: HP Pavillion DV6t Quad Edition (KOMMT BALD =] ) Notebook 3: Clevo X7200 (KOMMT BALD =] ) Desktop: (KOMMT BALD =] ) |
![]() |
ToeB |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wenn ich nicht den richtigen winkel rausfinde, was früher wirklich oft passiert ist obwohl ich das schon x-mal gemacht habe, habe ich mir als erstes den Winkel ausgeben lassen, also was Atan2 ausgibt. Dann bin ich immer mit der Maus zu den Mir bekannten winkeln gegagen, und zwar 0°, 90°, 180° und 270°. (ein bisschen nach gefühl), also 0° war Rechts davon, 90° unten, 180° Links und 270° oben. Dann habe ich die Werte die Atan2 ausgegeben hat abgelesen und mir aufgeschrieben. Und schon kann man rausfinden, das z.B. die winkelwerte genau "negiert" sind, also "-winkel", oder das ein unterschied von 90° da ist etc.
mfg ToeB |
||
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt! |
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
In der Draw3D2 ist ein Beispielcode beigelegt der genau das erklärt.
''_Draw3D2\Draw3D2 Stuff, How Use Atan2.bb'' Kurzfassung: Code: [AUSKLAPPEN] Angle#=ATan2(MouseX3D-PositionX,MouseY3D-PositionY)
DrawImage3D(ImageHandle,PositionX,PositionY,0,Angle) Man beachte, dass bei der Draw3D(2) bei Atan2 zuerst X dann Y eingetragen wird. Nicht wie bei 2D, wo man besser dran ist, zuerst Y dann X einzutragen. Das ist auch schon das ganze Geheimnis. |
||
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D |
![]() |
CrowSmithehemals "Fleisch"Betreff: Die Lösung des Problems |
![]() Antworten mit Zitat ![]() |
---|---|---|
Nach stundenlangem Blättern durch die Mitschriften zu Draw3D und dem erneuten Anschauen des von hectic genannten Beispiels habe ich es tatsächlich hingekriegt!
Code: [AUSKLAPPEN] ;Bewegung des Spielers (Turm) Turmwinkel=(ATan2(MouseX3D-PositionX,MouseY3D-PositionY))-90 So funktioniert es!^^ Ich habe schon gedacht ich würde es niemals hinkriegen :> Danke euch Allen! Danke! MfG, der Fleisch :] |
||
Worklogs: TotalWar2D
Wbsites: Privat / Entwicklerstudio / Gewerbe (Folgen bald) Smartphones: Samsung Galaxy S I9000 / Samsung Galaxy S2 I9100 / Samsung Galaxy S3 (Kommt 2012) Notebook 1: HP Pavillion DV6700 (AMD 64 X2 TL-60 @ 2.00GHz, 4GB DDR3 1333MHz, Nvidia GeFroce 8400M GS, Win Vista Home Premium 32Bit) Notebook 2: HP Pavillion DV6t Quad Edition (KOMMT BALD =] ) Notebook 3: Clevo X7200 (KOMMT BALD =] ) Desktop: (KOMMT BALD =] ) |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group