| |
|
|
Sven Bader | ¡Hola!
Eigentlich una Basisfunktion en el Spieleentwicklung: ArcTan2 o atan2 (php/js). Hiermit lässt se el Winkel zwischen zwei Punkten, ermitteln en así z.B. una Gegner en Richtung Spieler schauen oder laufen que se.
Yo habe mich algo gewundert, dass Yo no Entsprechung en Profano gefunden habe, evtl. Yo lo sólo übersehen?
Es letztendlich el ArcTan Función con uno Quadranten-Abfrage. Lo sería mich freuen, si la Función el Weg en Profano o math.inc encontrar sería.
In uno zweiten Función, Yo nenne ellos Arctan4, Aprovecho auch todavía el Berechnung el Vektoren y el Umwandlung de Bogenmaß en Grad de.
Als Abfallprodukt ha el Code todavía Profano-Icons como OpenGL Textur.
Descargar
Windowtitle "ArcTan2, ArcTan4 y Icon Texturen"
windowstyle 1+4+8+16
window (%maxx * 0.5 - 200), (%maxy * 0.5 - 150) - 400,300'kompatible schreibweise
Declarar tex&, hPic&, zrot!, oglX&, oglY&
oGL("init",%hWnd,1,1,1,0)
oGL("posmode",1)
'Texture de Icons
Mcls 32,32
startpaint -1
DrawIcon "GESICHT", 0,0
endpaint
hPic&=create("HPIC",0,"& MEMBMP")
tex&=ogl("getTextureBmp",hPic&,1)
DeleteObject hPic&
'de math.inc
Proc Rad2Deg
Parámetros Angle!
Volver (180 / Pi()) * Angle!
ENDPROC
Proc ArcTan2
'Winkel de Position Bilden
'Wenn Objeto 1 a Objeto 2 schauen se, es el Winkel esta:
'ArcTan2(x1 - x2, y1 - y2)
'Um el Bogenmaß en Grad umzuwandeln kann ArcTan2 verwendet voluntad
Parámetros x!, y!
Declarar resultado!
if (y! > 0.0)
resultado! = ArcTan(x!/y!)
elseif (y! < 0.0) & (x! >= 0.0)
resultado! = ArcTan(x!/y!) + Pi()
elseif (y! < 0.0) & (x! < 0.0)
resultado! = ArcTan(x!/y!) - Pi()
elseif (y! = 0.0) & (x! > 0.0)
resultado! = Pi() / 2.0
elseif (y! = 0.0) & (x! < 0.0)
resultado! = 0.0 - (Pi() / 2.0 )
elseif (y! = 0.0) & (x! = 0.0)
'Kein Abstand, no Richtung, kann en Bedarf abgefangen voluntad
resultado! = -1000
endif
Volver resultado!
ENDPROC
Proc ArcTan4
'ArcTan4: Un Neuschöpfung -) alles en un inklusive Performance Tweaks
'El Vektoren necesario no incluso berechnet voluntad, lo voluntad
'simplemente sólo zwei Punkte transferencia, el Ergebnis es ya en Grad
Parámetros x1!, y1!, x2!, y2!
Declarar resultado!, x!, y!
x! = x1! - x2!
y! = y1! - y2!
if (y! > 0.0)
resultado! = ArcTan(x!/y!) * 57.2957795131
elseif (y! < 0.0) & (x! >= 0.0)
resultado! = (ArcTan(x!/y!) + 3.1415926535897932) * 57.2957795131
elseif (y! < 0.0) & (x! < 0.0)
resultado! = (ArcTan(x!/y!) - 3.1415926535897932) * 57.2957795131
elseif (y! = 0.0) & (x! > 0.0)
resultado! = 1.57079632679 * 57.2957795131
elseif (y! = 0.0) & (x! < 0.0)
resultado! = -1.57079632679 * 57.2957795131
elseif (y! = 0.0) & (x! = 0.0)
'Kein Abstand, no Richtung, kann en Bedarf abgefangen voluntad
resultado! = -1000
endif
Volver resultado!
ENDPROC
Mientras que isKey(27) = 0
sleep 10
oGL("clear")
oGL("move",0,0,-2)
'Mittelpunkt des Gesichts
oGL("2D", 0, 0, -2, oglX&, oglY&)
'Das Gesicht (oglX&, oglY&) schaut a Mausposition (%mousex, %mousey)
'zRot! = rad2deg(ArcTan2(%mousex - oglX&, %mousey - oglY&))
'oder
zRot! =ArcTan4(%mousex, %mousey, oglX&, oglY&)
oGL("rotate",0,0,zRot!)
oGL("texture",1,1)
oGL("quad",1,1)
oGL("show")
EndWhile
|
|
|
| |
|
|
|
p.specht
| Ohne Berücksichtigung de oGL gab lo veces una Snippet dazu: [...] |
|
|
| XProfan 11Computer: Gerät, daß es in Mikrosekunden erlaubt, 50.000 Fehler zu machen, zB 'daß' statt 'das'... | 11.08.2021 ▲ |
|
|
|
|
Sven Bader | Nach atan y arctan Yo gesucht, después de "arcus" no Su Contribución es incluso bastante neu.
Yo sería sí una C++ DLL de esta Dingen hacer aber erfahrungsgemäß kostet el DLL Aufruf así viel Tiempo cómo por el schnellere Ausführung gewonnen hätte. |
|
|
| |
|
|