Fehler 1 ist einmal, dass du den Winkel in einer Ganzzahl speichern willst, dieser aber sehr präzise sein muss und sich im 0,xxxx bereich aufhält.
Ansonsten hab ich mal selbst was reingebastelt, sieht jetzt so aus:
Code: Alles auswählen
#PI = 3.14159
Procedure get_angle(start_x.f, start_y.f, end_x.f, end_y.f)
Protected angle.w
Protected delta_x.w
Protected delta_y.w
delta_x = start_x - end_x
delta_y = start_y - end_y
angle = (ATan(delta_y / delta_x) * 180 / #PI) * (-1) ;Der Winkel zum Object
If angle < 0
angle = 180 + angle
EndIf
If start_y < end_y ;Negativer Winkel - also 180 dazu damit es volle 360 Grad werden!
angle = 180 + angle
EndIf
If angle = 0 And start_x > end_x
angle = 180
EndIf
If angle = 180 And start_x < end_x
angle = 0
EndIf
ProcedureReturn angle
EndProcedure
OpenWindow(0,0,0,300,300,#PB_Window_ScreenCentered|#pb_Window_Systemmenu,"TEST")
InitSprite()
OpenWindowedScreen(WindowID(),0,0,300,300,0,0,0)
Repeat
If WindowEvent()=#pb_eventclosewindow
End
EndIf
FlipBuffers()
ClearScreen(255,255,255)
StartDrawing(ScreenOutput())
#WM_LBUTTONDOWN
a=Sqr(Pow((WindowMouseX()-150),2)+Pow((WindowMouseY()-150),2))
Circle(150,150,100)
If a < 100
y=WindowMouseY()
x=WindowMouseX()
Circle(x,y,4,RGB(255,0,0))
Else
radius = 100
Mauswinkel.f= get_angle(150, 150, WindowMouseX(), WindowMouseY())
Debug mauswinkel
y=Sin(#PI*Mauswinkel/180)*radius
x=Cos(#PI*Mauswinkel/180)*radius
Circle(150 + x,150 - y,4,RGB(255,0,0))
EndIf
StopDrawing()
ForEver
Meine Prozedur oben liefert den Winkel im Gradmaß, daher muss nachher beim Sinus und Cosinus wieder in Bogenmaß umgerechnet werden. Außerdem musste der Ursprung auf 150, 150 gelegt werden, denn da beginnt ja das Koordinatensystem. Wenn du das mit dieser Zeile "Mauswinkel=ATan(WindowMouseX()-150/WindowMouseY()-150)" machen wolltest, dann fehlen da zumindest schonmal die Klammern, sonst jrechnet der 150 / windowmousey() und nicht das, was du wohl wolltest. Aber ich habs mit Klammern nicht groß weiter getestet, da ich's ja ganz umgeschrieben habe.