Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Rotazione punto in spazio 3D

334 views
Skip to first unread message

Alberto

unread,
Dec 5, 2003, 5:08:13 PM12/5/03
to
Ciao a tutti.
Sono un programmatore, ma quanto a matematica...
Sto cercando di realizzare una routine per ruotare un punto in uno
spazio 3D ma proprio non riesco. Tutto quello che sono riuscito a fare č
una rotazione su un asse o due al massimo.
Qualcuno mi puň aiutare?
In questo caso, prego di non esporre in forma analitica, ma con un
orientamento piů alla programmazione.

Le variabili sono:
ox, oy, oz - coordinata del centro-assi;
x1, y1, z1 - coordinata iniziale del punto da ruotare;
x2, y2, z2 - coordinata del punto ruotato;
ax, ay, az - angoli di rotazione per i rispettivi assi.

Spero di non chiedere troppo... scusate l'ignoranza e grazie a tutti.

Alberto


darko

unread,
Dec 5, 2003, 5:47:09 PM12/5/03
to
Alberto wrote:

> Ciao a tutti.
> Sono un programmatore, ma quanto a matematica...
> Sto cercando di realizzare una routine per ruotare un punto in uno
> spazio 3D

ruotare un punto ? Un punto ha una sola dimensione... anche se lo ruoti non
cambia posizione o orientamento...

o forse intendi ruotare il punto di vista ??

d

--
moio x la lyberta'
http://www.autistici.org/darko

rez

unread,
Dec 5, 2003, 7:45:17 PM12/5/03
to
On Fri, 05 Dec 2003 23:08:13 +0100, Alberto wrote:

>Le variabili sono:
>ox, oy, oz - coordinata del centro-assi;
>x1, y1, z1 - coordinata iniziale del punto da ruotare;
>x2, y2, z2 - coordinata del punto ruotato;
>ax, ay, az - angoli di rotazione per i rispettivi assi.

Ma non li trovi gia` fatti?
Cmq se il punto ruota bastano ax, ay, az, se invece va
da 1 a 2, questa e` una traslazione che generalmente si
aggiunge alle rotazioni ax,y,z ..in definitiva mi sa che
vuoi un moto elicoidale generico, o vuoi che ax avvenga
prima o come dire "separatamente" da ay e da az?

--
Ciao, | Attenzione! campo "Reply-To:" alterato ;^)
Remigio Zedda | E-mail: remi...@tiscali.it

-- Linux 2.4.22 su Slackware 9.1

Alberto

unread,
Dec 6, 2003, 3:46:45 AM12/6/03
to
Cerco di esprimere meglio.
Non volevo dire ruotare un punto sul suo asse, ma spostarlo in uno
spazio 3D intorno ad uno o più assi contemporaneamente.
Per essere ancora più chiaro, se voglio vedere un oggetto da diverse
angolazioni, devo spostare tutti i punti che lo compongono e io dovrei
farlo attorno agli assi dell'oggetto stesso.
Così vado meglio?
Grazie per l'attenzione.

Alberto

Alberto

unread,
Dec 6, 2003, 3:50:03 AM12/6/03
to
Già fatti cosa? I programmi di rotazione? Veramente non saprei proprio
dove cercarli.
Comunque ho esplicato meglio la richiesta a darko.
Però vi prego di non usare linguaggio troppo specialistico...

Alberto

Wodka40°(win2k)

unread,
Dec 6, 2003, 6:19:15 AM12/6/03
to
Alberto wrote:
> Già fatti cosa? I programmi di rotazione? Veramente non saprei proprio
> dove cercarli.
> Comunque ho esplicato meglio la richiesta a darko.
> Però vi prego di non usare linguaggio troppo specialistico...
>
> Alberto
cut
i più performanti son scritti in C (neanche c++)
ma son roba da esperti (mica tanto...ma insomma)
una versione più umana (benchè non per newbie)...
la trovi fatta anche in VB

http://www.codeguru.com/vb/articles/2014.shtml

p.s.
devi cercare su san google "Engine 3d"
Bye man!
:-)

