Magnete - von Rob von Rob
Magnete die sich immer zur Maus drehen.

[code:1:85a3890539]
xscreen = 640 ; Hohe Auflösungen sehen besonders gut aus ^_^
yscreen = 480


Graphics xscreen, yscreen, 16, 1
SetBuffer BackBuffer()

; Die Felder dimensionieren
Dim xmagnet#(xscreen/20-1,yscreen/20-1)
Dim ymagnet#(xscreen/20-1,yscreen/20-1)
Dim winkelmagnet(xscreen/20-1,yscreen/20-1)


; Ihnen Werte zuweisen
For x = 1 To xscreen/20-1
For y = 1 To yscreen/20-1
xmagnet#(x,y) = x*20
ymagnet#(x,y) = y*20
Next
Next




; Vorberechnete Sinus/Cosinus-Tabellen
; Ist sehr viel schneller als alles jedesmal neu auszurechnen.
Dim sinus#(360)
Dim cosinus#(360)
For i = 0 To 360
sinus#(i) = Sin(i)
cosinus#(i) = Cos(i)
Next






; Die Hauptschleife
Repeat
Cls
mx = MouseX()
my = MouseY()



; Alle Punkte durchgehen
For x = 1 To xscreen/20-1
For y = 1 To yscreen/20-1


; Winkel ausrechnen
winkelmagnet(x,y) = winkel#(xmagnet#(x,y), ymagnet#(x,y), mx, my)


x1# = xbewegen#(xmagnet#(x,y), winkelmagnet(x,y), 8)
y1# = ybewegen#(ymagnet#(x,y), winkelmagnet(x,y), 8)


; Den zweiten Winkel ausrechnen (Winkel der blauen Linie, um 180° gedreht)
winkel2 = winkelmagnet(x,y) - 180
If winkel2 < 0 Then winkel2 = 360 + winkel2
x2# = xbewegen#(xmagnet#(x,y), winkel2, 8)
y2# = ybewegen#(ymagnet#(x,y), winkel2, 8)


; Linien malen
Color 255,0,0
Line x1#, y1#, xmagnet#(x,y), ymagnet#(x,y)
Color 0,0,255
Line x2#, y2#, xmagnet#(x,y), ymagnet#(x,y)




Next
Next



Flip
Until KeyHit(1)
End





; Einene Punkt(Stern) in eine Richtung bewegen.
Function xbewegen#(x#,winkel#,speed#)
x2# = x# + Cosinus#(winkel#)*speed#
Return x2#
End Function

; Das gleiche mit y#.
Function ybewegen#(y#,winkel#,speed#)
y2# = y# + Sinus#(winkel#)*speed#
Return y2#
End Function






; Errechnet den Winkel zwischen zwei Koordinaten.
Function winkel#(x1#,y1#,x2#,y2#)
xhypo# = x2# - x1#
yhypo# = y2# - y1#

; Sqr = Wurzel
abstand# = Abs(Sqr((xhypo# ^ 2) + (yhypo# ^2)))

winkel# = Abs(ACos(xhypo#/abstand#))

If Sgn(xhypo#) = -1 And Sgn(yhypo#) = -1 Then winkel# = 180 + (180 - winkel#)
If Sgn(xhypo#) = 1 And Sgn(yhypo#) = -1 Then winkel# = 270 + (90 - winkel#)

Return winkel#
End Function
[/code:1:85a3890539]



Suche:
(unterstützt mySQL Wildcards ala %)
Titel:
Text:
Autor: