Italia
Foro

Mathe: Winkelberechnung

 
- Page 1 -


Hey potuto mir bitte einer der deutlich mehr mathematisch gebildeten XProfaner auf die Sprünge helfen ? Ich sehe den Wald vor Bäumen nicht mehr

Alles was ich will ist eine schnelle Funktion die aus der Strecke xy,xxyy mir den winkel (360°!) zurückliefert.

Mein Code funktioniert schon - naja fast.
KompilierenMarkierenSeparieren
CLS

WHILE 1

    CLS
    PRINT WNK(100,100,%MOUSEX,%MOUSEY)
    SLEEP 100

ENDWHILE

WAITKEY

proc WNK

    PARAMETERS X&,Y&,XX&,YY&
    var T!=0

    IF XX&<X&

        RETURN WNK(XX&,Y&,X&,YY&)

    ENDIF

    IF YY&<Y&

        RETURN WNK(X&,YY&,XX&,Y&)

    ENDIF

    LINE X&,Y& - XX&,YY&
    var DX!=XX&-X&
    var DY!=YY&-Y&
    T!=(SQRT(DX!*DX!+DY!*DY!))

    IF YY&<XX&

        T!=RAD2DEG(SINH(DY!/T!))

    ELSE

        T!=45+(45-RAD2DEG(SINH(DX!/T!)))

    ENDIF

    RETURN T!

endproc

proc RAD2DEG

    PARAMETERS ANGLE!
    RETURN (180 / @PI()) * ANGLE!

endproc

proc SINH

    PARAMETERS ANGLE!
    RETURN (@EXP(ANGLE!) - @EXP(-ANGLE!)) / 2

./../function-references/xprofan/endproc/'>endproc

 
05.12.2006  
 



 
- Page 5 -



Hubert
Binnewies
[quote:1f06939008=iF]Also doppelt so schnell wie mein Ergebnis ist ungefähr das was ich mir vorstellte

Geht diese Funktion ähnlich umzustellen?
KompilierenMarkierenSeparieren
proc GETCIRCP

    PARAMETERS XP!,YP!,R!,W!
    COS_OUTPX!=((((R!*SIN(((-1*(((-1+W!)*3.1415926535897932384626433832795)+3.1415926535897932384626433832795))/180))))*-1)+XP!)
    COS_OUTPY!=((((R!*COS(((-1*(((-1+W!)*3.1415926535897932384626433832795)+3.1415926535897932384626433832795))/180))))*-1)+YP!)

endp
>
[/quote:1f06939008]
erkläre mir mal lieber mit worten was du da zu berechnen versuchst oder genauer ein listing wo ich es sehe...
 
WinXP Prof, XProfan 9.1 Newbie

Ein kluger Kopf sagte mal:
"Nach dem derzeitigen Stand der Technik ist es unmöglich Programme zu schreiben, die fehlerfrei laufen!"
06.12.2006  
 



Klar - man übergibt X und Y und einen Radius und einen Winkel und erhält die neuen XY Koords.
 
06.12.2006  
 



@Frank: Kannst Du noch das iTüpfelchen draufsetzen und diese Proc nach ASM portieren? (Achtung - müssen Floats sein!)
KompilierenMarkierenSeparieren
proc WNK2

    PARAMETERS X!,Y!,XX!,YY!
    var DX!=XX!-X!
    var DY!=YY!-Y!

    IF DX!>0

        IF DY!>0

            RETURN (90*(DY!))/SQRT((DX!)^2 + (DY!)^2)

        ELSEIF DY!<0

            RETURN 180-((90*((DY!)*-1))/SQRT((DX!)^2 + ((DY!)*-1)^2))+180

        ELSE

            RETURN 0

        ENDIF

    ELSEIF DX!<0

        IF DY!>0

            RETURN 90-((90*(DY!))/SQRT(((DX!)*-1)^2 + (DY!)^2))+90

        ELSEIF DY!<0

            RETURN 180+((90*((DY!)*-1))/SQRT(((DX!)*-1)^2 + ((DY!)*-1)^2))

        ELSE

            RETURN 180

        ENDIF

    ELSE

        IF DY!>0

            RETURN 90

        ELSEIF DY!<0

            RETURN 270

        ELSE

            RETURN 0

        ENDIF

    ENDIF

    RETURN T!

/../funktionsreferenzen/xprofan/endproc/'>endproc

 
06.12.2006  
 



Damit Ihr seht worum es eigendlich geht:

Kollision gegen Wände - egal ob schräg oder grade - sowas alles funzt schon.

Es werden die XML-Maps verarbeitet die der MapEditor ausspuckt.

65 kB
Hochgeladen:06.12.2006
Downloadcounter36
Download
 
06.12.2006  
 




Frank
Abbing
[quote:141851c2a4]@Frank: Kannst Du noch das iTüpfelchen draufsetzen und diese Proc nach ASM portieren? [/quote:141851c2a4]
Hab leider wenig Zeit und Geduld dazu. Falls ich dazu komme, dauert es aber.
 
07.12.2006  
 




Hubert
Binnewies
[quote:60edca93c6=iF]Klar - man übergibt X und Y und einen Radius und einen Winkel und erhält die neuen XY Koords.[/quote:60edca93c6]
Darf ich das so verstehen:
X und Y sind ein Punkt in der Fläche ausgehend von der lenken oberen Ecke.
Der Radius ist die Entfernung von X,Y zu XX,Y.
dann kommt der Winkel dazu aus dem sich dann der neue XX,YY Punkt errechnet der dann mit dem Ursprung ( X,Y ) zu einer Linie verbunden wird und auch hier die Entfernung Radius besitzt?

