Atan2

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

flexer94

Betreff: Atan2

BeitragSo, Dez 20, 2009 16:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Hey Leute,

ich hab mir jetzt schon zig Tutorials und Posts zum Thema angeschaut, ich kapiers aber einfach nicht.
Wär jemand so freundlich und würde mir das erklären oder nen Link zu nem guten Tutorial posten?
(Robsite kenn ich schon)

Gruß
flexer

Starwar

BeitragSo, Dez 20, 2009 16:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Also.
Besser geht's nicht Wink
https://www.blitzforum.de/foru...711#346711
MFG
 

flexer94

BeitragSo, Dez 20, 2009 17:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Hmm, ich glaube ich bin zu blöd...
Also, mir gehts darum, dass ich einfach Objekte im 2D Bereich schräg bewegen kann.
Gibts da auch ne alternative?

Gruß
flexer

BladeRunner

Moderator

BeitragSo, Dez 20, 2009 17:09
Antworten mit Zitat
Benutzer-Profile anzeigen
Was daran verstehst Du denn nicht? Wie ist denn gezielt deine Ausgangslage?
Vielleicht können wir dann besser helfen.
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92
 

flexer94

BeitragSo, Dez 20, 2009 17:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Die Kombination von Cosinus, Sinus, wie ich dass verwenden muss, damits klappt.

Starwar

BeitragSo, Dez 20, 2009 17:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
winkel = [[ATan2]](Differenz der Y-Koordinaten,Differenz der X-Koordinaten)
neueX = alteX+cos(winkel)*Geschwindigkeit
neueY = alteY + sin(winkel)*Geschw.

Wobei der Winkel zwischen 0 und 180° liegt (also 0°, 90°, 180°/-180°, -90°, 0°)
Du solltest dir ein Textprogramm scheiben, was dir immer den aktuellen Winkel ausgibt.
Probieren geht über studieren!
MFG

BladeRunner

Moderator

BeitragSo, Dez 20, 2009 17:21
Antworten mit Zitat
Benutzer-Profile anzeigen
Du hast ein Objekt an X/Y.
Dein Ziel ist TX/TY.

Der Winkel zum Ziel ist:
winkel = atan2(TY-Y,TX-X)

Diesen Winkel kannst Du benutzen um dein Objekt Wandern zu lassen.

Dafür:
neuesX = x + Cos(winkel)*Schrittweite
neuesy = y +sin(winkel)*schrittweite

Schrittweite gibt an wie weit dein Objekt bei der Bewegung in Pixeln verschoben werden soll.
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92

das wurgel

BeitragSo, Dez 20, 2009 17:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Dazu brauchst du nichtmal Atan2. Atan2 brauchst du nur wenn du den Winkel zwischen zwei Punkten errechnen willst, also wenn z.B. sich ein Gegner auf die Spielfigur zubewegen soll.
Um ein Objekt in eine bestimmte Richtung zu bewegen, brauchst du nur Sin und Cos:
Code: [AUSKLAPPEN]
xspeed=Sin(winkel)*speed
yspeed=-Cos(winkel)*speed
x=x+xspeed
y=y+yspeed

Atan2 wäre dann die Umkehrfunktion davon:
Code: [AUSKLAPPEN]
winkel=Atan2(xspeed, -yspeed)


MfG

edit:
ich war zu langsam
1 ist ungefähr 3
 

flexer94

BeitragSo, Dez 20, 2009 18:35
Antworten mit Zitat
Benutzer-Profile anzeigen
ok ich hab das jetzt soweit hinbekommen, leider bewegt sich der ball immer nur im kreis...
Außerdem weiß ich nicht genau was ich da gerade gemacht hab =/

Code: [AUSKLAPPEN]
Graphics 800,600,32,0
SetBuffer BackBuffer()

ball = LoadImage("testbob.png")
bx = 400
by = 300

timer = CreateTimer(75)

While Not KeyDown(1)
Cls
WaitTimer(timer)

bx = MouseXSpeed()
by = MouseYSpeed()


Line MouseX(),MouseY(),500,500

winkel = ATan2(MouseX() - bx,ny - by)

nx = bx + Cos(winkel)*20
ny = by + Sin(winkel)*20
Oval(nx,ny,20,20,1)
Flip

Wend

das wurgel

BeitragMo, Dez 21, 2009 22:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich weis zwar nicht, was dein Programm tun sollte, aber so bewegt sich der Ball auf die Maus zu:
Code: [AUSKLAPPEN]
   bx = MouseX()
   by = MouseY()
   
   winkel# = ATan2(bx-nx,by-ny)
   
   nx = nx + Sin(winkel)*10
   ny = ny + Cos(winkel)*10


So bewegt er sich in die Richtung, in die der Strich zeigt:
Code: [AUSKLAPPEN]
   bx = MouseX()
   by = MouseY()
   
   winkel# = ATan2(bx-400,by-300)
   
   nx = nx + Sin(winkel)*10
   ny = ny + Cos(winkel)*10

   Line 400, 300, bx, by
   Oval nx,ny,20,20

Und so positioniert er sich immer vom Mittelpunkt aus in konstanter Entfernung Richtung Maus:
Code: [AUSKLAPPEN]
   bx = MouseX()
   by = MouseY()
   
   winkel# = ATan2(bx-400,by-300)
   
   nx = Sin(winkel)*200+400
   ny = Cos(winkel)*200+300
1 ist ungefähr 3

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group