Sezioni

Messaggioda [email protected] » 28/02/2020, 18:48

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?
[email protected]
Starting Member
Starting Member
 
Messaggio: 2 di 18
Iscritto il: 23/06/2017, 15:51

Re: Sezioni

Messaggioda @melia » 28/02/2020, 20:25

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?
Sara Gobbato

732 chilometri senza neppure un autogrill
Avatar utente
@melia
Moderatore globale
Moderatore globale
 
Messaggio: 12014 di 21979
Iscritto il: 16/06/2008, 18:02
Località: Padova

Re: Sezioni

Messaggioda [email protected] » 28/02/2020, 21:45

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.
[email protected]
Starting Member
Starting Member
 
Messaggio: 3 di 18
Iscritto il: 23/06/2017, 15:51

Re: Sezioni

Messaggioda Quinzio » 28/02/2020, 23:37

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
Quinzio
Cannot live without
Cannot live without
 
Messaggio: 4447 di 10527
Iscritto il: 24/08/2010, 06:50

Re: Sezioni

Messaggioda @melia » 29/02/2020, 10:30

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

732 chilometri senza neppure un autogrill
Avatar utente
@melia
Moderatore globale
Moderatore globale
 
Messaggio: 12015 di 21979
Iscritto il: 16/06/2008, 18:02
Località: Padova

Re: Sezioni

Messaggioda [email protected] » 29/02/2020, 23:43

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.
[email protected]
Starting Member
Starting Member
 
Messaggio: 4 di 18
Iscritto il: 23/06/2017, 15:51

Re: Sezioni

Messaggioda @melia » 01/03/2020, 11:28

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.
Sara Gobbato

732 chilometri senza neppure un autogrill
Avatar utente
@melia
Moderatore globale
Moderatore globale
 
Messaggio: 12016 di 21979
Iscritto il: 16/06/2008, 18:02
Località: Padova

Re: Sezioni

Messaggioda Quinzio » 01/03/2020, 14:13

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.

Codice:

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]))
Quinzio
Cannot live without
Cannot live without
 
Messaggio: 4452 di 10527
Iscritto il: 24/08/2010, 06:50

Re: Sezioni

Messaggioda [email protected] » 01/03/2020, 23:36

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.
[email protected]
Starting Member
Starting Member
 
Messaggio: 5 di 18
Iscritto il: 23/06/2017, 15:51

Re: Sezioni

Messaggioda Quinzio » 02/03/2020, 20:17

[email protected] ha scritto: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).
Quinzio
Cannot live without
Cannot live without
 
Messaggio: 4456 di 10527
Iscritto il: 24/08/2010, 06:50

Prossimo

Torna a Secondaria II grado

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite