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

70 views
Skip to first unread message

Soviet_Mario

unread,
Nov 6, 2021, 11:30:03 PMNov 6
to

penso sia semi OT, o forse OT (è geometria in effetti), ma
per voi è una passeggiata di un attimo

premesso, sto scrivendomi dei programmini "helper" per
OpenSCAD, ossia che costruiscono arrays di coordinate o di
angoli nel formato "roll-pitch-yaw" che poi OpenSCAD usa
nativamente.

Esternamente, genero dei "path" (con funzioni che in un
linguaggio "vero", non me ne vogliano i puri funzionalisti
:D, diciamo dichiarativo, possono banalmente essere
iterative, mentre in uno funzionale diventano ricorsive e mi
ci perdo), ossia generiche SPEZZATE angolose, e creo le
coordinate a cui poi spostare "oggetti" costruiti con openscad.

Dopodiché, questi oggetti però non dovrebbero venire solo
TRASLATI alle coordinate date, ma opzionalmente RUOTATI in
3D (mi sto sforzando di ottenere una "pseudo" tangenza,
usando la direzione SECANTE il percorso 3D per i due punti
confinanti, il precedente e il successivo, e tanto mi
basta), ma ho un problema di conversione.

Mi spiego meglio.

in INPUT ho due punti (con uno intermedio), da cui ricavo
DeltaX, DeltaY e DeltaZ (riferiti alla secante passante per
gli stessi).

Devo convertirli in angoli di rotazione per poter disporre
un oggetto correttamente ruotato nel punto intermedio agli
stessi.

Ora ioe la cavicchio con le coordinate SFERICHE (che hanno
un raggio o modulo, e soli DUE ANGOLI, zenitale e
azimutale), e ho già qualche routine che dai 3 Delta ottiene
Azimut e Zenith, così come pure l'inverso (usando dei delta
normalizzati a 1 per convenzione mia, perché ovviamente
l'inverso non ha una soluzione univoca).


Ma la funzione rotate () nativa non usa i due angoli delle
coordinate sferiche,
invece vuole TRE angoli ROLL / PITCH / YAW
e io non so come ottenerli a partire


P.S. dalla terna di angoli ROLL / PITCH / YAW mi sono
trascritto (ho brutalmente copiato codice altrui open) una
routine che crea una matrice di rotazione quadrata 3x3,
perché a volte mi serve ruotare gli oggetti direttamente
dentro l'altro linguaggio, e non invocare rotate () nativa
di openSCAD.

L'inverso non l'ho implementato perché non mi serve in
nessuno scenario concreto.

Ma mi resta il problema di fondo che non so come convertire
la notazione "angoli zenith/azimut in coord sferiche" nella
notazione "angoli roll/pitch/yaw" usata da openSCAD, né il
contrario.

E o non trovo nada, oppure se lo vedo, non capisco nemmeno
che sia quello l'argomento.

Mi accontenterei se sapeste indicarmi una risorsa in rete.
Intanto spulcio in Rosetta Code, ma dispero abbastanza.


--
1) Resistere, resistere, resistere.
2) Se tutti pagano le tasse, le tasse le pagano tutti
Soviet_Mario - (aka Gatto_Vizzato)

El Filibustero

unread,
Nov 7, 2021, 7:30:03 AMNov 7
to
On Sun, 7 Nov 2021 04:26:19 +0100, Soviet_Mario wrote:

>Ma mi resta il problema di fondo che non so come convertire
>la notazione "angoli zenith/azimut in coord sferiche" nella
>notazione "angoli roll/pitch/yaw" usata da openSCAD, né il
>contrario.

Ma gli angoli roll/pitch/yaw (o sia: rollio/beccheggio/imbardata) non
sono banalmente le rotazioni attorno ai rispettivi assi x,y,e z?

Comunque c'e' un grado di liberta' che non torna: zenith/azimut
identificano un punto su una sfera, mentre roll/pitch/jaw descrivono
l'assetto 3D di un *solido*. Cioe', se si vuole che un aereo punti a
(zenith/azimut) e' sufficiente imbardare di -azimut e beccheggiare di
-zenith; il rollio e' ininfluente.

Comunque probabilmente il problema e' elementare se formulato -- come
non hai fatto -- in termini elementari. Ciao

Soviet_Mario

