Ellipsin tangenttivektori ratalaskimen tarpeisiin

Seuraa 
Viestejä1467
Liittynyt15.11.2006

Ratalaskuria olen aina silloin tällöin koodaillut, kielenä Python ja lähestymistapana ympyrät ja ellipsit. Kaikenlaista kivaa on matkan varrella päättynyt koodattuun muotoon, mutta jo hetken aikaa olen tuskaillut ellipsin tangentin kanssa.

Jos ratalaskurilla haluaa laskea ajotarpeita (delta-v) muillekin elliptisille siirtoradoille kuin Hohmannin puoliellipsille, niin pitäisi laskea ellipsin tangetti. Useimmat netistä löytämäni kaavat nojaavat analyyttiseen geometriaan (ellipsin ja tangenttisuoran esityksessä) eikä mun omat matemaattiset taidot riitä vääntämään niitä vektoreiksi.

Kysymys kuuluukin, että kuinka saadaan helposti laskettua ellipsin tangentin suuntavektori?

Tällä hetkellä ellipsit on esitetty periapsis-apoapsis -pareina (eli radan lähin ja kauimmainen etäisyys). Tästä voidaan tietysti ratkoa kaikenlaisia parametreja, esim. puoliakselit, keskipisteen sijainti ja niin edelleen. Valmiina on myös funktio, jolla saa laskettua paikan (x,y) ajan funktiona.

Tähän astisista löydöksistä paras on tämä (Java-koodia sivun jälkipuoliskolla):

http://content.gpwiki.org/index.php/Tan ... d_Ellipses

En vain ole vielä keksinyt, että mikä vektori esitetyllä funkkarille pitäisi syöttää: pitääkö sen olla paikkavektori ellipsin polttopisteestä kaarelle, keskipisteestä kaarelle vai mikä?

Sivut

Kommentit (57)

Vierailija

Ellipsin tangentti sivuaa ellipsiä
ellipsin kehän suuntaisesti eikä
tangentti ole kohtisuorassa
keskipisteen kanssa muutoin
kuin erikoistapauksessa "ympyrä"
ja siitä seuraa että polttopisteiden
kohtisuorat sivuajat muodostavat
ympyrät, jotka leikkaavat
ellipsiviivan.

MaKo71
Seuraa 
Viestejä1467
Liittynyt15.11.2006
jkiukko
Ellipsin tangentti sivuaa ellipsiä
ellipsin kehän suuntaisesti eikä
tangentti ole kohtisuorassa
keskipisteen kanssa...



Tottahan toki, mutta...

jkiukko
...muutoin kuin erikoistapauksessa "ympyrä"...



Juu, ja 0,90,180 ja 270 kulmilla, mutta...

jkiukko
...ja siitä seuraa että polttopisteiden
kohtisuorat sivuajat muodostavat
ympyrät, jotka leikkaavat
ellipsiviivan.



...kuinka sillä tiedolla lasketaan tangenttivektori?

Neutroni
Seuraa 
Viestejä26835
Liittynyt16.3.2005
MaKo71

Tällä hetkellä ellipsit on esitetty periapsis-apoapsis -pareina (eli radan lähin ja kauimmainen etäisyys). Tästä voidaan tietysti ratkoa kaikenlaisia parametreja, esim. puoliakselit, keskipisteen sijainti ja niin edelleen. Valmiina on myös funktio, jolla saa laskettua paikan (x,y) ajan funktiona.



Parametrisoi ellipsi. Tai jos tuo paikan antava funktio on tarkka, laske numeerinen derivaatta. Eli paikka ajanhetkellä t+vähän - paikka ajanhetkellä t. Jos haluat nopeuden, jaat "vähällä", mutta tuo erotus on itsessäänkin radan tangentin suuntainen.

Ellipsiratojan dynamiikkaa on käsitelty perusteellisemmin Tähtietieteen perusteet -kirjassa.

MaKo71
Seuraa 
Viestejä1467
Liittynyt15.11.2006
Neutroni

Parametrisoi ellipsi.



Mitä se on? Myönnän suorilta, että mun matemaattisessa pohjassa on joitain ammottavia aukkoja...

Neutroni

Tai jos tuo paikan antava funktio on tarkka, laske numeerinen derivaatta. Eli paikka ajanhetkellä t+vähän - paikka ajanhetkellä t. Jos haluat nopeuden, jaat "vähällä", mutta tuo erotus on itsessäänkin radan tangentin suuntainen.



