| |
|
|
| Hey podría me Por favor, uno el deutlich mehr matemáticamente gebildeten XProfan en el Sprünge helfen ? Yo sehe el Wald antes Bäumen no mehr
Alles Yo voluntad es una schnelle Función de el Strecke xy,xxyy me el winkel (360°!) zurückliefert.
Mein Code funktioniert ya - naja fast. KompilierenMarcaSeparaciónCLS
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
|
|
|
| |
|
|
|
Hubert Binnewies | ¡Hola IF
also...en Mathe bin Yo bien en él...aber en el verstehen deine Codes no tan bueno...
debería el el Sinussatz ser???
macht me doch veces ne Gleichung oder Formel en y yo Denk me qué de..oki??
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!" | 05.12.2006 ▲ |
|
|
|
|
Carlo Keil | Hola si, si yo el correcto verstehe, suchst du el Winkel zwischen uno Strecke o. deren Verlängerung y x-Achse. Das debería con sólo uno Winkelfunktion ir: (mangels Profano y Testmöglichkeit sólo una Pseudocode)
Winkel en el Bogenmaß = Arcustangens(abs((y2 - y1) / (x2 - x1)))
Üblicherweise son el Winkelfunktionen no übermäßig rápidamente. Wenn lo dir en Performance ankommt sehe Yo sólo zwei Möglichkeiten: Ensamblador oder beim Programmstart una propio Arcustangenstabelle inicializar, el du entonces sin Berechnung direkt abgreifst (deren Größe hängt natürlich de el deseado Genauigkeit de ).
HTH Carlo |
|
|
| |
|
|
|
| @Hubert: Lo va me sólo por lo tanto de uno cada Linie el Winkel ermitteln a puede. Yo tue mich schwer lo que el Umsprünge betrifft si z.B. xx&<x& es etc.
@Carlo: Tabellen, klar, tener hier auch ya solche Nuevo - aber el Genauigkeit debería ya möglichst hoch ser - Tabellen fallen hier de.
An Winkel en el Bogenmaß = Arcustangens(abs((y2 - y1) / (x2 - x1))) kann Yo mich auch erinnern - el Yo oben sí angewandt.
Wenn Yo obiges aber laufen lasse hay zw. 160° y 200° una Problema - y yo bin betriebsblind.
Natürlich werd ego el Performance wegen después de ASM übertragen. |
|
|
| |
|
|
|
| Hm also me schenkt keiner solch una Proc wa? |
|
|
| |
|
|
|
Jac de Lad | Yo erlaube me mich a matemáticamente gebildeten Personen hier en el Foro a zählen...
Aber Yo verstehe el Fragestellung no. Kannste el otra vez ausführen? Auch de el Code voluntad Yo no schlau... |
|
|
| Profan² 2.6 bis XProfan 11.1+XPSE+XPIA+XPRR (und irgendwann XIDE) Core2Duo E8500/T2250, 8192/1024 MB, Radeon HD4850/Radeon XPress 1250, Vista64/XP | 05.12.2006 ▲ |
|
|
|
|
| Ok klar!
Yo male una Linie de 100,100 después de mousex,mousey
Alles Yo gerne hätte es el Winkel el Linie!
----> 0°
<--- 180°
^ | 270°
Halt una Proc el me simplemente siempre el richtigen Winkel son después de que ihr x,y - xx,yy transferencia habe. |
|
|
| |
|
|
|
Jac de Lad | Aso, kein Problema, kriegst bald ne Antwort! Muss ahora aber grad qué más hacer... |
|
|
| Profan² 2.6 bis XProfan 11.1+XPSE+XPIA+XPRR (und irgendwann XIDE) Core2Duo E8500/T2250, 8192/1024 MB, Radeon HD4850/Radeon XPress 1250, Vista64/XP | 05.12.2006 ▲ |
|
|
|
|
| |
|
| |
|
|
|
| Ach lol Yo dussel - Yo habs. Hey aber tal vez es Deins más rápido? Yo poste meins igual veces... |
|
|
| |
|
|
|
| KompilierenMarcaSeparación {$cleq}
const myPi=3.1415926535897932384626433832795
cls
while 1
cls
print int(wnk(100,100,mousex,mousey,false)),"° "
sleep 50
wend
waitkey
proc wnk(float x1,y1,x2,y2,int mode)
float x= sub ( x2! , x1! )
float y= sub ( y2! , y1! )
line x1,y1 - x2,y2
case (x<0) and (y<0) : return wnk(x2,y2,x1,y1,3)
case x<0 : return wnk(x2,y1,x1,y2,1)
case y<0 : return wnk(x1,y2,x2,y1,2)
casenot x : x=0.0000001
casenot y : y=0.0000001
float w=arctan(y/x)*180/myPi
if (mode==1)
w:=90+(90-w)
elseif (mode==2)
w:=360-w
elseif (mode==3)
w:=180+w
endif
return w
ENDPROC
KompilierenMarcaSeparaciónCLS
WHILE 1
CLS
PRINT INT(WNK(100,100,%MOUSEX,%MOUSEY,0)),"° "
SLEEP 50
ENDWHILE
WAITKEY
proc WNK
PARAMETERS X1!,Y1!,X2!,Y2!,MODE%
var X!=SUB ( X2! , X1! )
var Y!=SUB ( Y2! , Y1! )
LINE X1!,Y1! - X2!,Y2!
IF (X!<0) AND (Y!<0)
RETORNO WNK(X2!,Y2!,X1!,Y1!,3)
ENDIF
IF X!<0
RETORNO WNK(X2!,Y1!,X1!,Y2!,1)
ENDIF
IF Y!<0
RETORNO WNK(X1!,Y2!,X2!,Y1!,2)
ENDIF
IFNOT X!
X!=0.0000001
ENDIF
IFNOT Y!
Y!=0.0000001
ENDIF
var W!=ARCTAN(Y!/X!)*180/3.1415926535897932384626433832795
IF (MODE%=1)
W!=90+(90-W!)
ELSEIF (MODE%=2)
W!=360-W!
ELSEIF (MODE%=3)
W!=180+W!
ENDIF
RETORNO W!
ENDPROC
|
|
|
| |
|
|
|
Jac de Lad | Probier veces el: KompilierenMarcaSeparación
proc Winkel
Parameters x1!,y1!,x2!,y2!
declare dx!,dy!
dx!=x2!-x1!
dy!=y1!-y2!
if Abs(dx!)<Abs(dy!)
Return Pi()/2-ArcTan(dx!/dy!)+If((dx!<0) | (dy!<0),Pi(),0)
else
Return ArcTan(dy!/dx!)+If((dx!<0) | (dy!<0),Pi(),0)
endif
Profan² 2.6 bis XProfan 11.1+XPSE+XPIA+XPRR (und irgendwann XIDE) Core2Duo E8500/T2250, 8192/1024 MB, Radeon HD4850/Radeon XPress 1250, Vista64/XP | 05.12.2006 ▲ | |
|
|
|