unread,
Nov 7, 2021, 9:18:02 AMNov 7
to
Il 07/11/21 13:25, El Filibustero ha scritto:
> On Sun, 7 Nov 2021 04:26:19 +0100, Soviet_Mario wrote:
>
>> Ma mi resta il problema di fondo che non so come convertire
>> la notazione "angoli zenith/azimut in coord sferiche" nella
>> notazione "angoli roll/pitch/yaw" usata da openSCAD, né il
>> contrario.
>
> Ma gli angoli roll/pitch/yaw (o sia: rollio/beccheggio/imbardata) non
> sono banalmente le rotazioni attorno ai rispettivi assi x,y,e z?

sì, sono quelle

>
> Comunque c'e' un grado di liberta' che non torna: zenith/azimut
> identificano un punto su una sfera, mentre roll/pitch/jaw descrivono
> l'assetto 3D di un *solido*.

lo so, infatti c'è qualcosa che mi sfugge ma non so
diagnosticare.
Ora provo a rispiegare con approccio diverso

> Cioe', se si vuole che un aereo punti a
> (zenith/azimut) e' sufficiente imbardare di -azimut e beccheggiare di
> -zenith; il rollio e' ininfluente.
>
> Comunque probabilmente il problema e' elementare se formulato -- come
> non hai fatto -- in termini elementari. Ciao

eh non mi è semplice, infatti. Riprovo.

Dispongo di due punti 3d
P1 (X1, Y1, Z1) e
P2 (X2, Y2, Z2)
che individuano un segmento orientato a caso con pendenze, è
un vettore, ha anche un verso

S [DX, DY, DZ]


da parte ho un oggetto 3D di forma qualsiasi, di cui conosco
solo alcune coordinate ma non i punti generati, che diciamo
abbia un proprio ASSE DI RIFERIMENTO interno (gli oggetti
nativi fanno riferimento all'asse X ma è irrilevante).


Ora io voglio disporre l'asse interno dell'oggetto (che NON
conosco e openSCAD non espone le sue coordinate, ma so
essere allineato all'asse X) parallelamente al segmento DX.


E per fare ciò ho una sola funzione nativa, rotate () che
richiede TRE angoli, roll pitch and jaw, che sono quelli che
avevi detto.

quindi noti DX, DY e DZ, devo ricavare roll pitch and jaw

I dati mi bastano ? Direi di sì ... ma non so come
ragionare. (al contrario so convertire il segmento in
coordinate sferiche normali, che però non mi servono a una
cippa).

Elio Fabri

unread,
Nov 7, 2021, 10:12:02 AMNov 7
to
Soviet_Mario ha scritto:
> Dispongo di due punti 3d
> P1 (X1, Y1, Z1) e
> P2 (X2, Y2, Z2)
> che individuano un segmento orientato a caso con pendenze, è
> un vettore, ha anche un verso
>
> S[DX, DY, DZ]
>
> da parte ho un oggetto 3D di forma qualsiasi, di cui conosco
> solo alcune coordinate ma non i punti generati, che diciamo
> abbia un proprio ASSE DI RIFERIMENTO interno (gli oggetti
> nativi fanno riferimento all'asse X ma è irrilevante).
>
> Ora io voglio disporre l'asse interno dell'oggetto (che NON
> conosco e openSCAD non espone le sue coordinate, ma so
> essere allineato all'asse X) parallelamente al segmento DX.
Vorrai dire parallelamente al vettore S!

> E per fare ciò ho una sola funzione nativa, rotate() che
> richiede TRE angoli, roll pitch and jaw, che sono quelli che
> avevi detto.
>
> quindi noti DX, DY e DZ, devo ricavare roll pitch and jaw
>
> I dati mi bastano? Direi di sì ... ma non so come
> ragionare. (al contrario so convertire il segmento in
> coordinate sferiche normali, che però non mi servono a una
> cippa).

Bene, ora ti do istruzioni che devi solo seguire passo passo.
1) Vai in wikipedia, "rotation matrix".
2) Vai al capitolo "In three dimensions", par. "General matrix".
3) Come ti è giò stato detto, il roll è inutile, dato che hai solo da
orientare un vettore. Poni quindi gamma=0, il che semplifica molto la
matrice:

[ca*cb, .sa, ca*sb]
[sa*cb, ca, sa*sb]
[ -sb, 0, cb]

dove sa := sin(alfa), ecc.

4) Se applichi questa al vettore colonna [1,0,0] ottieni
[ca*cb,sa*cb,-sb], che dovresti porre uguale a [Dx,Dy,Dz].

