Newsgroup: it.comp.lang.delphi
Titolo: Problema di Trigonometria

Come sapete in delphi (unit Math) ci sono queste le 2 funzioni inverse
del seno e del coseno
function ArcCos(X: Extended): Extended;
function ArcSin(X: Extended): Extended;
che usano entrambe la
function ArcTan2(Y, X: Extended): Extended;
ora entrambe hanno una limitazioni hanno un codomineo definito solo
tra 0 e Pi (il Cos) e tra -Pi/2 e Pi/2 (il seno)
avrei bisongo di agirare questo problema io di trigonometria non so un
H (Me ne fate una colpa?) sulla carta con un po' di pazienza ci arrivo
anche io ai valori mancanti usando queste due funzioni ma non so
neache da dove inziare per ottenere una formula da dare al pascal
per farmi 2 funzioni che abbiano 0..2Pi come codomino (2Pi escluso
ovviamente, perche č = a 0)
Il Razziatore,
The Only Good Windows is an uninstalled Windows
-----------------------------------------------
E-MAILs : IlRazziat...@NOSPAMnetscape.net
ICQ     : 67552596

ovviamente, perche è = a 0)
Il problema e' che le funzioni inverse di seno e coseno hanno quel
codominio in modo da renderle univoche (un solo valore per ogni x),
altrimenti non potrebbero essere definite come funzioni (che devono
appunto essere univoche x definizione).
In generale l'arcocos ( l'arcosen) hanno infinite soluz, definite come
y (la soluz nel codominio) +- n*Pi (il loro periodo * qualunque numero
intero n), quindi se vuoi ottenere un codominio di ampiezza 2Pi
otterresti come soluzione 2 valori, e non uno solo!
Se si conosce il problema che devi risolvere con queste funzioni
inverse puoi decidere quale valore sia quello corretto, altrimenti
cio' non e' possibile...
Se mi dici + nel dettaglio il motivo x cui ti serve avere un dominio
di 2Pi magari posso darti una mano...
Bye!
-- 
        <<* VeGeTa_CuBe *>>
 
http://members.xoom.it/vegeta3/


Non è cosi semplice... io ho una matrice OpenGL (4x4) con cui si
effetuano le modificazioni degli oggetti 3D...
io ho fatto un oggetto ke funziona alla perfezione ma se provo a fare
OggettoA.RotY :=  OggettoA.RotY + 1;
(cioè ruoto l'oggetto secondo il suo asse Y ad ogni refresh dello
schermo) 
cos(angle),0,-sin(angle),0,
0,1,0,0,
sin(angle),0,cos(angle),0,
0,0,0,1
Cmq come vedi io ho sia il seno che il coseno dello stesso ancolo
e a mano riesco pure a ricostruire l'angolo ma non riesco a trovare
una formula...


una formula...
Allora... non ti sei spiegato benissimo, o + probabilmente sono io che
non riesco a capire ;-) ... Cmq vediamo se ho inquadrato il problema:
tu hai la matrice 4x4 (che ad occhio dovrebbe essere una generica
matrice di rototraslazione nello spazio utilizzando la scrittura
omogenea, pero' ridotta ad una semplice rotazione intorno all'asse y)
e vuoi ricavare l'angolo, giusto?
Se e' cosi' ce la possibilita' di trovare una soluzione unica, anche
per una rotazione generica intorno ad una asse generico: il corso di
Meccanica dei Robot seguito l'anno scorso sta ora rivelando tutta la
sua utilita! :-))
In un raptus di follia mi son messo a ricavare la soluzione per il tuo
caso specifico, se credi possa interessarti il procedimento generale
fammelo sapere ;-)
Il risultato e' in relata' molto semplice: per trovare l'angolo basta
fare l'arcocos di cos(angle), che in teoria da come soluz +-(angle tra
0 e 2Pi), ma tu prendi il risultato positivo (quello che viene sputato
fuori dalla funzione delphi, immagino), che corrisponde a (supponendo
che angle sia positivo nel caso di rotaz oraria attorno all'asse y):
1) sin(angle)>0 : una rotazione oraria pari ad angle (o una rotazione
antioraria pari a 2Pi-angle)
2) sin(angle)<0 : una rotazione antioraria pari ad angle (o una
rotazione oraria pari a 2Pi-angle)
[E' tardi e forse ho fatto confusione coi segni, potrebbe essere
giusto scambiando < con > e viceversa: cmq basta che fai una prova nel
tuo programma e dovresti accorgertene subito...]
Se per te e' positiva una rotazione antioraria, scambia tutti i
termini "orario" e "antiorario" dei punti 1) e 2)...
Il fatto che puoi considerare una rotazione di angle in un senso o una
rotazione di (2Pi-angle) nell'altro senso non crea ambiguita', perche'
se ci pensi un'attimo vedrai che arrivi sempre nella medesima
posizione, e quindi corrispondono effettivamente alla stessa
rotazione!!!
Spero di esserti stato d'aiuto e di non essere stato troppo
confusionale ;-)
Se invece (ma spero proprio di no!) il tuo problema era un'altro...
spiegamelo e vedro' cosa riesco a fare :-)
