Winkelproblem ab 90°

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

Freeman

Betreff: Winkelproblem ab 90°

BeitragSa, Okt 09, 2004 16:21
Antworten mit Zitat
Benutzer-Profile anzeigen
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é

BeitragSa, Okt 09, 2004 16:30
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSa, Okt 09, 2004 16:42
Antworten mit Zitat
Benutzer-Profile anzeigen
@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é

BeitragSa, Okt 09, 2004 17:47
Antworten mit Zitat
Benutzer-Profile anzeigen
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é

Rallimen

Sieger des 30-EUR-Wettbewerbs

BeitragSa, Okt 09, 2004 18:07
Antworten mit Zitat
Benutzer-Profile anzeigen
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é

BeitragSa, Okt 09, 2004 19:27
Antworten mit Zitat
Benutzer-Profile anzeigen
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é

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group