5) Questo non è possibile perché il primo vettore ha modulo 1, il
secondo no. Quindi devi prima normalizzare [Dx,Dy,Dz) dividendo per il
modulo. Chiamo [Dx',Dy',Dz'] il vettore normalizzzato.

5) Uguagliando:
ca*cb = Dx'
sa*cb = Dy'
-sb = Dz'.

La terza determina beta.
Dividendo la seconda per la prima:
tg(alfa) = Dy'/Dx' = Dy/Dx
che determina alfa.

6) Ci sono casi eccezionali che puoi trattare a parte oppure usando
atan2 o come si chiama nel linguaggio che usi.

7) Spero
a) di essere stato chiaro
b) di non aver fatto errori.
--
Elio Fabri

El Filibustero

unread,
Nov 7, 2021, 10:30:03 AMNov 7
to
On Sun, 7 Nov 2021 15:13:34 +0100, Soviet_Mario wrote:

>Ora io voglio disporre l'asse interno dell'oggetto (che NON
>conosco e openSCAD non espone le sue coordinate, ma so
>essere allineato

parallelo?

>all'asse X) parallelamente al segmento DX.

>E per fare ciň ho una sola funzione nativa, rotate () che
>richiede TRE angoli, roll pitch and jaw, che sono quelli che
>avevi detto.
>
>quindi noti DX, DY e DZ, devo ricavare roll pitch and jaw

beccheggiare di arcsin(DZ/sqrt(DX^2+DY^2+DZ^2))
imbardare di arcsin(DY/sqrt(DX^2+DY^2))
rollare di importasega

Ciao

El Filibustero

unread,
Nov 7, 2021, 10:42:02 AMNov 7
to
On Sun, 07 Nov 2021 16:27:44 +0100, El Filibustero wrote:

>beccheggiare di arcsin(DZ/sqrt(DX^2+DY^2+DZ^2))
>imbardare di arcsin(DY/sqrt(DX^2+DY^2))

no: prima si imbarda poi si beccheggia. Attenzione poi che se DX<0
l'imbardata e' il supplementare di arcsin(DY/sqrt(DX^2+DY^2)). Ciao

Soviet_Mario

unread,
Nov 7, 2021, 12:12:02 PMNov 7
to
Il 07/11/21 16:40, El Filibustero ha scritto:
grazie mille anche a te ! Questa sembra pure una soluzione
"precotta e predigerita" :D lol.

ah cmq sì, allineato era parallelo, anzi "coincidente",
quando OpenScad costruisce a simmetria cilindrica, solo
parallelo se no.

Elio Fabri

unread,
Nov 7, 2021, 3:36:02 PMNov 7
to
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...
Il che non vuol dire che una sia giusta e l'altra sbagliata.
Speravo di poter evitare di dirtelo, ma purtroppo l'argomento è un
gigantesco casino.

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.

Il problema è che tu gli angoli li devi dare in pasto alla tua
funzione rotate() e non so se hai un manuale che descriva
*esattamente* che cosa fa questa funzione.
La soluzione sarebbe di scoprirlo per tentativi, ma non so se ne sei
capace.

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.

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.

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.
Le matrici dell'articolo prendono positive le rotazioni antiorarie
rispetto agli assi indicati.
Ma non è detto che sia sempre così.

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
--
Elio Fabri

Soviet_Mario

unread,
Nov 7, 2021, 10:48:03 PMNov 7
to
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)
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 :\

El Filibustero

unread,
Nov 8, 2021, 5:54:03 AMNov 8
to
On Mon, 8 Nov 2021 04:42:08 +0100, Soviet_Mario wrote:

>... lo ammetto, mi sto mettendo a "disegnare" ... castelli
>medioevali virtuali :\

Se questo e' lo scopo, non esistono gia' potentissimi tool grafici che
evitano di annoyare l'utente con calcoli di bassissimo livello? Ciao

Elio Fabri

unread,
Nov 8, 2021, 6:00:03 AMNov 8
to
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?

> 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? 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?
In ogni caso si procede così.
Poniamo per brevità u := [1,0,0], v := [Dx',Dy',Dz'] (vettori
unitari).
Calcola w := (u+v)/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.
--
Elio Fabri

Soviet_Mario

unread,
Nov 8, 2021, 9:24:02 AMNov 8
to
Il 08/11/21 11:50, El Filibustero ha scritto:
non saprei, con Blender non ho mai potuto superare
l'ostacolo dell'interfaccia. Un'interfaccia di comando a
codice C-like mi è stata più intuitiva.