--
Il Wodkino Nazionale è a : www.martek.it
Pagina Vb/Bestiario/Lamer Experience :
http://www.martek.it/go.asp?portamia=2 Quotefix e altro:
http://www.martek.it/go.asp?portamia=4
Usr: ICLVB Pw: amici


darko

unread,
Dec 6, 2003, 7:16:43 AM12/6/03
to
Alberto wrote:

> Cerco di esprimere meglio.
> Non volevo dire ruotare un punto sul suo asse, ma spostarlo in uno
> spazio 3D intorno ad uno o più assi contemporaneamente.
> Per essere ancora più chiaro, se voglio vedere un oggetto

"oggetto" va gia' meglio in quanto si presume che non sia composto da un
solo punto. Anche se in realta', un punto puo' cambiar posizione ruotando
qualora il punto non sia parte dell'asse di rotazione.

> da diverse
> angolazioni, devo spostare tutti i punti che lo compongono e io dovrei
> farlo attorno agli assi dell'oggetto stesso.

Credo che l'inghippo sia proprio qui. Non mi intendo un granche' di motori
3D, ma qualche esperienza ce l'ho. Innanzi tutto non e' affatto vero che se
vuoi vedere un oggetto da angolazioni diverse devi ruotare l'oggetto!
Bensi' dovrai ruotare il punto di vista! Si tratta proprio di 2 algoritmi
differenti.

Se invece devi effettivamente ruotare l'oggetto, puoi procedere cosi'.
Il tuo oggetto, che d'ora in poi chiamero' ogg, se ha 3 dimensioni avra'
allora certamente un asse orizzontale, un asse verticale ed uno laterale
che passano tutti per il punto mediano (la mezzeria, insomma).

alpha e' l'angolo che si forma tra ogg(X) e ogg(Y) cioe' l'angolo che si
forma tra l'asse orizzontale e l'asse verticale dell'oggetto.

Diciamo che vogliamo ruotare l'asse delle X dell'oggetto di 45 gradi allora
il nuovo valore di alpha e':

alpha += PI/4 (detto in maniera comprensibile ad un programmatore ;)

Adesso, tutte le coordinate "x" di tutti i punti dell'oggetto subirano una
rotazione di 45 gradi da una parte e -45 dall'altra (in quanto l'asse passa
per il punto di mezzeria). per calcolare l'effettivo spostamento in pixel,
poniano che il punto P dell'oggetto sia definito dalle seguenti coordinate
P=(100,200,300) e l'asse Y dell'oggetto ha x=50. La distanza tra la x del
punto P e la x dell'asse Y e' 100-50 = 50;

Lo spostamento sul piano orizzontale di Xp (il punto P dell'oggetto)
equivale a:

Xp = Xp + (sen(alpha) * 50)

ovviamente anche questa e' una formula in linguaggio informatico, non e'
un'equazione!

Lo stesso procedimento lo applichi a tutti i punti e a tutti gli assi.

Se invece intendi proprio ruotare il punto di vista... beh quello e' un paio
di maniche nel quale non posso proprio metter parola, vista la complessita'
e la mia ignoranza in materia!

> Grazie per l'attenzione.

de nada, nn so se saro' stato utile o ti avro confuso solo le idee...!

MaxArt

unread,
Dec 6, 2003, 12:01:34 PM12/6/03
to
Nel messaggio news:bqqvr5$pq9$2...@lacerta.tiscalinet.it, Alberto
<alberto....@tiscali.it> ha scritto:

> Sono un programmatore, ma quanto a matematica...

Ahi ahi ahi ;-)
Un buon libro di algebra lineare vedrai che ti aiuta non poco!
L'algebra lineare la trovi in un qualsiasi libro di geometria per
Matematica, Fisica o Ingegneria.

> Le variabili sono:
> ox, oy, oz - coordinata del centro-assi;
> x1, y1, z1 - coordinata iniziale del punto da ruotare;
> x2, y2, z2 - coordinata del punto ruotato;
> ax, ay, az - angoli di rotazione per i rispettivi assi.

