Sezioni

Pantafa@gmail.com
Dovrei risolvere il problema dell'intersezione tra un solido e un piano, nello specifico tra l'ellissoide e il piano che passa per l'origine degli assi e due punti sulla superficie di cui si conoscono le coordinate e non allineati tra loro.
Si può impostare il sistema tra l'equazione dell'ellissoide e quella del piano, che però hanno entrambe tre incognite e servirebbe dunque una terza equazione per procedere alle sostituzioni. In che modo si può dunque risolvere il problema? E la superficie risultate è un ellisse regolare?

Risposte
@melia
Ciao, Pantafa, benvenuto nel forum.
Il tuo messaggio è un po' confuso. Due punti sono sempre allineati, forse i due punti non sono allineati con l'origine.
Non capisco che cosa stai cercando: l'intersezione tra un piano e un ellissoide (suppongo di rotazione, o no?) è una curva algebrica, al massimo puoi eliminare una delle 3 incognite, ma due restano di sicuro.
Puoi mettere un po' di dati?

Pantafa@gmail.com
Ciao, per ellissoide intendo il solido generato dalla rotazione di un ellisse nello spazio e quindi identificato dalla relativa equazione con tre incognite. I due punti del piano si trovano inoltre a latitudini e longitudini diverse (mentre il terzo coincide con l'origine degli assi), anch'esso generato dunque da un'equazione a tre incognite. Impostando il sistema tra le due equazioni come si può procedere per risolverlo?
Se il piano fosse orizzontale l'intersezione darebbe una circonferenza a qualsiasi latitudine, se fosse invece verticale darebbe ovviamente l'ellisse di partenza. Nel caso specifico taglia invece l'ellissoide "obliquamente" e c'è dunque da capire se tale intersezione restituisce un ellisse regolare.

Quinzio
La sezione di un ellissoide e' sempre un ellisse.
Nota: non ci sono ellissi regolari e non. Ci sono ellissi... e basta.

Per convincersi di questa cosa si inizia con l'osservare l'equazione dell'ellissoide
$a^2x^2 + b^2y^2 + c^2z^2 = R^2$
e si nota che gli assi $x$, $y$ e $z$ sono "stirati" di un certo fattore.
In pratica l'ellissoide e' una sfera $x^2 +y^2+z^2 = R^2$ stirata sui tre assi.

E poi si osserva che un piano generico
$dx+ey+fz+g = 0$
rimane un piano dopo l'operazione di stiramento degli assi.
Infatti
$dax+eby+fcz+g = 0$
e' ancora un piano.

Allora partiamo da una sfera e la intersechiamo con un piano qualsiasi, ottenendo un cerchio nello spazio.
Prendiamo il piano in cui il cerchio e' contenuto e consideriamo un sistema di assi $x', y'$ su di esso con origine nel centro del cerchio.
Gli assi cartesiani $x, y, z$ a questo punto non necessariamente coincidono con $x', y'$, e quindi consideriamo le proiezioni di $x, y, z$ sul piano $x', y'$.
Le proiezioni sono 3 vettori generici.
Se stiriamo gli assi $x, y, z$, induciamo uno stiramento anche sulle loro proiezioni e quindi sugli assi $x', y'$.

Ora, se prendiamo l'equazione di una generica ellisse centrata nell'origine $ax^2 + bxy +cz^2$ e applichiamo uno stiramento secondo un certo vettore (che sara' quello della proiezione), otteniamo ancora un ellisse.
Ovvero se in $ax^2 + bxy +cz^2$ applichiamo $x = u\barx + v\bary$ e $y = r\barx + s\bary$, e' facile vedere che ottieniamo ancora un ellisse.
Lo stiramento dei 3 assi quindi deforma il cerchio in una ellisse e poi ancora in una ellisse.

Una conferma a quanto detto la si trova anche qui:
http://mathworld.wolfram.com/EllipsoidalSection.html

@melia
Una piccolissima aggiunta: una circonferenza è un caso particolare di ellisse, con i due fuochi che coincidono con il centro della curva algebrica.

Pantafa@gmail.com
Grazie, si tratta ora di ricavare le misure degli assi dell'ellisse risultante dall'intersezione conoscendo i valori dei tre assi dell'ellissoide e le coordinate dei tre punti che identificano il piano (tenendo conto del fatto che uno coincide con l'origine degli assi), per esempio 44° di latitudine nord e 14° di longitudine est e 45° di latitudine nord e 15° di longitudine est.
In pratica si tratta di due equazioni, entrambe con tre incognite, da mettere a sistema. Ma in che modo si può procedere per sostituzione? Sembrerebbe serva una terza equazione, con altrettante incognite, indipendente dalle prime due.

@melia
Solo a te sembra serva una terza equazione. Un sistema di secondo grado in 3 incognite se avesse 3 equazioni indipendenti avrebbe anche un numero finito di soluzioni, mentre sappiamo che la soluzione deve essere indeterminata, in quanto curva algebrica avrà infinite soluzioni.

Quinzio
Allora,
sotto ho metto il codice Octave che fa quello che volevi trovare.
Vai su
https://octave-online.net/
ti registri, butti dentro il codice e inizi a giocarci e a fare delle prove.
Ho cercato di scrivere il tutto in modo piu' "elegante" e chiaro possibile.
C'e' anche un minimo di commenti.
Se metti phi1 e phi2 = 0, il calcolo da errore perche' c'e' una divisione per 0.
Invece di 0, metti 0,01 ad esempio.
Ci sono poi comunque degli errori di arrotondamento, questo script va preso con le
molle.
Per capire cosa viene fatto e' necessario avere delle basi di geometria e algebra lineare.
E' roba da corso universitario, non so a che livello sei tu e cosa devi fare alla fine.


clear all
close all

# I dati di ingresso sono

#Gli angoli dei punti 1 e 2
theta1 = 14
phi1 = 45
theta2 = 15
phi2 = 44

# Gli assi dell'ellissoide di equazione
# (x/a)^2 + (y/b)^2 + (z/c)^2 = 1
a = 2
b = 3
c = 4

# Si costruisce la matrice dell'ellissoide
Elld = [a^2 0   0
        0   b^2 0 
        0   0   c^2 ]

# Si trovano le coordinate cartesiane dei punti 1 e 2
p1 = [ cos(phi1 /360 * 2 * pi) * cos(theta1 /360 * 2 * pi)
       cos(phi1 /360 * 2 * pi) * sin(theta1 /360 * 2 * pi)
       sin(phi1 /360 * 2 * pi) ]

p2 = [ cos(phi2 /360 * 2 * pi) * cos(theta2 /360 * 2 * pi)
       cos(phi2 /360 * 2 * pi) * sin(theta2 /360 * 2 * pi)
       sin(phi2 /360 * 2 * pi) ]


# Si inizia a costruire una base ortonormale

# Si trova il vettore normale al piano "pi" che passa per 
# i punti 1 e 2 e l'origine.
n3 = cross(p1, p2)
# da normalizzare
n3 = n3/norm(n3)

# Si trova un vettore ortogonale a n3 
# che arbitrariamente giace sul piano xy
n2 = [ n3(2)
       -n3(1)    
       0 ]
# da normalizzare
n2 = n2/norm(n2)

# Si trova il terzo vettore di una base 
# ortonormale
n1 = cross(n3, n2)

# La base ortonormale
Base = [n1 n2 n3]

# L'ellissoide viene ruotato nella nuova base
E = inv(Base) * Elld * Base

# Si trova l'intersezione sul piano "pi"
# azzerando la coordinata z
P = E(1:2, 1:2)

# Si trovano gli autovalori dell'ellisse
eigE = eig(P)

# Si estraggono gli assi dell'ellisse
asse1 = sqrt(abs(eigE(1)))
asse2 = sqrt(abs(eigE(2)))


# Si controlla che gli assi dell'ellisse non siano piu' grandi 
# o piu' piccoli di quelli dell'ellissoide
# Se da errore il procedimento e' sbagliato !!!
assert(asse1 > min([a b c]))
assert(asse2 > min([a b c]))
assert(asse1 < max([a b c]))
assert(asse2 < max([a b c]))

Pantafa@gmail.com
Grazie, lo script funziona e calcola il valore degli assi. Servirebbe però una maggiore precisione: è possibile ridurre gli errori di arrotondamento?
Ottenuto l'ellisse, in che modo si può determinare la posizione di phi1 e phi2? Per esempio l'ampiezza dell'angolo α rispetto all'asse maggiore.

Il caso particolare di phi1 e phi2 con latitudine = 0 dovrebbe corrispondere ad un piano orizzontale che "taglia" l'ellissoide a metà, in quel caso la sezione sarebbe un cerchio.

Quinzio
"Pantafa@gmail.com":
Grazie, lo script funziona e calcola il valore degli assi. Servirebbe però una maggiore precisione: è possibile ridurre gli errori di arrotondamento?
Ottenuto l'ellisse, in che modo si può determinare la posizione di phi1 e phi2? Per esempio l'ampiezza dell'angolo α rispetto all'asse maggiore.

Il caso particolare di phi1 e phi2 con latitudine = 0 dovrebbe corrispondere ad un piano orizzontale che "taglia" l'ellissoide a metà, in quel caso la sezione sarebbe un cerchio.


E' possibile calcolare l'ampiezza dell'angolo.

Ma che misura hanno gli assi che stai usando ?
Sono quelli della Terra ?

Usando le misura della Terra (una sfera schiacciata ai poli):
a = 6378136
b = 6378136
c = 6356751

Con i punti che hai messo come esempio, risultano gli assi:
asse1 = 6360423.65565
asse2 = 6378136

che sembrano corretti.
Un asse (2) e' uguale al raggio dell'equatore.
L'asse 1 e' una misura intermedia tra i due raggi (polare ed equatoriale).

Pantafa@gmail.com
L'ellissoide in questione è la Terra e gli assi a e b sono il raggio all'equatore (Km 6.378,137), l'asse c il raggio al polo (Km 6.356,752). I due punti sono un esempio che serve a far capire che si trovano a latitudine e longitudine diverse perché appunto se fossero sullo stesso parallelo la sezione sarebbe un cerchio, se fossero sullo stesso meridiano la sezione sarebbe un ellisse.
Ma i Km vanno inseriti con il punto o con la virgola?

E nel risultato, l'asse1 è quello a oppure b?

Quinzio
"Pantafa@gmail.com":

Ma i Km vanno inseriti con il punto o con la virgola?

I km si esprimono con un numero e nello script tutti i numeri hanno il punto che separa la parte intera da quella frazionaria e non hanno separatore delle migliaia.


E nel risultato, l'asse1 è quello a oppure b?


Allora, siccome l'ellissoide e' in realta' un sferoide oblato (gli assi equatoriali sono uguali) e siccome il piano passa per il centro. hai sempre che l'asse "orizzontale" e' quello equatoriale e l'altro asso varia come misura tra l'asse equatoriale e l'asse polare.
Quale sia l'asse a o b, e' una questione di terminologia.

Pantafa@gmail.com
Ho fatto una prova con phi1 a 43.5 e 13.5 e phi2 a 44.5 e 15.5 che restituisce il valore di 6363.7 per l'asse1 e 6378 per l'asse2, ma viene rilevato il seguente errore:

error: assert (asse2 < max ([a, b, c])) failed
error: called from
assert at line 92 column 11
sezione at line 77 column 1

Dipende forse dal fatto che l'intervallo ammesso esclude i valori dei due estremi? Ossia gli assi a=b e c.

Quinzio
"Pantafa@gmail.com":


Dipende forse dal fatto che l'intervallo ammesso esclude i valori dei due estremi? Ossia gli assi a=b e c.


Si esatto. Devi mettere >= e <= al posto di < e > nei 4 controlli.

Pantafa@gmail.com
Ho provato diverse combinazioni di valori per le coordinate di phi1 e phi2 ed effettivamente l'asse maggiore risulta sempre arrotondato a 6378 (vengono cioè eliminate le tre cifre decimali dopo il punto) mentre l'altro rientra tra i due valori previsti.

In tale ellisse, risultato della sezione, come si può calcolare il nuovo valore dell'angolo alfa di phi1 e phi2 rispetto all'asse maggiore?

Pantafa@gmail.com
Gli angoli alfa (cioè la latitudine) tra la posizione dei punti phi1 e phi2 e l'asse maggiore nell'ellisse risultante dall'intersezione, potrebbero essere la loro longitudine nell'ellissoide di partenza?
In altre parole, il piano "taglia" l'ellissoide all'equatore nel meridiano zero?

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.