Hyvä kun muistutit! Tätä olen tosiaankin silloin tällöin harkinnut - se voisi kyllä olla tähän hätään paras ratkaisu. Paikan antava algoritmi on kopsattu Tähtitieteen perusteet -kirjasta, ja muistelen, että iteroin sen loppuun saakka (eli flotarista loppuu tarkkuun), kun ei ole mitään syytä katkaista sitä kesken kaiken (tarpeeksi nopea sellaisenaan).

Neutroni

Ellipsiratojan dynamiikkaa on käsitelty perusteellisemmin Tähtietieteen perusteet -kirjassa.



Joo, kyseinen kirja ja sen ratamekaniikkaosuus on kulunut käsissä.

MaKo71
Seuraa 
Viestejä1467
Liittynyt15.11.2006
MaKo71

Neutroni

Tai jos tuo paikan antava funktio on tarkka, laske numeerinen derivaatta. Eli paikka ajanhetkellä t+vähän - paikka ajanhetkellä t. Jos haluat nopeuden, jaat "vähällä", mutta tuo erotus on itsessäänkin radan tangentin suuntainen.



Hyvä kun muistutit! Tätä olen tosiaankin silloin tällöin harkinnut - se voisi kyllä olla tähän hätään paras ratkaisu.



Toteutin nyt tämän nopeusvektorin laskemisen tällä menetelmällä ja näyttää ihan hyvältä. Lasken paikat ajanhetkellä T, T+1 sec, T-1 sec, ja noista kolmesta paikkavektorista lasken nopeusvektorin, joka on miellyttävästi suoraan m/s. Kiitos Neutronille tuosta muistutuksesta, sitä huomaa nykyään unohtaneensa enemmän asioita kuin mitä muistaa.

Vierailija

Voi toki derivoida oikeastikin, sillä puoliakselien pituudet tiedettiin.

Ellipsi parametrimuodossa:
x = a cos t
y = b sin t

Differentiaalit:
dx = -a sin t dt
dy = b cos t dt

k = dy / dx = -b/a cot t

Tai jos ellipsi on ilmoitettu origokeskeisesti:
x^2 / a^2 + y^2 / b^2 = 1 (implisiittinen derivointi)
(bx)^2 + (ay)^2 = (ab)^2
2b^2 x + 2(ay)*a dy/dx = 0

k = dy / dx = -b^2 x / (a^2 y) = -(b/a)^2 * x/y

Tangenttivektori voidaan sitten esittää muodossa i + kj. Riippuu tietenkin tapauksesta, sopiiko tämä menetelmä mukaan.

Neutroni
Seuraa 
Viestejä26835
Liittynyt16.3.2005
sakvaka

Ellipsi parametrimuodossa:
x = a cos t
y = b sin t




Jep. Mutta jos tätä käyttää taivaanmekaanisissa laskuissa, joissa kappale kiertää toista painovoiman välityksellä, on syytä huomata kaksi oleellista asiaa.

1. Noiden yhtälöisen antaman ellipsin keskipiste on origo. Siinä koordinaatistossa se kierrettävä kappale on sivussa origosta.

2. Tuo t-parametri ei ole suoraan verrannollinen aikaan. Ratanopeus vaihtelee gravitaatiokentässä aivan eri tavalla.

MaKo71
Seuraa 
Viestejä1467
Liittynyt15.11.2006
Neutroni

Jep. Mutta jos tätä käyttää taivaanmekaanisissa laskuissa, joissa kappale kiertää toista painovoiman välityksellä, on syytä huomata kaksi oleellista asiaa.



Juu, noiden molempien asioiden kanssa on tullut tuuskattua, ja usein seottua ajatuksien ja laskelmien kanssa. Erityisesti ratanopeuden vaihtelu tekee kaikista aikaan pohjautuvista laskelmista monimutkaisia, ja siksi niiden kanssa on todella helppo kadottaa ajatus.

MaKo71
Seuraa 
Viestejä1467
Liittynyt15.11.2006

Ratalaskuri edistyi hieman nytkähtäen tässä äskettäin, mutta ikävä kyllä keskustelu aiheesta levisi kahteen ketjuun. Pistetään tähän kokoelma asioista:

Ratalaskurin koodausta Apollo-lentojen laskemiseksi Moonhoax -ketjussa:

1. JPI laskee Apollon LM:n suorituskykyä
2. Innostun aiheesta, koodaan ratalaskuria sen verran, että voin tarkastaa laskut
3. Nälkä kasvaa syödessä, koodataan tukea monivaiheraketille ja kokeillaan Saturn V:tä...
4. ...Ei kun älskätäänpä koko Apollo-missio sisään ja katsotaan tuloksia.