Se conosci il calcolo matriciale, basta applicare le famose matrici di
rotazione. Sono del tipo:
[ cos(t) sin(t) 0 ]
[ -sin(t) cos(t) 0 ]
[ 0 0 1 ]
Questa è per la rotazione attorno all'asse delle z. La applichi al vettore
colonna (x1; x2; x3) ed ecco che subito ottieni il vettore ruotato di t
radianti attorno all'asse delle z. Semplice, no?
Le altre due matrici le ottieni spostando terza riga e colonna negli altri
due posti.

MaxArt


Elio Fabri

unread,
Dec 7, 2003, 2:28:44 PM12/7/03
to
MaxArt ha scritto:

> Ahi ahi ahi ;-)
> Un buon libro di algebra lineare vedrai che ti aiuta non poco!
> L'algebra lineare la trovi in un qualsiasi libro di geometria per
> Matematica, Fisica o Ingegneria.
> ...

> Questa è per la rotazione attorno all'asse delle z. La applichi al
> vettore colonna (x1; x2; x3) ed ecco che subito ottieni il vettore
> ruotato di t radianti attorno all'asse delle z. Semplice, no?
> Le altre due matrici le ottieni spostando terza riga e colonna negli
> altri due posti.
Se per te e' cosi' semplice, perche' non hai anche dato i valori dei tre
angoli?

