| |
|
|
- Seite 1 - |
|
| Hey könnte 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. KompilierenMarkierenSeparierenCLS
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
endproc
|
|
|
| |
|
|
| |
|
- Seite 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!)
endproc
[/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. |
|
|
| |
|
|
|
| |
|
| |
|
|
|
| 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. |
|
|
| |
|
|
|
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. |
|
|
| |
|
|
|
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: KompilierenMarkierenSeparierenconst 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
KompilierenMarkierenSeparierenCLS
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
|
|
|
| |
|
|
|
Hubert Binnewies | PFFFFFFFFFFF....... Schwerer Tobak.....
das lässt sich im Prinzip bis 90 Grad auch über 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 über 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! |
|
|
| |
|
|
|
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 ▲ |
|
|
|
|
| |
|
| |
|
|
|
Hubert Binnewies | Ich bin noch dran..... Ich glaube ich komme mit einer Wurzel und ansonsten Grundrechenarten hin.... Damit dürfte 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 ▲ |
|
|
|