Re: [semi-OT] quesito conversioni angoli roll-pitch-yaw

From: Soviet_Mario <SovietMario_at_CCCP.MIR>
Date: Mon, 8 Nov 2021 04:42:08 +0100

Il 07/11/21 21:33, Elio Fabri ha scritto:
> Soviet_Mario ha scritto:
> > grazie mille anche a te! Questa sembra pure una soluzione
> > "precotta e predigerita" :D lol.
> Naturalmente non ti sei accorto che la mia sol. e quella di
> ElFil sono
> diverse...

diciamo che mi sono sembrate diverse all'apparenza, ma non
le ho ancora implementate, sicché non ho potuto verificare
se e dove lo fossero nelal sostanza, per cui mi sono
astenuto da osservazioni

> Il che non vuol dire che una sia giusta e l'altra sbagliata.

dipenderà se riuscirò a collocare i pezzi come vanno messi :D

> Speravo di poter evitare di dirtelo, ma purtroppo
> l'argomento è un
> gigantesco casino.

no questo l'ho intuito, perché con OpenSCAD me la cavicchio,
ma stavolta mi son trovato proprio a cominciare da zero.
E oltretutto le routine che ho fatto e lavorano su matrici
interamente generate da me (non primitive interne, non
esposte), le ho capite solo fino a un certo punto.

>
> L'articolo di wiki che ti ho indicato ha una sezione intitolata
> "Ambiguities".
> Dagli una scorsa, senza cercare di capire, ma solo per
> renderti conto
> che il casino è noto e dichiarato.

eh ma sto sbattendo il grugno su rotazioni estrinseche,
intrinseche, angoli di eulero e vattelapesca.

>
> Il problema è che tu gli angoli li devi dare in pasto alla tua
> funzione rotate()

esattamente giusto.

> e non so se hai un manuale che descriva

si ce l'ho, e riporta tutte le convenzioni usate, l'ordine
di applicazione, la non commutatività della multi-rotazione
(le esegue in sequenza e separatamente), e la convenzione
per il segno positivo dell'angolo (c'è, anche se non me la
ricordo)

> *esattamente* che cosa fa questa funzione.
> La soluzione sarebbe di scoprirlo per tentativi, ma non so
> se ne sei
> capace.

rotate la uso normalmente per posizionare oggetti "opachi",
ossia semanticamente noti al linguaggio, ma che non
"espongono" nessun vertice.

Sugli oggetti costruiti con matrici numeriche, mi sono
dovuto scrivere la rotate "mia" (scopiazzata), che lavora
solo sui miei array 3D, e non può vedere nessun oggetto nativo.

Ora voglio integrare un po' di più questi due mondi, e
quindi devo convertire delle pendenze (DX, DY, DZ) in
istruzioni dei tre angoli da passare a rotate ()

per inciso ce ne sono due versioni, una che so usare,
l'altra no.

Quella che so usare richiede i tre angoli roll,pitch,jaw.

L'altra invece (e tra l'altro forse fa quel che vorrei ma
non l'ho mica capito), chiede un vettore che funge da asse
di rotazione, e un angolo, che è la rotazione attorno a
quell'asse .... e porca puzzola ora che me lo hai fatto
scrivere, ed era una cosa archiviata in un angolino del
cervello silente, perché non l'ho mai usata a suo tempo ...
ecco mi accorgo che forse fa esattamente quel che vorrei.
Però è spiegata male, almeno per me che non ho basi solide.
Sicché devo tornare a studiarmi questa seconda versione
nativa di rotate ()

>
> Qualche suggerimento.
> Per prima cosa, prova a dare alla funzione tre angoli di cu
> uno solo
> non nullo e semplice: per es 90°:
> rotate(90,0,0)
> rotate(0,90,0)
> rotate(0,0,90).
> Se puoi vedere le matrici, capisci che cosa fanno. Saranno
> rotazioni
> di 90°, ma devi vedere rispetto a quali assi e in che verso.
>

no ma rotate in sé non mi crea più nessun problema, l'ho
usata per farci un po' di tutto, talvolta proprio a tentativi.

> Poi prova a comporre due rotazioni, per es. rotate(90,0,0) e
> rotate(0,90,0).
> Verifica se rotate(90,90,0) è la matrice prodotto e in che
> ordine.

applica le rotazioni nell'ordine menzionato dagli argomenti
formali, è molto prevedibile.
Il difficile è capire, nella propria esigenza, quale debba
essere questo ordine giusto, perché se è diverso, serve
eseguire più istruzioni rotate separate che forzino l'ordine,
Es. se c'è la necessità di ruotare PRIMA di 30° attorno a
asse Z e DOPO di 60° attorno ad asse X, uno deve scrivere
rotate ([0, 0, 30])
     rotate ([60, 0, 0])
         Oggetto_Nativo_qualunque
e non le può aggregare in
rotate ([60, 0, 30])
     Oggetto_Nativo_qualunque

perché appunto non commuta in modo giusto

>
> Fatto questo potrai sapere se corrisponde o no alla matrice
> come è
> scritta nell'articolo.
>
> C'è pure un'altra cosa da verificare: che verso è preso
> positivo per i
> tre angoli di roll, pitch, yaw.

c'è nell'help ma non me lo ricordo

> Le matrici dell'articolo prendono positive le rotazioni
> antiorarie
> rispetto agli assi indicati.
> Ma non è detto che sia sempre così.

mi pare che sia così, anche se c'era qualche caveat. Ma è il
meno, uno lo vede a occhio e cambia un segno in quel caso
(oppure fa l'angolo complementare a 360)

>
> Esempio.
> Se hai una barca, direi che l'asse x sia sempre da poppa a
> prua.
> L'asse z punta verso lo zenit.
> Di conseguenza l'asse y punta verso sinistra (è babordo o
> tribordo?)
> guardando la prua.
>
> Ora il problema è col beccheggio (pitch).
> Secondo le convenzioni che ho detto, un beccheggio positivo
> sarebbe
> una rotazione attorno all'asse y in senso antiorario.
> Quindi un beccheegio di +10° *abbassa* la prua di 10°.
> Ho una gran paura che la convenzione marinara sia opposta,
> ma posso
> sbagliare.
> Lo puoi verificare come ho già detto: dopo che hai
> identificato quale
> dei tre arogomenti di rotate è l'angolo di pitch, esegui un
> pitch di
> 10° e guarda l'effetto che fa.
>
> La stessa cosa dovresti fare per rollio e imbardata, anche
> se in
> questi casi sarei più tranquillo.
> Ma una verifica non fa male.
> E scriviti tutto!
> Sia per ricordartelo, sia per chiedere aiuto, se del caso.
>
> Ti aspettano giorni di puro divertimento :-D

Mi devo studiare la seconda versione di
rotate (Angolo, Asse) cmq.
Se fa quel che voglio, e se riesco a farglielo fare, ho
aperto un vaso di Pandora per niente ... o boh, non del
tutto in realtà.
Con quei programmini helper esterni e l'incollamento di
array precalcolati, qualche agevolazione l'ho già trovata
nel generare "ruote dentate"
MA in realtà non sto cercando di pilotare la stampante 3D
... lo ammetto, mi sto mettendo a "disegnare" ... castelli
medioevali virtuali :\





-- 
1) Resistere, resistere, resistere.
2) Se tutti pagano le tasse, le tasse le pagano tutti
Soviet_Mario - (aka Gatto_Vizzato)
Received on Mon Nov 08 2021 - 04:42:08 CET

This archive was generated by hypermail 2.3.0 : Fri Nov 08 2024 - 05:09:59 CET