Ratalaskurista yleisesti:

5. Kielenä siis Python
6. ...ja uusi versio pistettynä ladattavaksi.


Niin, mistään salaisesta projektista ei ole kyse. Laiskuus aina välillä vaivaa, ja projekti etenee nykäyksittäin silloin tällöin, kuten vaikkapa nyt, kun noiden sinun laskujesi innoittamana ajattelin virittää vähän softan ajoainelaskentaa. Pistin nyt pakettiin ja päivitin paketin kotisivuille eli ihka uusi versio löytyy täältä:

http://mkoskim.drivehq.com/Orbits/orbtools.tgz

Uusi versio sisältää mm. parannellun ajoainelaskennan, Apollo-laskut ja Kerbal -aurinkokunnan. Tällä hetkellä tilanne on se, että ajotarpeen laskenta (eli itse ratalaskenta) ja sitten ajoainemäärien laskenta on kaksi erillistä palikkaa. Lähtökohtainen ajatus on kuitenkin ollut se, että voisi luoda skenaarion "ex tempore", niin, että rakentaa raketin ja antaa sille päämäärät. Se on osoittautunut vain kovin mutkikkaaksi toteuttaa, kun nämä avaruusmissiot eivät aina ole suoraviivaista "SSTO:lla" pitkin aurinkokuntaa päristelyä

Vanhentunut käyttöohje löytyy, moni asia pitää vielä paikkansa (esim. installointi), moni ei:

http://mkoskim.drivehq.com/Orbits/sfwsb.radat.pdf

Kysymyksiä ja käyttöohjeita saa ehdottomasti kysyä, ja kovasti onnellinenhan olisin, jos joku innostuisi tuota puuhaamaan valmiimmaksi saakka




Keskustelu Moonhoaxin ympärillä jatkuu kiivaana, mutta se ei estä keskustelemasta ratalaskimesta siinä sivussa:

7. Phony antaa linkin astronimiseen aritmetiikkaan
8. ...ja kmu korjattuun painokseen
9. Phony tekee huomioita tietojen tallennustavasta...
10. ...Ja kerron syitä hivenen ehkä oudolle järjestelylle.

- - -

Samaan aikaan aivan toisaalla, Kerbal Space Program -ketjussa:

post1930415.html#p1930415

Kysyn Kerbal-järjestelmän (Kerbal Space Program) planeettojen parametreista, saan ne ja jonkun ajan kuluttua olen ne lisännyt ratalaskimeen. Ratalaskin on nimenomaan tarkoitettu laskeskelemaan skenaarioita myös vieraissa aurinkokunnissa, muuten se olisi vähän puolitiessä scifi-kirjoittajan tarpeita ajatellen.

Nyt sitten Neutronille kysymys:

Neutroni
KSP:ssä onk yksinkertainen ja kankea ratalaskin. Aloin jo koodaamaan parempaa, ennen kaikkea siksi, että se KSP:n laskin ei osaa huomoida äärellisen kestoisia polttoja, mutta se on jäänyt kesken kun olen oppinut arvioimaan perstuntumalla ne riittävän hyvin.



Mikä kieli? Lähditkö rataelementeistä vai gravitaatiosimulaatiosta? Käyttöliittymä? Voisinko vilaista sitä? Ei haittaa, vaikkei toimisi tai olisi rankasti keskeneräinen.

Neutroni
Seuraa 
Viestejä26835
Liittynyt16.3.2005
MaKo71
Mikä kieli? Lähditkö rataelementeistä vai gravitaatiosimulaatiosta? Käyttöliittymä? Voisinko vilaista sitä? Ei haittaa, vaikkei toimisi tai olisi rankasti keskeneräinen.




Kielenä on C, kääntäjänä ilmainen Visual Studio ja käyttiksenä Windows. Käyttöliittymä on epätoivoinen yritys käyttää Windowsin kontrolleja. Niiden opettelu oli yksi syy koko projektiin. Ajattelin käyttää rataelementtejä muuten, koska pelikin tekee niin, mutta laskea poltot liikeyhtälöstä yhden kappaleen kentässä. Ne sorsat ovat liian isoja tänne, miten haluat ne? Onko jotain Imageshackin tapaista palvelua yleisille tiedostoille, joka ei edellytä minkään ohjelmien asennuksia tai mielellään rekisteröintejäkään?

Neutroni
Seuraa 
Viestejä26835
Liittynyt16.3.2005

