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

From: Soviet_Mario <SovietMario_at_CCCP.MIR>
Date: Mon, 8 Nov 2021 15:39:05 +0100

Il 08/11/21 11:57, Elio Fabri ha scritto:
> Soviet_Mario ha scritto:
> > 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
> Le differenze sono due.
> La prima sta nell'angolo di pitch.
> ElFil lo definisce in modo che riesce positivo se Dz>0, io
> l'opposto.
> Ho già spiegato come mai io lo do negativo.
> La seconda è nell'ordine delle due rotazioni.
> Non ho approfondito, ma ElFil prima ha dato un ordine poi l'ha
> corretto.
> Non ho verificato quale delle due versioni concorda con la mia.
>
> > no questo l'ho intuito, perché con OpenSCAD me la cavicchio,
> Continui a parlare di questo OpenSCAD come se fosse scontato
> che
> chiunque sappia che cos'è.
> Invece io non ne ho la minima idea. Sarò il solo?

ah, boh, è un modellatore 3D "parametrico" open source
(linux windows e tutto) molto ben noto tra i "makers" che
usano le stampanti 3D.

Sostanzialmente è un programma di "geometria costruttiva"
che mediante un'interfaccia TESTUALE C-like (ma la
somiglianza è ahimè del tutto superficiale e apparente, non
è un linguaggio dichiarativo/procedurale, ma funzionale, e
io non ci vado molto d'accordo in questo senso), costruisce
oggetti 3D fatti di poligoni.

HA funzioni anche molto di alto livello, oltre alle poche
primitive, come estrusioni lineari (con avvitamenti
opzionali), estrusioni per rotazione, scale () per
ridimensionare, scavo di "buchi" con operatore difference
(), intersezioni tra solidi, unione di solidi in aggregati,
rototraslazioni, hull () (costruisce un poliedro
circoscritto all'aggregato), minkowsky () (passa una forma
sui bordi di un aggregato ... questa manco la so spiegare).

Quindi è un linguaggio di programmazione grafico nel modo
inverso a quanto si intende normalmente : l'interfaccia è
codice, il prodotto sono poligoni 3D.

>
> > 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 ....
> Cavolo, e adesso lo dici?

eh ... perché non l'avevo mai usata in pratica questa
seconda versione. È vero che ogni tanto mi rileggo a macchia
il manuale, e in teoria la conoscevo, ma non me la sono
ricordata nemmeno.

Ora la sto provando, pare potentissima, ma non mi sta
funzionando come immagino e devo prenderci familiarità con
parecchi esempi. Purtroppo io se non lo vedo non lo capisco.

La sto innestando in cicli iterativi per spazzare un intero
angolo giro e vedere dove colloca le cose.
Cmq sì, in linea di massima ruota un oggetto attorno ad una
direzione arbitraria.

Ora coi miei oggetti costruiti a mano tramite array, di cui
posso ricavare il baricentro e stabilire io l'asse
intrinseco, il problema è finito.
Con gli oggetti nativi, ancora non capisco molto bene come
associare questa rotate (angolo, vettore)
alla rotate (roll, pitch, jaw) ... farò tentativi.

Tra l'altro, sempre nel manuale, una cosa che non ricordavo
nemmeno, questa mi era proprio sfuggita, è una funzione
intrinseca chiamata MULTMATRIX, che, udite udite, applica
una matrice di rototraslazione generalizzata 4x4 e
precalcolata, non lavora su array bensì sugli oggetti nativi
passati come "children", quindi anche su oggetti opachi e
non esposti all'utente come coordinate leggibili.

Sostanzialmente è un'unione di rotate e translate insieme. A
naso ci metterò tantissimo tempo a famigliarizzarmi anche
con questa, ma probabilmente vale la pena di investirci

> E' la soluzione più semplice.
> Tu hai un vettore [1,0,0] che deve diventare parallelo a
> [Dx,Dy,Dz].
> E' ovvio che l'asse di rotazione è la bisettrice delle
> semirette dei
> due vettori, e l'angolo è 180°.
> Non mi dici come viene dato l'asse di rotione: forse come
> vettore
> unitario?

un insieme di tre valori di "pendenza", probabilmente li
normalizza internamente, perché ho notato che funziona sia
con vettore di modulo unitario che qualsiasi.

> In ogni caso si procede così.
> Poniamo per brevità u := [1,0,0], v := [Dx',Dy',Dz'] (vettori
> unitari).
> Calcola w := (u+v)/2

scusa la conferma che chiedo probabilmente cretina : la
somma è semplicemente quella ordinata, giusto ? [(1+Dx')/2,
  (0+Dy')/2, (0+Dz')/2]


> e poi normalizza: questo è l'asse di
> rotazione.
>
> > applica le rotazioni nell'ordine menzionato dagli argomenti
> > formali, è molto prevedibile.
> Cioè
> rotate(a,b,c) = rotate(0,0,c) * rotate(0,b,0) * rotate(a,0,0) ?
>
> > MA in realtà non sto cercando di pilotare la stampante 3D
> > ... lo ammetto, mi sto mettendo a "disegnare" ... castelli
> > medioevali virtuali :\
> Questo per me è arabo, ma non ha importanza.

ma non c'è niente da capire in realtà : OpenSCAD è un
modellatore che costruisce poligoni in 3D in base a codice
di aspetto vagamente C-like.


-- 
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 - 15:39:05 CET

This archive was generated by hypermail 2.3.0 : Mon Jan 20 2025 - 04:22:56 CET