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] |