| |
|
|
Sven Bader | allô!
Eigentlich une Basisfunktion dans qui Spieleentwicklung: ArcTan2 bzw atan2 (php/js). Hiermit peut sich qui Winkel entre deux Punkten, ermitteln um so z.B. une Gegner dans direction Spieler regarder ou bien courir trop laisser.
j'ai mich quelque chose gewundert, dass je aucun Entsprechung dans Profan trouvé habe, peut-être. habe je es seulement übersehen?
c'est letztendlich qui ArcTan Funktion avec einer Quadranten-Abfrage. Es serait mich freuen, si le Funktion den Weg dans Profan ou bien qui math.inc trouver serait.
dans einer zweiten Funktion, je nenne vous Arctan4, nehme je aussi encore qui Berechnung qui Vektoren et qui Umwandlung de Bogenmaß dans Grad ab.
comme Abfallprodukt hat qui Code encore Profan-Icônes comme OpenGL Textur.
Herunterladen
Windowtitle "ArcTan2, ArcTan4 et Icon Texturen"
style de fenêtre 1+4+8+16
window (%maxx * 0.5 - 200), (%maxy * 0.5 - 150) - 400,300'kompatible schreibweise
Déclarer tex&, hPic&, zrot!, oglX&, oglY&
oGL("init",%hWnd,1,1,1,0)
oGL("posmode",1)
'Texture aus Icônes
Mcls 32,32
startpaint -1
DrawIcon "GESICHT", 0,0
endpaint
hPic&=create(«PCSI»,0,"& MEMBMP")
tex&=ogl("getTextureBmp",hPic&,1)
DeleteObject hPic&
'aus math.inc
Proc roue2Deg
Paramètres Angle!
Retour (180 / Pi()) * Angle!
ENDPROC
Proc ArcTan2
'Winkel aus Position Bilden
'si objet 1 trop objet 2 regarder soll, ist qui Winkel hierfür:
'ArcTan2(x1 - x2, y1 - y2)
'Um cela Bogenmaß dans Grad umzuwandeln peux ArcTan2 verwendet volonté
Paramètres x!, y!
Déclarer result!
si (y! > 0.0)
result! = ArcTan(x!/y!)
elseif (y! < 0.0) & (x! >= 0.0)
result! = ArcTan(x!/y!) + Pi()
elseif (y! < 0.0) & (x! < 0.0)
result! = ArcTan(x!/y!) - Pi()
elseif (y! = 0.0) & (x! > 0.0)
result! = Pi() / 2.0
elseif (y! = 0.0) & (x! < 0.0)
result! = 0.0 - (Pi() / 2.0 )
elseif (y! = 0.0) & (x! = 0.0)
'ne...aucune la distance, aucun direction, peux chez besoin abgefangen volonté
result! = -1000
endif
Retour result!
ENDPROC
Proc ArcTan4
'ArcTan4: une Neuschöpfung -) alles dans einem inclusivement Performance Tweaks
'qui Vektoren doit pas selbst berechnet volonté, es volonté
'simple seulement deux Punkte transfert, cela Ergebnis ist bereits dans Grad
Paramètres x1!, y1!, x2!, y2!
Déclarer result!, x!, y!
x! = x1! - x2!
y! = y1! - y2!
si (y! > 0.0)
result! = ArcTan(x!/y!) * 57.2957795131
elseif (y! < 0.0) & (x! >= 0.0)
result! = (ArcTan(x!/y!) + 3.1415926535897932) * 57.2957795131
elseif (y! < 0.0) & (x! < 0.0)
result! = (ArcTan(x!/y!) - 3.1415926535897932) * 57.2957795131
elseif (y! = 0.0) & (x! > 0.0)
result! = 1.57079632679 * 57.2957795131
elseif (y! = 0.0) & (x! < 0.0)
result! = -1.57079632679 * 57.2957795131
elseif (y! = 0.0) & (x! = 0.0)
'ne...aucune la distance, aucun direction, peux chez besoin abgefangen volonté
result! = -1000
endif
Retour result!
ENDPROC
Tandis que isKey(27) = 0
sleep 10
oGL("clear")
oGL("move",0,0,-2)
'Mittelpunkt des Gesichts
oGL("2D", 0, 0, -2, oglX&, oglY&)
'cela Gesicht (oglX&, oglY&) schaut zur Mausposition (%mousex, %mousey)
'zRot! = roue2deg(ArcTan2(%mousex - oglX&, %mousey - oglY&))
'ou bien
zRot! =ArcTan4(%mousex, %mousey, oglX&, oglY&)
oGL("rotate",0,0,zRot!)
oGL("texture",1,1)
oGL("quad",1,1)
oGL("show")
Endwhile
|
|
|
| |
|
|
|
p.specht
| sans Berücksichtigung de oGL donnais es la fois un Snippet en supplément: [...] |
|
|
| XProfan 11Computer: Gerät, daß es in Mikrosekunden erlaubt, 50.000 Fehler zu machen, zB 'daß' statt 'das'... | 11.08.2021 ▲ |
|
|
|
|
Sven Bader | Pour atan et arctan habe je gesucht, pour "arcus" pas Dein Beitrag ist sogar droite récente.
je serait oui une C++ DLL de cette Dingen faire mais erfahrungsgemäß kostet qui DLL Aufruf so viel Zeit comment on par qui schnellere Ausführung gewonnen hätte. |
|
|
| |
|
|