//Laskee planeetan paikan ja nopeuden tietyllä hetkellä
void PlaneetanPaikka(str_planeetta *pla, double t, double *r,double *v)
{
double m,e,a,dm,u[3];
double ce,se,de,b;

if(pla->mna==0) { //Aurinko on aina origossa
ZeroVector3(r);
if(v) ZeroVector3(v);
return;
}

dm=CONST_2PI/pla->per; //dM/dt
m=pla->mna+dm*t; //keskianomalia

e=m; //iteroidaan ratkaisu keplerin yhtälöön
do {
a=e;
e=m+pla->ecc*sin(e);
} while(fabs(e-a)>1E-10);

ce=cos(e); se=sin(e); //lasketaan valmiiksi tarvittavia arvoja
de=dm/(1.0-pla->ecc*ce); //dE/dt
b=sqrt(1.0-pla->ecc*pla->ecc)*pla->sma; //pikkuakselin puolikas

SetVector3(u,pla->sma*(ce-pla->ecc),b*sin(e),0.0); //planeetan sijainti radallaan
MatrixVectorProduct3(pla->rmat,u,r); //kierretään rata oikeaan asentoon
if (v) { //lasketaan nopeus
SetVector3(u,-pla->sma*se*de,b*ce*de,0.0); //nopeus
MatrixVectorProduct3(pla->rmat,u,v); //kierretään oikeaan asentoon
}
}
[/code:wdkjjplb]

Tämä laskee planetan sijainnin ja nopeuden.
per kiertoaika
mna keskianomalia, kun t=0
ecc eksentrisyys
sma isoakselin puolikas
rmat matriisi, joka kiertää radan koordinaatistosta, jossa se on xy-tasossa periheli positiivisen x-akselin suuntaan aurinkokunnan ekliptikaaliseen koordinaatistoon. Se lasketaan seuraavasti:

//lasketaan matriisi, joka kiertää radan oikeaan asentoon
//lähtökohta on xy-tasossa periapsis positiivisen x-akselin suuntaan
SetVector3(v,0.0,0.0,1.0);
RotationMatrix3(v,pla->lan,m1); //kierretään periapsis nousevaan solmuun

clan=cos(pla->lan); slan=sin(pla->lan); //nousevan solmun suunta

SetVector3(v,clan,slan,0.0);
RotationMatrix3(v,pla->inc,m2); //rotatoidaan inklinaation verran solmuviivan ympäri
MatrixProduct3(m2,m1,m3);

cinc=cos(pla->inc); sinc=sin(pla->inc); //inklinaation z-komponentti ja ratatason suuntainen
SetVector3(pla->nor,sinc*slan,-sinc*clan,cinc); //Rataa vastaan kohtisuora vektori

RotationMatrix3(pla->nor,pla->lpe,m1); //kierretään vielä ratatasossa periapsiksen argumentin verran
MatrixProduct3(m1,m3,pla->rmat);

pla->soi=pla->sma*pow(pla->gm/sun->gm,0.4); //vaikutussäde
[/code:wdkjjplb]

lan nousevan solmun pituus
inc inklinaatio
lpe perihelin argumentti (kulmaetäisyys nousevasta solmusta)
soi planeetan vaikutussäde (ei liity matriisiin)

MaKo71
Seuraa 
Viestejä1467
Liittynyt15.11.2006
Neutroni
Sähköposti kitisee, että:


Bad Gateway

The proxy server received an invalid response from an upstream server.




Katotaan sitten huomenissa parempaa ratkaisua?

Neutroni
Seuraa 
Viestejä26835
Liittynyt16.3.2005

Täältä pitäisi löytyä.

Se on aikalailla kesken, mutta näyttää planeettojen asennon. Ratalaskennan saa alkuun tuplaklikkaamalla planeetan rataa kohdassa, josta on tarkoitus lähteä. Se avaa heikosti toimivan dialogin (jos joku tietää mikä siinä on pielessä, olen kiinnostunut kuulemaan), mutta ne arvot voi syöttää siihen. Sitten I,J,K,L,Y ja H -napeilla voi säätää polton suurutta. Se laskee vain ellipsin Auringon ympäri eikä huomioi muita planeettoja. LIikkua voi ASDWRF -napeilla ja päätä kääneellä nuolinapeilla. Ei kai siinä muistaakseni paljon muuta ollut, mutta jos on, sorsaa tutkimalla se selviää.

Sen pitäisi kääntyä uusimmalla ilmaisella Visual Studiolla.

Sivut

Uusimmat

Suosituimmat