Ad Alberto farei notare che con le sue condizioni la rotazione non e'
determinata: ci sono infinite scelte possibili.
Per avere una sola rotazione, devi dare *due punti* da ruotare (stando
attento pero' che la distanza dall'origine e tra l'uno e l'eltro siano
le stesse all'inizio e alla fine.

Cosa che non avevi esplicitata neanche nei tuoi dati: devi avere
x1^2 + y1^2 + z1^2 = x2^2 + y2^2 + z2^2.
------------------------------
Elio Fabri
Dip. di Fisica - Univ. di Pisa
------------------------------

MaxArt

unread,
Dec 7, 2003, 7:53:48 PM12/7/03
to
Nel messaggio news:bqvv1a$2v2u$5...@newsreader2.mclink.it, Elio Fabri
<mc8...@mclink.it> ha scritto:

> > Le altre due matrici le ottieni spostando terza riga e colonna
> negli > altri due posti.
>
> Se per te e' cosi' semplice, perche' non hai anche dato i valori dei
> tre angoli?

Dato che? Non ti ho capito.
Lui chiede come ruotare lungo i tre assi e io gliel'ho detto.
Sarà poi lui stesso ad accorgersi che, oltretutto, le rotazioni lungo i tre
assi non sono operazioni commutative!

Rileggendo il suo stesso messaggio, c'è anche da chiedersi cosa voglia dire
con: "Tutto quello che sono riuscito a fare è
una rotazione su un asse o due al massimo"...

MaxArt


Alberto

unread,
Dec 8, 2003, 2:49:36 PM12/8/03
to
Quando dico che sono riuscito a ruotare su uno o due assi, voglio dire
che non sono riuscito a ruotare simultaneamente su tutti e tre.
Infatti, se per esempio ruoto l'asse Z, gli assi X e Y si spostano e le
successive rotazioni devono tenerne conto, altrimenti non va come vorrei.

Asse Y
\ Asse X
\ /
\ /
O ---- Asse Z

Scusate lo schizzo...
Riesco a farmi capire? esempio pratico: supponiamo un foglio di carta
quadrato come questo qui sotto (lavorando di fantasia): se ruoto l'asse
Z di 45 gradi e poi l'asse Y di 90 gradi dovrebbe risultare disposto in
diagonale (di profilo), mentre con il calcolo matriciale sopra descritto
eseguito in sequenza lo ottengo disposto verticalmente (di profilo).

Asse Y
|
+-----+
| |
| z |-- Asse X
| |
+-----+

Elio Fabri

unread,
Dec 9, 2003, 1:57:00 PM12/9/03
to
MaxArt ha scritto:

> Dato che? Non ti ho capito.
> Lui chiede come ruotare lungo i tre assi e io gliel'ho detto.
> Sarà poi lui stesso ad accorgersi che, oltretutto, le rotazioni lungo
> i tre assi non sono operazioni commutative!
A me sembra di essere stato chiaro, ma ripeto.
Tu dici che una volta che si conoscono le matrici delle rotazioni lungo
i tre assi, il gioco e' fatto.
Benissimo: allora dicci come si trovano i tre angoli di rotazione,
assegnate le coordinate del punto di partenza e di quello di arrivo.

Alberto ha scritto:


> Quando dico che sono riuscito a ruotare su uno o due assi, voglio dire
> che non sono riuscito a ruotare simultaneamente su tutti e tre.
>
> Infatti, se per esempio ruoto l'asse Z, gli assi X e Y si spostano e le
> successive rotazioni devono tenerne conto, altrimenti non va come vorrei.

> ...
> Riesco a farmi capire? esempio pratico:

> ...
Ho capito il problema, anche se a me sembra proprio l'opposto.
Tutto dipende dal fatto che le rotazioni non commutano.

Ma vediamo in concreto. Prendi un vertice del tuo quadrato: (1,1,0).
La rotazione di 45 gradi attorno a z te lo porta in (0, sqrt(2), 0).
D'accordo fin qui?
Ora vuoi ruotare di 90 gradi attorno a y: il punto resta fisso.

Prendiamo invece il vertice (-1,1,0): la prima rotazione lo manda in
(-sqrt(2), 0, 0), la seconda lo porta in (0, 0, sqrt(2)).

Non e' quello che volevi?
Questo perche' ho tenuto fissi gli assi, e ho solo mosso i punti.
E' diverso se invece pensi di ruotare gli assi insieme ai punti...

Alberto

unread,
Dec 10, 2003, 3:29:05 AM12/10/03
to
> Ho capito il problema, anche se a me sembra proprio l'opposto.
> Tutto dipende dal fatto che le rotazioni non commutano.
>
> Ma vediamo in concreto. Prendi un vertice del tuo quadrato: (1,1,0).
> La rotazione di 45 gradi attorno a z te lo porta in (0, sqrt(2), 0).
> D'accordo fin qui?
> Ora vuoi ruotare di 90 gradi attorno a y: il punto resta fisso.
>
> Prendiamo invece il vertice (-1,1,0): la prima rotazione lo manda in
> (-sqrt(2), 0, 0), la seconda lo porta in (0, 0, sqrt(2)).
>
> Non e' quello che volevi?
> Questo perche' ho tenuto fissi gli assi, e ho solo mosso i punti.
> E' diverso se invece pensi di ruotare gli assi insieme ai punti...

Ed è proprio quello che cerco invano di ottenere...
Grazie comunque per il disturbo.

Alberto

SuperPollo

unread,
Dec 10, 2003, 1:26:06 PM12/10/03
to
Il Wed, 10 Dec 2003 09:29:05 +0100, Alberto ha scritto:

>> E' diverso se invece pensi di ruotare gli assi insieme ai punti...
>
> Ed è proprio quello che cerco invano di ottenere...

Be', non e' che fosse proprio banale, capire cosa volevi...

Provo a darti la mia soluzione.
Indico con X(t), Y(t) e Z(t) le matrici descritte da MaxArt [dipendenti da
un certo angolo t] e con "." [il punto] il prodotto matriciale righe per
colonne.
Se ad esempio ruoti di un angolo ax attorno a X sia il punto che il
sistema di riferimento, poi di un angolo ay attorno a Y [nel nuovo sistema
di riferimento] ed infine di az attorno al nuovo Z... se le coordinate del
punto nel sistema originale erano (x1, y1, z1), dopo le trasformazioni
saranno ancora le stesse, ma riferite all'ultimo sistema di riferimento.
Per esprimerle nel sistema originale [chiamiamole (x2, y2, z2)] puoi fare:

[x2, y2, z2] = [x1, y1, z1].Z(-az).Y(-ay).X(-ax)

che e' solo una serie di trasformazioni di coordinate a ritroso...
In pratica puoi usare una matrice M per memorizzare le varie
trasformazioni... dopo la prima rotazione: M = X(-ax); dopo la seconda: M
= Y(-ay).M; dopo la terza M = Z(-az).M... cosi', finite le rotazioni o
anche durante, puoi ottenere subito il punto che vuoi moltiplicandolo con
la matrice [la matrice sempre a destra, in questo caso].
Comunque, non fidarti troppo! :-)

Ciao ciao
Claudio