La mia scelta cmq è ricaduta su un tool molto
"parametrizzabile" diciamo, che dopo avere sviluppato dei
moduli, possa produrre una gran varietà di modelli di
aspetto diversi.

Soviet_Mario

unread,
Nov 8, 2021, 9:42:03 AMNov 8
to
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.

El Filibustero

unread,
Nov 8, 2021, 1:48:03 PMNov 8
to
On Mon, 8 Nov 2021 15:22:45 +0100, Soviet_Mario wrote:

>non saprei, con Blender non ho mai potuto superare
>l'ostacolo dell'interfaccia. Un'interfaccia di comando a
>codice C-like mi è stata più intuitiva.

a me cio' fa sovvenire

https://groups.google.com/g/it.scienza.matematica/c/iQ-jlOVyq80/m/R7XGZwopAgAJ

e successivi thread analoghi. Ciao

Soviet_Mario

unread,
Nov 8, 2021, 2:18:03 PMNov 8
to
Il 08/11/21 19:43, El Filibustero ha scritto:
cavoli !!!! Sto guardando un po' la documentazione di
PROCESSING (open source o free). Sembra veramente poderoso !!!

Grazie della segnalazione. Altra roba da spulciare pazientemente

Soviet_Mario

unread,
Nov 8, 2021, 7:00:02 PMNov 8
to
Il 08/11/21 20:17, Soviet_Mario ha scritto:
> Il 08/11/21 19:43, El Filibustero ha scritto:
>> On Mon, 8 Nov 2021 15:22:45 +0100, Soviet_Mario wrote:
>>
>>> non saprei, con Blender non ho mai potuto superare
>>> l'ostacolo dell'interfaccia. Un'interfaccia di comando a
>>> codice C-like mi è stata più intuitiva.
>>
>> a me cio' fa sovvenire
>>
>> https://groups.google.com/g/it.scienza.matematica/c/iQ-jlOVyq80/m/R7XGZwopAgAJ
>>
>>
>> e successivi thread analoghi. Ciao
>>
>
>
> cavoli !!!! Sto guardando un po' la documentazione di
> PROCESSING (open source o free). Sembra veramente poderoso !!!

uhm, al momento però, non riesco né a installarlo né a farlo
girare :\

Dopo avere scaricato e decompresso il ponderoso archivio,
uno script chiamato install.sh non produce nessun risultato
né errori. E altrove non trovo nulla da eseguire.
Boh.

That's java !

Soviet_Mario

unread,
Nov 8, 2021, 7:06:03 PMNov 8
to
Il 08/11/21 20:17, Soviet_Mario ha scritto:
> Il 08/11/21 19:43, El Filibustero ha scritto:
>> On Mon, 8 Nov 2021 15:22:45 +0100, Soviet_Mario wrote:
>>
>>> non saprei, con Blender non ho mai potuto superare
>>> l'ostacolo dell'interfaccia. Un'interfaccia di comando a
>>> codice C-like mi è stata più intuitiva.
>>
>> a me cio' fa sovvenire
>>
>> https://groups.google.com/g/it.scienza.matematica/c/iQ-jlOVyq80/m/R7XGZwopAgAJ
>>
>>
>> e successivi thread analoghi. Ciao
>>
>
>
> cavoli !!!! Sto guardando un po' la documentazione di
> PROCESSING (open source o free). Sembra veramente poderoso !!!
>
> Grazie della segnalazione. Altra roba da spulciare
> pazientemente
>
>

provo con la "penultima" versione che c'è nel repo come
FLATPAK ...

El Filibustero

unread,
Nov 9, 2021, 4:30:03 AMNov 9
to
On Tue, 9 Nov 2021 01:05:55 +0100, Soviet_Mario wrote:

>provo con la "penultima" versione che c'è nel repo come
>FLATPAK ...

Comunque il concetto e' un altro. Al di la' dello specifico tool
impiegato, al di la' dell' interfaccia (sia essa cliccare e draggare
col mouse o mettere una riga di testo), e' *impossibile* che in un
tool grafico non vi sia il comando

"ruota questo oggetto attorno a questo suo punto in modo da mettere
questo suo asse parallelo a questo segmento"

senza bisogno di annoyare l'utente con i conti della serva. Ciao
Reply all
Reply to author
Forward
0 new messages