Dann habe ich schon ne Ahnung wie....
(auch wieder einfacher wie du es umgesetzt hast)

Hubert

Nachtrag: ist die Ursprungslinie eine Wagerechte, Senkrechte oder irgendeine Linie?
 
WinXP Prof, XProfan 9.1 Newbie

Ein kluger Kopf sagte mal:
"Nach dem derzeitigen Stand der Technik ist es unmöglich Programme zu schreiben, die fehlerfrei laufen!"
07.12.2006  
 



Schau mal vielleicht dieser Source zur Veranschaulichung:
KompilierenMarkierenSeparieren
const myPI=3.1415926535897932384626433832795
cls
float cos_outpx,cos_outpy

whileloop 0,359

    getcircp(100,100,50,loop)
    setpixel cos_outpx,cos_outpy,0
    getcircp(300,100,loop/10,loop*3)
    setpixel cos_outpx,cos_outpy,0

wend

waitkey
end

proc getcircp(float xp,yp,r,w)

    cos_outpx:=((((r*sin(((-1*(((-1+w)*myPI)+myPI))/180))))*-1)+xp)
    cos_outpy:=((((r*cos(((-1*(((-1+w)*myPI)+myPI))/180))))*-1)+yp)

endproc


KompilierenMarkierenSeparieren
CLS
var COS_OUTPX!=0
var COS_OUTPY!=0

WHILELOOP 0,359

    GETCIRCP(100,100,50,&LOOP)
    SETPIXEL COS_OUTPX!,COS_OUTPY!,0
    GETCIRCP(300,100,&LOOP/10,&LOOP*3)
    SETPIXEL COS_OUTPX!,COS_OUTPY!,0

ENDWHILE

WAITKEY
END

proc GETCIRCP

    PARAMETERS XP!,YP!,R!,W!
    COS_OUTPX!=((((R!*SIN(((-1*(((-1+W!)*3.1415926535897932384626433832795)+3.1415926535897932384626433832795))/180))))*-1)+XP!)
    COS_OUTPY!=((((R!*COS(((-1*(((-1+W!)*3.1415926535897932384626433832795)+3.1415926535897932384626433832795))/180))))*-1)+YP!)

endproc

 
07.12.2006  
 




Hubert
Binnewies
PFFFFFFFFFFF.......
Schwerer Tobak.....

das lässt sich im Prinzip bis 90 Grad auch circa ein rechtwinkliges Dreieck lösen...
Einfacher wäre ein gleichschenkliges, aber dann gibt es Probleme beim Bestimmen des Endpunktes.

MOM......

Ein gleichschenkliges Dreieck in dem hc berechnet wird, womit man ein rechtwinkliges erhält circa dem man den Endpunkt bestimmen kann.....

Ich überlege mir mal ne Gleichung...
Kann aber was dauern...
Is ein Hirnwindungsverknoter....

Hubert

Nachtrag: Ich glaube aber nicht das es dann schnelle geht, denn in deiner Routine gilt es nur einen Sinus und einen Cosinus zu ersetzen, dafür werde ich aber mindestens 2 mal Wurzel drinhaben....und ich habe keine Ahnung ob das die Routine beschleunigt....
 
WinXP Prof, XProfan 9.1 Newbie

Ein kluger Kopf sagte mal:
"Nach dem derzeitigen Stand der Technik ist es unmöglich Programme zu schreiben, die fehlerfrei laufen!"
07.12.2006  
 



Hey ist doch OK! Wenn DU schon sagst es lohnt nicht... dann bleibts wie es ist!
 
07.12.2006  
 




Hubert
Binnewies
Aber ich finde denoch: Ein Versuch ist es wert....
 
WinXP Prof, XProfan 9.1 Newbie

Ein kluger Kopf sagte mal:
"Nach dem derzeitigen Stand der Technik ist es unmöglich Programme zu schreiben, die fehlerfrei laufen!"
07.12.2006  
 



 
07.12.2006  
 




Hubert
Binnewies
Ich bin noch dran.....
Ich glaube ich komme mit einer Wurzel und ansonsten Grundrechenarten hin....
Damit potrebbe meine Formel schneller sein als Sinus und Cosinus....
mehr Morgen....
Da habe ich mit Sicherheit eine Formel und Wahrscheinlich eine Routine die IF mit Sicherheit tierisch gut optimiert.... (ich glaube ich sollte Ihm die listings meiner Proggis geben... er macht sie schneller und besser...)

Hubert
 
WinXP Prof, XProfan 9.1 Newbie

Ein kluger Kopf sagte mal:
"Nach dem derzeitigen Stand der Technik ist es unmöglich Programme zu schreiben, die fehlerfrei laufen!"
07.12.2006  
 




Answer


Topictitle, max. 100 characters.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Posting  Font  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Topic-Options

4.577 Views

Untitledvor 0 min.
Michael W.23.12.2016
Julian Schmidt25.11.2013
holmol9310.05.2013
Andreas Koch07.11.2012
Di più...

Themeninformationen



Admins  |  AGB  |  Applications  |  Autori  |  Chat  |  Informativa sulla privacy  |  Download  |  Entrance  |  Aiuto  |  Merchantportal  |  Impronta  |  Mart  |  Interfaces  |  SDK  |  Services  |  Giochi  |  Cerca  |  Support

Ein Projekt aller XProfaner, die es gibt!


Il mio XProfan
Private Notizie
Eigenes Ablageforum
Argomenti-Merkliste
Eigene Beiträge
Eigene Argomenti
Zwischenablage
Annullare
 Deutsch English Français Español Italia
Traduzioni

Informativa sulla privacy


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