--
"[...] voglio sgrullarti fino a farti diventare una gattina,
ecco che ti voglio fare!"
da "Attraverso lo specchio" di Charles Lutwidge Dodgson

Marco Lanteri

unread,
Dec 11, 2003, 4:57:11 PM12/11/03
to
Premesso che non sono un esperto, supponendo che tu debba ruotare un
oggetto (mantenendo fisso il punto di vista), dovresti prima traslarlo
nell'origine, poi ruotarlo degli angoli desiderati e poi ritraslarlo
nella posizione originaria.
La traslazione la fai agevolmente se lavori con array di punti.
Idem per la rotazione, usi un prodotto di matrici di rotazione attorno
agli assi. Di per se' non c'e' proprieta' commutativa nel prodotto di
matrici, i.e A*B*C<>A*C*B, tuttavia avendo posto l'oggetto nell'origine
degli assi cartesiani, l'inghippo e' tutto sommato bypassato.
C'e' invece un altro metodo elegante (ma devi cercare un po' in
Internet) che applica i quaternioni (che puoi vedere come numeri
costituiti da un vettore 4D che non godono di proprieta' commutativa)
all'uso della rotazione.
Buon lavoro
Marco

PS: e utilizzare le functions definite dalle librerie OPENGL?


--
Posted via Mailgate.ORG Server - http://www.Mailgate.ORG

Alberto

unread,
Dec 12, 2003, 3:16:00 AM12/12/03
to

Grazie per la dritta. Proverò a fare questo prodotto di matrici e
vediamo cosa salta fuori... :-)
Le funzioni di OpenGL? Preferisco avere dei sorgenti su cui smanettare,
sai... deformazione professionale...

Alberto

Alberto

unread,
Dec 12, 2003, 3:19:59 AM12/12/03
to

> Be', non e' che fosse proprio banale, capire cosa volevi...
>
> Provo a darti la mia soluzione.
> Indico con X(t), Y(t) e Z(t) le matrici descritte da MaxArt [dipendenti da
> un certo angolo t] e con "." [il punto] il prodotto matriciale righe per
> colonne.
> Se ad esempio ruoti di un angolo ax attorno a X sia il punto che il
> sistema di riferimento, poi di un angolo ay attorno a Y [nel nuovo sistema
> di riferimento] ed infine di az attorno al nuovo Z... se le coordinate del
> punto nel sistema originale erano (x1, y1, z1), dopo le trasformazioni
> saranno ancora le stesse, ma riferite all'ultimo sistema di riferimento.
> Per esprimerle nel sistema originale [chiamiamole (x2, y2, z2)] puoi fare:
>
> [x2, y2, z2] = [x1, y1, z1].Z(-az).Y(-ay).X(-ax)
>
> che e' solo una serie di trasformazioni di coordinate a ritroso...
> In pratica puoi usare una matrice M per memorizzare le varie
> trasformazioni... dopo la prima rotazione: M = X(-ax); dopo la seconda: M
> = Y(-ay).M; dopo la terza M = Z(-az).M... cosi', finite le rotazioni o
> anche durante, puoi ottenere subito il punto che vuoi moltiplicandolo con
> la matrice [la matrice sempre a destra, in questo caso].
> Comunque, non fidarti troppo! :-)
>
> Ciao ciao
> Claudio

Ma sei Claudio o SuperPollo, allora? :-)
Il procedimento e' lo stesso che dice Marco Lanteri per caso?
Comunque grazie a tutti per il rompicapo, prima di tutto a capirmi...

Alberto

SuperPollo

unread,
Dec 12, 2003, 11:40:53 AM12/12/03
to
Il Fri, 12 Dec 2003 09:19:59 +0100, Alberto ha scritto:

>> Ciao ciao
>> Claudio
>
> Ma sei Claudio o SuperPollo, allora? :-)

:-) "Claudio" solo quando sono in incognito...

