Deutsch
Quelltexte/ Codesnippets

ArcTan2, atan2 "In Richtung schauen" (+Icons als OpenGL Texturen)

 

Sven
Bader
Hallo!

Eigentlich eine Basisfunktion in der Spieleentwicklung: ArcTan2 bzw atan2 (php/js). Hiermit lässt sich der Winkel zwischen zwei Punkten, ermitteln um so z.B. einen Gegner in Richtung Spieler schauen oder laufen zu lassen.

Ich habe mich etwas gewundert, dass ich keine Entsprechung in Profan gefunden habe, evtl. habe ich es nur übersehen?

Es ist letztendlich die ArcTan Funktion mit einer Quadranten-Abfrage.
Es würde mich freuen, wenn die Funktion den Weg in Profan oder die math.inc finden würde.

In einer zweiten Funktion, ich nenne sie Arctan4, nehme ich auch noch die Berechnung der Vektoren und die Umwandlung von Bogenmaß in Grad ab.

Als Abfallprodukt hat der Code noch Profan-Icons als OpenGL Textur.

Herunterladen


Windowtitle "ArcTan2, ArcTan4 und Icon Texturen"
windowstyle 1+4+8+16
window (%maxx * 0.5 - 200), (%maxy * 0.5 - 150)  - 400,300'kompatible schreibweise
Declare tex&, hPic&, zrot!, oglX&, oglY&
oGL("init",%hWnd,1,1,1,0)
oGL("posmode",1)
'Texture aus Icons
Mcls 32,32
startpaint -1
DrawIcon "GESICHT", 0,0
endpaint
hPic&=create("hPic",0,"&MEMBMP")
tex&=ogl("getTextureBmp",hPic&,1)
DeleteObject hPic&
'aus math.inc

Proc Rad2Deg

    Parameters Angle!
    Return (180 / Pi()) * Angle!

EndProc

Proc ArcTan2

    'Winkel aus Position Bilden
    'Wenn Objekt 1 zu Objekt 2 schauen soll, ist der Winkel hierfür:
    'ArcTan2(x1 - x2, y1 - y2)
    'Um das Bogenmaß in Grad umzuwandeln kann ArcTan2 verwendet werden
    Parameters x!, y!
    Declare result!

    if (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)

        'Kein Abstand, keine Richtung, kann bei Bedarf abgefangen werden
        result! = -1000

    endif

    Return result!

EndProc

Proc ArcTan4

    'ArcTan4: Eine Neuschöpfung -) alles in einem inklusive Performance Tweaks
    'Die Vektoren müssen nicht selbst berechnet werden, es werden
    'einfach nur zwei Punkte übergeben, das Ergebnis ist bereits in Grad
    Parameters x1!, y1!, x2!, y2!
    Declare result!, x!, y!
    x! = x1! - x2!
    y! = y1! - y2!

    if (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)

        'Kein Abstand, keine Richtung, kann bei Bedarf abgefangen werden
        result! = -1000

    endif

    Return result!

EndProc

While 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 zur 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


9 kB
Bezeichnung:ArcTan2 OpenGL
Hochgeladen:11.08.2021
Ladeanzahl63
Herunterladen
99 kB
Bezeichnung:Programm als EXE
Hochgeladen:11.08.2021
Ladeanzahl67
Herunterladen
 
11.08.2021  
 




p.specht

Ohne Berücksichtigung von oGL gab es mal ein Snippet dazu: [...] 
 
XProfan 11
Computer: Gerät, daß es in Mikrosekunden erlaubt, 50.000 Fehler zu machen, zB 'daß' statt 'das'...
11.08.2021  
 




Sven
Bader
Nach atan und arctan habe ich gesucht, nach "arcus" nicht Dein Beitrag ist sogar recht neu.

Ich würde ja eine C++ DLL von diesen Dingen machen aber erfahrungsgemäß kostet der DLL Aufruf so viel Zeit wie man durch die schnellere Ausführung gewonnen hätte.
 
11.08.2021  
 



Zum Quelltext


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

2.470 Betrachtungen

Unbenanntvor 0 min.
H.Brill04.06.2024
Sven Bader05.08.2023
Ernst29.05.2022
p.specht18.11.2021
Mehr...

Themeninformationen

Dieses Thema hat 2 Teilnehmer:

Sven Bader (2x)
p.specht (1x)


Admins  |  AGB  |  Anwendungen  |  Autoren  |  Chat  |  Datenschutz  |  Download  |  Eingangshalle  |  Hilfe  |  Händlerportal  |  Impressum  |  Mart  |  Schnittstellen  |  SDK  |  Services  |  Spiele  |  Suche  |  Support

Ein Projekt aller XProfaner, die es gibt!


Mein XProfan
Private Nachrichten
Eigenes Ablageforum
Themen-Merkliste
Eigene Beiträge
Eigene Themen
Zwischenablage
Abmelden
 Deutsch English Français Español Italia
Übersetzungen

Datenschutz


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie