Mam za zadanie napisac taki uklad sloneczy, zeby sie poruszal itp ;p Ale mam problem juz na samym poczatku : mamy wziac do tego dane z Wikipedii, ok, spoko, tylko, ze one sa strasznie duze [czy je skalowac, jesli tak, to jak?] a poza tym, jak mam obl poczatkowe polozenie planet, jesli slonce dam w pkcie [0,0,0] - dzialam w ukladzie 3D.
Co to znaczy duże? Duże to mogą być lody w wafelku. Czy twój program ma coś rysować, czy wypisywać tekstem? Też nie wspomniałeś. Początkowego położenia planet nie musisz wyliczać, musisz je podać w programie. Najlepiej zapytaj nauczyciela co wymyślił to zadanie. Jak te obiekty mają być umiejscowione.
Program ma wszystko rysować. Dane kazał wziąć z Wikipedii ... No ale jeśli mam daną odl od słońca, to zakładając, że działam w 3D (lub 2D jeśli z = 0), to jakoś muszę wyliczyć położenie x,y planety ...
Znalazłem taki kod i tak się zastanawiam, skąd oni tam wzięli te wartości? : http://www.phy.uct.ac.za/courses/python/examples/solardat.py
Załóżmy, ze moje słońce jest w pkcie [0,0,0], ziemia jest w odl [to z wiki] 149 597 890 km to jak mam policzyć położenie ziemi, czyli x,y dla ziemi?
To nie zastanawiaj się, tylko weź te same. Przyjmij, że planety poruszają się po okręgach, masz położenie i prędkość. Resztę sobie liczysz z wzoru na obwód okręgu, na odległość dwóch punktów (twierdzenie Pitagorasa): wyliczasz o ile przesunie się obiekt po 1 s, wyliczasz kąt o ile się zmieni i przeliczasz na współrzędne x i y. Potem dla wszystkich planet. Wstępnie to jest sama matematyka.
wiem mniej więcej co i jak dalej liczyć, ale nie dają mi spokoju te wartości. Bo muszą być wzięte z wiki, jak mu pokażę takie rozwiązanie, to będzie źle -.- poza tym, tam położenie słońca wcale nie jest (0,0,0) co zmienia mi całkowicie wzór na R ... ciągle szukam tych wartości, ale nie mogę się połapać, skąd je wziąć, skąd je wzięli tam ... dając liczby z wiki wyjdą mi kosmiczne [cóż za trafne porównanie-.-] wartości, i rysując je nie dostanę tego, co bym chciał
Załóżmy, ze moje słońce jest w pkcie [0,0,0], ziemia jest w odl [to z wiki] 149 597 890 km to jak mam policzyć położenie ziemi, czyli x,y dla ziemi?
Zastosuj jakąś skalę - 1 punkt w twoim układzie współrzędnych to może być na przykład 10^6 km. Ziemia będzie na pozycji 149,0,0, kiedy jest najdalej odsunięta od Słońca (uwaga: w którą stronę zorientowany jest układ zależy od ciebie!). Podobnie możesz przeskalować wartości dla innych planet.
Z tego kodu co podałeś - oni wzięli sobie skalę w postaci AU (jednostki astronomicznej), która wynosi około 8 minut świetlnych (http://pl.wikipedia.org/wiki/Jednostka_astronomiczna). Nie istnieje coś takiego jak "początkowe położenie planet" - musisz zacząć liczyć od pewnej daty znając dokładne położenia wtedy. Znów odwołam się do kodu wcześniej zaprezentowanego - oni tam mają dane ustalone w jakiś sposób z dnia 28 czerwca 1960 roku. Dane późniejsze da się wyliczyć i dane wcześniejsze też się da wyliczyć, bo znamy wartości prędkości orbitalnej planet w układzie. Jeżeli dobrze widzę to tamten kod chyba też uwzględnia Słońce w pozycji 0,0,0, a przynajmniej bardzo blisko 0.
ok, a co z predkoscia? I jesli zastosuje taka skale, to polozenie ziemi (149, 0, 0) bedzie takie, ok, a nie powinienem przypadkiem ustalic jakiegos polozenia y ? Tzn dac [na przyklad] : (149, 60, 0), gdzie x = 149, y = 60, z = 0? Bo przecież później będę musiał zmienić y
korzystam z tego wzoru: http://upload.wikimedia.org/wikipedia/pl/math/7/3/1/731f09a6ff32bdc51a1b0eaa6e37efa8.png
oj, troszkę mi namieszałeś - czy to znaczy, że jeśli bym wyliczył dane dla 25.11.2011, to już jutro mój program były w jakimś sensie nieaktualny? <olaboga>
a w tym pliku, ktory podalem, czym jest Gm? to nie powinno byc dla wszystkich stale?
Ok, tylko może mi ktoś jeszcze powiedzieć, jak to wyliczyć, bo, tak jakby położenie x mam, ale położenia y i z? Oni tam jakoś wyliczyli, skoro u mnie położenie na OX to będzie 149 dla ziemi, skad mam wziac y i z?
Zajrzyj do takiego hasła: http://pl.wikipedia.org/wiki/Uk%C5%82ad_wsp%C3%B3%C5%82rz%C4%99dnych_biegunowych
Tam jest info jak przeliczyć. W twoim przypadku masz tak:
Przyjmujesz Z=0, dla ułatwienia. Pewnie w rzeczywistości tak nie jest, ale zrób wstępnie takie uproszczenie, że planety poruszają się po okręgu, i każdy okrąg leży w płaszczyźnie XY. Dodatkowo środek okręgu jest w punkcie (0, 0). Masz początkowe położenie ziemi w punkcie x=149 y=0. To jest na osi X. Kąt jest równy alfa=0 a promień r=149. Teraz porusza się po okręgu z prędkością v, a więc masz prędkość kątową omega=v/r. Z tego masz zależność kąta alfa od czasu - po czasie t kąt alfa=omega *t, promień się nie zmienia. Teraz te wartości alfa i r wstawiasz do wzorów z wikipedii i masz swoje X i Y. Potem możesz sobie szukać kątów między płaszczyznami orbit planet, wyznaczać orbity eliptyczne korzystając z prawa Kepplera czy też inaczej, ale myślę, że to trochę za daleko by było, bo to chyba o informatykę chodzi.
maciej napisał(a)
ok, a co z predkoscia? I jesli zastosuje taka skale, to polozenie ziemi (149, 0, 0) bedzie takie, ok, a nie powinienem przypadkiem ustalic jakiegos polozenia y ? Tzn dac [na przyklad] : (149, 60, 0), gdzie x = 149, y = 60, z = 0? Bo przecież później będę musiał zmienić y
korzystam z tego wzoru: http://upload.wikimedia.org/wikipedia/pl/math/7/3/1/731f09a6ff32bdc51a1b0eaa6e37efa8.png
oj, troszkę mi namieszałeś - czy to znaczy, że jeśli bym wyliczył dane dla 25.11.2011, to już jutro mój program były w jakimś sensie nieaktualny? <olaboga>
a w tym pliku, ktory podalem, czym jest Gm? to nie powinno byc dla wszystkich stale?
Jeżeli nie podałeś Y, to znaczy, że wynosi 0 - nowe Y będzie wyliczone zgodnie ze wszystkimi prawidłami fizycznymi w następnym kwancie czasu. Bo musisz sobie jeszcze ustalić kiedy będziesz przeliczał położenia planet - co godzinę, co minutę, co dzień, co sekundę?
We wzorze który podałeś G jest stałą - stałą grawitacji. Stałe zasadniczo są stałe.
Musisz mieć jakiś moment początkowy i dla niego ZNAĆ wartości położenia/prędkości obiektów. Da się policzyć gdzie będą obiekty w innym czasie, ale w pewnym momencie musimy to wiedzieć, aby móc cokolwiek liczyć. Liczenie będzie działać zarówno w tył, jak i w przód, prawa fizyki są (zazwyczaj) niezależne od kierunku biegu czasu.
A w ogóle twój program musi mieć te dane w rzeczywistym czasie? Bo możesz zacząć od momentu, kiedy wszystkie 8 planet jest ustawionych w jednej linii i nie mówić kiedy to było i tylko sobie liczyć dalej od tej chwili. Nie wiem czy i kiedy ona nastąpiła, ale to upraszcza sprawę :-)
To niech mi ktoś odpowie, błagam, bo już nie mam siły do tego, czemu ten kod nizej nie działa? :(
Slonce jest w srodku ekranu (0,0,0), ziemia odsunieta nieco dalej (odsuwam tylko wspolrzedna x, pozostale to zero). Predkosc ziemi tez jest ustalona, ale jedynie dla wspolrzednej x, pozostale to zera, wszystko dzieje sie w petli nieskonczonej ...
h to jakas delta czasu
odl = sun.pos - eart.pos
earth.velocity = earth.velocity - hGmassodl/mag(odl)**3
earth.pos = earth.pos + earth.velocityh
nie bardzo rozumiem, mógłbyś wyjaśnić?
Mam masę Ziemi, położenie Słońca (0,0,0), położenie Ziemi (-0.5, 0, 0), prędkość Ziemi (liczba, 0, 0)
Znów nie bardzo rozumiem - czy chodzi Ci o to, że ta prędkość powinna być jakoś tak: (0, liczba, 0) ? Bo jeśli tak, to to też niestety nie działa :( tam na poprzedniej stronie to już w sumie cała aplikacja, i tak to jest napisane, głowię się już 3 dzień i dalej nic mi nie wychodzi
mógłby ktoś podpowiedzieć? bo moja planeta nadal nie lata po orbicie ;(
daj predkosc (0,liczba,0) to na 100% zadziala
nie wiem, skad Twoja pewnosc, niestety - po proponowanej zmianie dalej "kiszka" - nie dziala, planeta nie leci po orbicie, tylko wylatuje w bok i nawet jej nie widac, widac tylko orbite, jako linie prosta, ktora sie rozciaga i rozciaga. Nawet slonca nie widac :/
Bo liczysz jak dla ruchu prostoliniowego, a nie ruchu po okręgu. Wektor prędkości musi być zawsze prostopadły do prostej przechodzącej przez Ziemię i Słońce.
Poczytaj o ruchu po okręgu, prędkości kątowej, weź wzory trygonometryczne i w ten sposób licz położenie po jakimś tam delta t
No właśnie w tym problem, że czytałem, ale nie rozumiem :( tzn. nie potrafię zastosować tych wzorów u siebie:
x = (Rsin(kat));
y = (Rcos(kat));
nie wiem np. skąd mam wziąć ten kąt, i o który promien tu chodzi ... i co właściwie oznaczają te wyliczone x oraz y - nowe położenie? nie czaję tego :(
Zresztą, nie wiem, czy to jest potrzebne, tutaj: http://www.inference.phy.cam.ac.uk/teaching/comput/C++/python/index.shtml korzystają co prawda z pędu, ale nigdzie nie liczą żadnych kosinusów czy sinusów. A ja muszę zastosować się do tego wzoru swojego, z porzedniej strony, i nie wiem, albo jestem głupi, ale nie wydaje mi się, że tam są cos czy sin potrzebne
kąt to jest kąt pomiędzy osią oX, a prostą przechodzącą przez punkt 0,0(słońce) i ziemię. R to odległość słońca od ziemi, x, y to współrzędne ziemi dla danego kąta i R. Kąt musisz sobie sam wyliczyć biorąc pod uwagę czas i prędkość kątową ziemi
Hm, a to dlaczego tam "działa" bez tego?;>
Nie znam pythona, ale z tego co widzę, oni to liczą z siły przyciągania, która jest zawsze skierowana do środka układu i oczywiście liczą na wektorach.
Weź mi powiedz na co masz takie zadanie zrobić? To znaczy chodzi mi w jakiej szkole takie zadania dają. Potrzebna mi ta wiedza, żeby znaleźć płaszczyznę porozumienia. Bo z jednej strony podrzucasz jakieś wzory z pogranicza geometrii różniczkowej i magii, a z drugiej nie wiesz jak policzyć długość łuku okręgu. Dlatego chciałbym wiedzieć na co to jest.
W skrócie mówiąc: do tego co robisz nie potrzeba liczyć żadnej siły przyciągania, wykonywać obliczeń na wektorach ani robić całkowania numerycznego. Potrzeba użyć funkcji liniowej i definicji sinusa i cosinusa.
niby racja, ale co z tego, skoro nauczyciel wymaga uzycia tego wzoru [nie tłumaczył skąd on się wziął]
maciej napisał(a)
nauczyciel wymaga uzycia tego wzoru
Jakiego TEGO? Wklej/wpisz TEN wzór, albo może podaj całą treść zadania jakie dostałeś. Jak na razie to wszystko twoja interpretacja, mało to spójne jest. I pochwal się gdzie się uczysz.