Approposito... c'era un errore di "segno", in quanto ho scritto. Ho
confuso le matrici di MaxArt [che erano matrici di rotazione] con quelle
di trasformazione di coordinate [che in pratica sono le stesse, ma con
segno opposto dell'angolo]. Cioe', se usi quelle matrici, il segno meno
che mettevo va tolto [ma in sostanza cambia solo il verso di rotazione].

> Il procedimento e' lo stesso che dice Marco Lanteri per caso?

Direi di no... ti ha dato ottimi consigli per approfondire, mentre io mi
limitavo al solo problema della rotazione...

Visto che non andava bene il metodo di MaxArt [che esegue in sequenza le
rotazioni attorno ad assi sempre fissi], se inverti l'ordine delle matrici
nel prodotto ottieni sempre le rotazioni, ma attorno agli assi nelle nuove
posizioni...
In pratica, chiamando M la matrice delle trasformazioni risultanti e u, v
e w tre angoli qualsiasi:
M = X(u).Y(v).Z(w)
ti da' le rotazioni attorno a tre assi fissi;
M = Z(w).Y(v).X(u)
te le da' con gli assi variabili... aggiungendo altre rotazioni, nel primo
caso moltiplichi a destra, nel secondo a sinistra.
Nell'esempio che facevi, considerando i quattro vertici:
P1 = [ 1, 1, 0]
P2 = [ 1,-1, 0]
P3 = [-1,-1, 0]
P4 = [-1, 1, 0]
dove uso le parentesi quadre per trattarli come matrici 1x3...
Ed eseguendo prima una rotazione di 45° attorno a Z e poi una di 90°
attorno a Y [nel primo caso con Y originale, nel secondo con la nuova Y
ruotata]...

Nel primo caso, che e' quello che non ti andava bene:
M = Z(45°).Y(90°) =
= [[0, SQRT(2)/2, SQRT(2)/2], [0, SQRT(2)/2, -SQRT(2)/2], [-1, 0, 0]]
... sempreche' si capisca come sto usando le quadre...
ed i quattro punti moltiplicati per M [cioe' Pn.M] diventano:
P1 => [ 0, SQRT(2), 0]
P2 => [ 0, 0, -SQRT(2)]
P3 => [ 0, -SQRT(2), 0]
P4 => [ 0, 0, SQRT(2)]

Nel secondo caso, che e' quello che c'interessa ora:
M = Y(90°).Z(45°) =
= [[0, 0, 1], [-SQRT(2)/2, SQRT(2)/2, 0], [-SQRT(2)/2, -SQRT(2)/2, 0]]
ed i quattro punti diventano rispettivamente:
P1 => [-SQRT(2)/2, SQRT(2)/2, 1]
P2 => [-SQRT(2)/2, SQRT(2)/2, -1]
P3 => [SQRT(2)/2, -SQRT(2)/2, -1]
P4 => [SQRT(2)/2, -SQRT(2)/2, 1]

Salvo errori, naturalmente...
Funziona perche' moltiplicando un punto per Y(90°) non faccio altro che
trovare le coordinate nel precedente riferimento... moltiplicando queste
ultime per Z(45°) trovo le coordinate corrispondenti nel sistema ancora
precedente, che e' quello originale... insomma, e' la sequenza di
trasformazione di coordinate inversa, nell'ordine, alle rotazioni
eseguite. Unito al fatto che la moltiplicazione di matrici e' associativa,
puoi memorizzare le trasmormazioni come dicevo nell'altro post.

> Comunque grazie a tutti per il rompicapo, prima di tutto a capirmi...

:-) Oh, di nulla... in realta' avrei preferito seguire le risposte di
Elio, perche' nelle sue spiegazioni mette sempre considerazioni molto
interessanti [si', me lo sto arruffianando... ma e' maledettamente bravo a
spiegare le cose e con lui si imparano facilmente e non diventano mai
banali... insomma, e' per banale tornaconto ;-)]...

riCiao ciao

elreg

unread,
Dec 14, 2003, 5:30:34 PM12/14/03
to

"Alberto" <alberto....@tiscali.it> ha scritto nel messaggio
news:bqqvr5$pq9$2...@lacerta.tiscalinet.it...

> Ciao a tutti.
> Sono un programmatore, ma quanto a matematica...
> Sto cercando di realizzare una routine per ruotare un punto in uno
> spazio 3D ma proprio non riesco.
Ti segnalo che, in alternativa al metodo delle matrici, in ogni libro di
meccanica razionale ci dovrebbe essere riportata una formula che fornisce
direttamente lo spostamento di un punto generico in funzione degli elementi
di un vettore r (vettore di rotazione), che ha il modulo uguale all'angolo
di rotazione e la direzione e senso uguale alla direzione e senso dell'asse
di rotazione.
Nel tuo caso, tu hai tre vettori di rotazione r1; r2; r3. Ma r1 è
l'effettivo vettore della prima rotazione mentre l'effettivo vettore della
seconda rotazione sarà r21 (il trasformato di r1 mediante la prima
rotazione).
Per il vettore della terza rotazione dovrai prima trasformare r3 con la
prima rotazione (otterrai un vettore r31). Poi dovrai trasformare r31 con la
seconda rotazione (otterrai un vettore r321). Ottenuti così gli effettivi
vettori di rotazione, per ottenere il trasformato di un punto generico
dovrai farlo ruotare prima secondo r1; poi secondo r21; poi secondo r321. La
formula da utilizzare è sempre la stessa e contiene un prodotto vettore e un
prodotto scalare. La formula è vettoriale ma tu considererai le componenti
secondo il riferimento x,y.z fisso (prima delle rotazioni).
Se ti impadronisci della formula , sono sicuro che non avrai più problemi a
lavorare con le rotazioni.
Ciao
Elreg

Alberto

unread,
Dec 18, 2003, 4:17:50 AM12/18/03
to
> Se ti impadronisci della formula , sono sicuro che non avrai piů problemi a

> lavorare con le rotazioni.
> Ciao
> Elreg

Gia', impadronirmi della formula... dici niente... :-)
Sotto che voce potrei cercare in Internet?
Grazie comunque per l'aiuto.
Ciao

Alberto

Alberto

unread,
Dec 18, 2003, 4:21:45 AM12/18/03
to
> C'e' invece un altro metodo elegante (ma devi cercare un po' in
> Internet) che applica i quaternioni (che puoi vedere come numeri
> costituiti da un vettore 4D che non godono di proprieta' commutativa)
> all'uso della rotazione.
> Buon lavoro
> Marco

Ho trovato gia' molto sui quaternioni, perfino una libreria di sorgenti
per capire meglio la cosa. Ora non mi resta che applicare e vedere cosa
succede.
Grazie ancora dell'aiutone.
Ciao.

Alberto

elreg

unread,
Dec 18, 2003, 5:01:07 PM12/18/03
to

"Alberto" <alberto....@tiscali.it> ha scritto nel messaggio
news:brrrj5$jmr$1...@lacerta.tiscalinet.it...
> > Se ti impadronisci della formula , sono sicuro che non avrai più

problemi a
> > lavorare con le rotazioni.
> Sotto che voce potrei cercare in Internet?
Meccanica Razionale Rotazioni
Riciao
Elreg


elreg

unread,
Dec 19, 2003, 11:24:58 AM12/19/03
to

"Alberto" <alberto....@tiscali.it> ha scritto nel messaggio
news:brrrj5$jmr$1...@lacerta.tiscalinet.it...

> Gia', impadronirmi della formula... dici niente... :-)
> Sotto che voce potrei cercare in Internet?

Posso comunque darti la formula, che non è poi così complicata:
OP' = sen(delta)*u/\OP + cos(delta)*OP - (cos(delta) - 1))*uXOP*u
In questa:
O è un punto dell'asse di rotazione (che puoi far concidere coll'origine del
sistema di riferimento); OP' è il vettore trasformato(dopo la rotazione);
delta è l'angolo di rotazione (tra 0 e 180 gradi); /\ è il simbolo di
prodotto vettoriale; X è il simbolo di prodotto scalare; u è il versore che
definisce la direzione e il senso dell'asse di rotazione. Devi solo
proiettare i vettori del primo e secondo membro della formula sugli assi
x,y,z per ottenere x',y',z' in funzione di x,y,z.
Le formule delle componenti di un vettore prodotto vettoriale di due vettori
dati e la formula del prodotto scalare tra due vettori (che è un numero) le
trovi in qualsiasi libro di calcolo vettoriale ( o su internet).
Buon divertimento :-))
Elreg

0 new messages