Winkelproblem ab 90°
Übersicht

![]() |
FreemanBetreff: Winkelproblem ab 90° |
![]() Antworten mit Zitat ![]() |
---|---|---|
so hier ist der Code
Code: [AUSKLAPPEN] Graphics 640,480,32,2 SetBuffer BackBuffer() Global x# = 120 Global y# = 90 Global sx# = 44 Global sy# = 71 Global oX#,oY#,rX#,rY#,mx#,my#,winkelM#,sek,ms,timer,fps While KeyHit(1) = False Cls ms = MilliSecs() py = 100*sin(winkelm) px = 100*cos(winkelm) Oval ox+px+75,oy+py+75,10,10 Oval OX,OY,150,150,0 MX =mousex() my =mouseY() If KeyDown(200) Then y = Y - 1 If KeyDown(208) Then y = Y + 1 If KeyDown(203) Then X = X - 1 If KeyDown(205) Then X = X + 1 zielumrandung() Text 300,0,"OX :"+ox Text 300,15,"OY :"+oy Text 300,30,"Winkel :" Text 300,45,"mouseX :"+mx Text 300,60,"mouseY :"+my winkelMaus() fps() Flip 0 Wend Function zielumrandung() oX = x - 62 oY = y - 57 End Function Function winkelMaus() Line x#+12,y#+16,mx#,my# Line x#+12,y#+16,640,y#+16 Line mx#,my#,640,y#+16 laenge_line3# =sqr((mx#-mx#)^2 + ((y#+16)-my#)^2) laenge_line1# =sqr((mx#-(x#+12))^2 +(my#-(y#+16))^2) Text 300,75,"länge line3 :"+laenge_line3# Text 300,90,"länge line1 :"+laenge_line1# winkel# = (laenge_line3#/laenge_line1#) WinkelM# = ASin(winkel#) Text 300,105,"winkel :"+Asin(winkel#) End Function Function fps() sek = sek+ 1 If ms - timer > 1000 Then fps = sek timer = ms sek = 0 EndIf Text 23,0,"fps :"+fps End Function bewegt ma den cursor so das der winkel größer als 90° werden müsste, da seht ihr das problem. Hatte es vorher mit Gegenkathete/Hypothenuse berechnet, aba das funzt nur bei 0°< Winkel <90° . Kann mir da wer helfen? Am ende soll man den kreis die ganzen 180 grad lang bewegen können. Bitte um Ratschläge FrEeMaN |
||
![]() |
Markus Rossé |
![]() Antworten mit Zitat ![]() |
---|---|---|
Die Lösung ist ganz einfach. Wenn der Winkel im ersten oder vierten Quadranten ist, dann kann die normale Formel genommen werden.
Falls sich der Winkel im zweiten oder dritten Quadranten befindet, musst du zum errechnenden Winkel einfach 180° dazu zählen. Hoffentlich weisst du was gemeint ist. cu, Markus Rossé |
||
![]() |
Freeman |
![]() Antworten mit Zitat ![]() |
---|---|---|
@Markus Rossé
ist eine gute Idee aber wie sieht das umgesetzt aus? so wie du das gesagt hast isses aber nicht möglich weil hier die curserposition ausschlaggebend ist und man kann dann nich einfach 180 dazu addieren. Versuch ma nen code vorzuweisen. FrEeMaN |
||
![]() |
Markus Rossé |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hmm, das finde ich interessant. Als ich mit ATAN rechnete, bekam ich nur Werte von 45° bis 90° und -45° bis -90° (wobei bei -90° selbstverständlich Divison durch Null Fehler kommt).
Finde ich ziemlich seltsam, kennt da jemand ne Abhilfe? Ich habe schon ne Lösung mit ATAN2 gefunden und bekomme richtige Werte, will aber ATAN benutzen. cu, Markus Rossé |
||
![]() |
RallimenSieger des 30-EUR-Wettbewerbs |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hab auch mal was geschrieben .... Code: [AUSKLAPPEN] Graphics 800,600,16,1
Const C_ESC = 1 Const C_Rechts = 205 Const C_Links = 203 Const C_Runter = 208 Const C_Hoch = 200 Dim FPS(3):FPS(0)= 60 : FPS(0)=CreateTimer(FPS(0)) radius = 100 Mittelpunktx = 150 MittelpunktY = 150 Kugelentfernung = 200 SetBuffer BackBuffer() While Not KeyDown(C_ESC);########################## Maus_X= MouseX () Maus_Y= MouseY () If KeyDown(C_Hoch) MittelpunktY=MittelpunktY -1 If KeyDown(C_Runter) MittelpunktY=MittelpunktY +1 If KeyDown(C_Rechts) MittelpunktX=MittelpunktX +1 If KeyDown(C_Links) MittelpunktX=MittelpunktX -1 ;waagerecht > Horizontale linie Line MittelpunktX, MittelpunktY, GraphicsWidth(), MittelpunktY ;kreis Malen Oval MittelpunktX-radius, MittelpunktY-radius, radius*2, radius*2,0 Line MittelpunktX, MittelpunktY, Maus_X, Maus_Y ;berechnung Linie Kreis - Maus Line1 = Sqr( (Maus_X-MittelpunktX)^2 + (Maus_Y-MittelpunktY)^2 ) Text 500,400, "Line 1 = " +Line1 + " Pixel" Line (GraphicsWidth()-1), MittelpunktY, Maus_X, Maus_Y ;berechnung Linie Maus - endpunkt Line2 = Sqr( (Maus_X-(GraphicsWidth()-1))^2 + (Maus_Y-MittelpunktY)^2 ) Text 500,420, "Line 2 = " +Line2 + " Pixel" ;berechnung Grad zur waagerechten Kreis - Maus Winkel1 = ATan2 ( (Maus_Y-MittelpunktY),(Maus_X-MittelpunktX)) Text 500,440, "Winkel 1 = " + Winkel1 + " Grad" ;Kugel positionieren KugelmitteX = MittelpunktX + Cos (winkel1) * Kugelentfernung KugelmitteY = MittelpunktY + Sin (winkel1) * Kugelentfernung Kugelradius = 3 Oval KugelmitteX -Kugelradius , KugelmitteY -Kugelradius ,Kugelradius*2,Kugelradius*2 Text 500,480, "KugelmitteX = " +KugelmitteX+ " pixel" Text 500,500, "KugelmitteY = " +KugelmitteY+ " pixel" Text 300,400,"Maus_X :"+Maus_X Text 300,420,"Maus_Y :"+Maus_Y Text 9,9,"FPS:"+FPS(1):FPS(2)=FPS(2)+1:If MilliSecs()>FPS(3)+999 Then FPS(1)=FPS(2):FPS(2)=0:FPS(3)=MilliSecs() ;WaitTimer (FPS(0)) Flip 0 Cls Wend End ATAN2 ist doch extra für solche aufgaben ... waum eine neue atan2 Function schreiben!? |
||
[BB2D | BB3D | BB+]
|
![]() |
Markus Rossé |
![]() Antworten mit Zitat ![]() |
---|---|---|
Da ich in der Schule Tag ein Tag aus mich mit Trigonometrie beschäftige ist es für mich kein Problem, mit sin, cos, tan, cot und Umkehrfunktionen zu rechnen. Desshalb möche ich auch im Programmieren mein Wissen nutzen können, ohne auf andere Dinge zurückgreifen zu müssen.
Wir haben auf dem TI-89 mit TI-Basic ein Programm geschrieben, welches genau dieses Problem löst. Also hab ich es rasch nach BB umgeschrieben, doch ATAN macht nicht mit. Desshalb nimmt es mich im technischen Wunder, wie dieses ATAN in BB funktioniert und wie man es dazu bringen kann das zu tun, was ich will cu, Markus Rossé |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group