Kerbal Space Program Forum | Polska Społeczność Gry
Off-topic => Dyskusje na dowolne tematy => Wątek zaczęty przez: Metall69 w Pon, 23 Lut 2015, 20:06:46
-
Biorę się właśnie za taki mały projekt w Excelu. Chcę zrobić na wykresie wizualizację różnych kształtów orbit: parabolicznej, eliptycznej, hiperbolicznej.. Macie może jakieś dobre opracowania na temat zależności kształtu orbity od prędkości (tak wiem, I i II prędkość kosmiczna, ale pierwszy raz babram się liczeniem elips), rysowaniu parametrycznie elips i innych, które mogłyby się przydać. Jak macie jakieś propozycje to napiszcie. Oczywiście podzielę się efektami mojej pracy jak skończę ;) Z góry dziękuję.
-
A kolega chce wyznaczać elementy orbit, opierając się na Newtonowskiej teorii grawitacji? W takim razie najprościej jest, zamiast całkować prawo zachowania pędu po czasie, liczyć ze wzoru Bineta, czyli różniczkując po fi. Tak chciałem napisać, ale algorytm dla VBA byłby ciężki, lepiej by było w C napisać.
Znalazłem więc coś ciekawego, i myślę że było by to wspaniałe rozwiązanie, szczególnie patrząc, że są tam gotowe programy w QBasic, które łatwo będzie zaimplementować do visuala.
Numeryczne obliczanie orbit (http://edu.i-lo.tarnow.pl/ast/sim/noo/0002.php)
-
Wielkie dzięki :) Wygląda ładnie, ale ogarnę to jutro bo już dzisiaj nie mam siły. Póki co zrobiłem orbitę kołową i narysowałem na wykresie. Docelowo zamontuje suwaki, które określą wysokość i prędkość styczną w punkcie 0 i przełącznik planet :)
-
Niezbyt związane z tematem, ale planowałem kiedyś zrobić appkę do wyliczania asyst grawitacyjnych. Projekt upadł z powodu braku czasu, ale może się za to jeszcze zabiorę. Jeśli tak, wrzucę, bo może się przydać.
PS. Miało się to nazywać "MechMaciuś".
-
W Excelu to raczej niezbyt dobry pomysł, z dwóch powodów:
1. Excel nie służy do pisania aplikacji
2. Osoby nieposiadające Office(czyli np. ja, wątpię, że to się da odpalić w Libre Office) nie odpalą tego
Nie lepiej byłoby to napisać w jakimś języku programowania? C/C++ to może nieco przesada, zwłaszcza, że nie ma żadnych wbudowanych bibliotek do rysowania, lecz może jakiś język .Net, czyli Visual Basic lub C#?
A pomysł jak najbardziej dobry, powodzenia z nim :)
-
No właśnie dla tego język C jest tak wspaniałym narzędziem, ponieważ programista implementuje sobie takie biblioteki, jakie mu są aktualnie potrzebne.
Chcesz rysować grafikę? Proszę bardzo, jest na przykład primlib, bardzo prosta i cholernie popularna biblioteka graficzna. Są darmowe silniki, jest DirectDraw (jak ktoś się czuje na siłach).
W naszym przypadku potrzebne jest narysowanie linii w przestrzeni 2D. Niezbyt to skomplikowane.
-
Dlaczego VBA?
1. To projekt szkolny i muszę go zaliczyć :P
2. Na każdym komputerze w firmach i w większości domów jest pakiet biurowy.
3. Excel jest prosty, intuicyjny, w zadzie jest jedną wielką tablicą i możesz edytować każdą komórkę.
4. Stworzenie jakiejś prostackiej i idiotoodpornej aplikacji biurowej jest w nim dziecinnie proste.
5. Dodanie interfejsu(suwaków, przycisków), wprowadzanie danych jest bardzo proste.
6. Lubię Excela.
7. Ma pewne wady, ale mi wystarcza, nie planuję jakiejś kariery programistycznej.
-
To twój program i zrobisz jak będziesz uważał.
1. Ja mam też projekt do szkoły związany z mechaniką orbitalną i ja niestety muszę go napisać w C++ i WinAPI, mimo, że nie cierpię WinAPI, bo jest zbyt niskopoziomowe i też bym chętnie napisał to w jakimś wysokopoziomowym API. Jednak jakbyś wybrał taki Visual Basic, to byś miał dużo łatwiej niż w Excelu - Excel nie służy do pisania programów, a w VB czy C# masz pełno bibliotek do najprzeróżniejszych rzeczy oraz wszystko jest wysokopoziomowe.
2. A tu byś się zdziwił, jest dużo firm, które wcale nie używają Office. Masz rację, ale pamiętaj, że pakiet biurowy to nie tylko Microsoft Office, podobnie jak system operacyjny to nie tylko Windows, a twoja aplikacja będzie wymagała MS Office i co za tym idzie, Windowsa.
3. Polenizowałbym. Dużo łatwiej byłoby mi napisać tą aplikację w jakimś wysokopoziomowym języku programowania i odpowiedniej do tego bibliotece, niż bawić się w pisanie w czymś, co nie służy do tego.
4. W językach zarządzanych jak C# czy VisualBasic też.
5. j.w. Masz graficzne narzędzie, w którym wybierasz sobie element(czyli przycisk, suwak itd.) i wsadzasz go w okienko, a potem klikasz na niego dwa razy i oprogramowujesz go.
6. Twoja sprawa :)
7. j.w., lecz powtórzę poraz kolejny: Excel nie służy do pisania aplikacji.
Nie myśl tylko, że staram się ciebie do czegoś namówić ;) Przedstawiam ci tylko swój punkt widzenia, bo uwielbiam takie dyskujse :P Zrobisz jak będziesz chciał, to twoja aplikacja i mi nic do tego.
-
4. W językach zarządzanych jak C# czy VisualBasic też.
5. j.w. Masz graficzne narzędzie, w którym wybierasz sobie element(czyli przycisk, suwak itd.) i wsadzasz go w okienko, a potem klikasz na niego dwa razy i oprogramowujesz go.
7. j.w., lecz powtórzę poraz kolejny: Excel nie służy do pisania aplikacji.
Metal mówi o VBA.
Jest to Visual Basic wbudowany w aplikację MSOffice. Oprócz tego, że można w nim pisać dosłownie to samo co w VB, to dodatkowo może wymieniać dane z w/w pakietem.
Dla tego wykorzystuje się go do pisania makr np w Excelu. Poza tym nie można skompilować kodu do pliku wykonywalnego.
Dla tego Kamils nie rozumiem punktu 4. w cytacie powyżej, punktu 5. i punktu 7.
-
VBA to jest odmiana Visual Basic wbudowana w pakiet Office do wykonywania makr, a Visual Basic w .Net jest to prawdziwy i pełnoprawny język programowania. Składnia ta sama, lecz ich wykorzystanie i budowa to już inna bajka.
Aplikacja napisana w VBA ogranicza się tylko do MS Office, który jak wspomniałem, nie każdy musi posiadać np. ja. Nie potrzebuję płacić takiej kasy za coś, co mam za darmo pod postacią LibreOffice. Zresztą jak wspomniałem wielokrotnie, VBA nie służy do pisania bardziej skomplikowanych aplikacji.
VBA to nie jest to samo co Visual Basic, mają tylko wspólną nazwę i składnię, lecz ich założenia są całkowicie odmienne.
Autor twierdzi, że stworzenie prostackiej i idioto odpornej aplikacji w VBA jest proste, na co odpowiedziałem, że w językach zarządzanych, jak C# czy VB też jest proste. Języki zarządzane są wysokopoziomowe i dzięki ich specyfikacji(są kompilowane do kodu zarządzanego, a nie maszynowego, stąd trudniej o błąd i podatność na psujących użytkowników) też są idioto odporne.
Autor i tak zrobi po swojemu, jak mówiłem, nie mam zamiaru go nawracać na siłę, prowadzę tylko pokojową dyskusję.
-
Visual Basic w .Net jest to prawdziwy i pełnoprawny język programowania
VBA to nie jest to samo co Visual Basic, mają tylko wspólną nazwę i składnię, lecz ich założenia są całkowicie odmienne.
Czyli VBA jest nieprawdziwy. No dziękuję za uświadomienie.
A więc jak byłem u teściowej na wakacjach i nie mając dostępu do moich zabawek, pisałem sobie programy w VBA, które w moim mniemaniu wykonywały dokładnie te same zadania co programy wykonywalne, tylko środowisko uruchomieniowe było, nazwijmy to, specyficzne, to się okazuje byłem w błędzie i nic nie było takie jak być powinno?
P.S.
Makro napisane w VBA w bardzo prosty sposób można przekonwertować na OpenOffice Basic.
-
Nigdzie nie napisałem, że VBA to nieprawdziwy język. Słowa "prawdziwy" użyłem w kontekście pisania aplikacji, bo w VBA możesz co najwyżej napisać makro udające aplikację, a nie prawdziwą aplikację. Ujmę to może inaczej:
VB .Net to język do pisania aplikacji, VBA to język makr w MS Office. Różnicy między aplikacją a makrem chyba nie muszę wyjaśniać, bo skoro doszedłeś do tej dyskusji, to ufam, że mam do czynienia z programistą, albo chociaż osobą obeznaną w temacie? Makro może udawać aplikację ze specyficznym środowiskiem uruchomieniowym, ale nie jest pełnoprawną aplikacją, tylko makrem.
Co do twojego pisania u teściowej, czy ja kiedykolwiek napisałem, że marko napisane w VBA nie może udawać aplikacji? Ciągle powtarzam, że makra pisane w VBA mogą udawać aplikacje, ale nie są aplikacjami, tylko makrami, a VBA nie służy do pisania aplikacji, tylko makr.
Obsługa formatów i wynalazków MS w wolnych programach nie jest pełna i nie mam absolutnie żadnej gwarancji, że przekonwertowane makro będzie działać jak należy w Open/Libre Office.
Przekręcasz nieco moje słowa.
-
... ufam, że mam do czynienia z programistą, albo chociaż osobą obeznaną w temacie?
Na szczęście nie jestem programistą.
Piszę trochę w C, ale w większości są to sterowniki mikrokontrolerów lub aplikacje dla systemów wbudowanych, na potrzeby firmy w której pracuję.
Ale już nie offtopujmy.
Czekajmy cierpliwie na pierwsze linijki kodu.
-
@UP: Ja siedzę w pisaniu aplikacji, niezbyt lubię niskopoziomowe sprawy, masz rację, skończmy już z offtopem.
Mimo wszystko, czekam na gotową aplikację, niezależnie w czym będzie. ;)
-
Nie wiedziałem, że wywołam taką zażartą programistyczną dyskusję. W tym przypadku nie miałem wyboru, bo to zajęcia ze znajomości VBA i pisanie w czymś innym odpada.
Co do postępu prac, jest gorzej niż źle. Zerżnąłem kod i w dodatku nie działa tak jak powinien, ale przynajmniej coś rysuje.
Chyba napiszę to od nowa, uwzględnie GM i R Ziemi. Póki co to tylko szkic podglądowy, implementacja gotowego algorytmu.
Kod:
Sub orbita()
Dim x As Double
Dim y As Double
Dim vx As Double
Dim vy As Double
Dim k As Double
Dim r As Double
Dim ax As Double
Dim ay As Double
Dim i As Integer
x = [R3C6]
y = [R4C6]
vx = [R5C6]
vy = [R6C6]
k = [R7C6]
For i = 1 To 10000
x = x + vx * k
y = y + vy * k
r = (x * x + y * y) ^ (-3 / 2)
ax = -x * r
ay = -y * r
vx = vx + ax * k
vy = vy + ay * k
Cells(10 + i, 1) = 180 * x
Cells(10 + i, 2) = 180 * y
Next
End Sub
Dla danych:
x 0,5
y 0
vx 0,5
vy 1,6
k 0,001
Rysuje coś takiego:
(http://i.imgur.com/rl56QWN.jpg)
-
Uwielbiam wszelakie dyskusje, nic na to nie poradzę :P
Dobrze, że nie napisałeś wcześniej, że musisz kodzić w VBA, bo bym nie podyskutował sobie :) Wygląda to całkiem ładnie. Sam mam do napisania podobny projekt w WinAPI(nienawidzę WinAPI) tylko, że mój temat to Ruch po okręgu i ja mam zamiar po przyjęciu promienia okręgu i prędkości obiektu pokazać jak porusza się on po zadanym okręgu w zadanym czasie, ale to nie temat o mojej aplikacji, więc skupmy się na twojej. W porównaniu do mojego to masz dość ciężki projekt, dużo masz w nim myślenia i liczenia.
-
Ten kod mi wygląda na metodę Eulera rozwiązywania równań ruchu. Jednak wydaje mi się, że to:
x = x + vx * k
y = y + vy * k
powinno być po tym:
vx = vx + ax * k
vy = vy + ay * k
a nie na początku.
I dla testów zacznij od jakiegoś punktu na osi x i vx=0, daj tylko składową w kierunku y. Będzie lepiej widać czy kształt jest ok
-
Coś mi w samej elipsie nie odpowiada. Być może to wina tego, że jest przekrzywiona i półoś wielka nie jest równoległa z osią OX (a w tle są proste równoległe), ale mam złudzenie, że to w ogóle nie jest elipsa. Nie potrafię wskazać miejsca dwóch ognisk. Spróbuj zrobić (o ile się da) wykres bez linii równoległych do OX w tle (sama oś OX oraz OY może zostać, bo o ile się orientuję, jest ona jednym z ognisk elipsy).
-
Ten kod mi wygląda na metodę Eulera rozwiązywania równań ruchu. Jednak wydaje mi się, że to:
x = x + vx * k
y = y + vy * k
powinno być po tym:
vx = vx + ax * k
vy = vy + ay * k
a nie na początku.
I dla testów zacznij od jakiegoś punktu na osi x i vx=0, daj tylko składową w kierunku y. Będzie lepiej widać czy kształt jest ok
No jest to ten słynny przypadek algorytmu Rungego-Kutty pierwszego rzędu.
Prosta sprawa, dajmy więc młodości rozwinąć skrzydła.
No kurczę, wciąga mnie to jak grawitacja.
Chyba zaraz sam napiszę jakiś programik.
-
Dopiero dzisiaj udało mi się doprowadzić kod do porządku. Działa dla elips i hiperbol :) liczy apo i per
punkt 0: (R+h;0)
prędkość: (0;vy)
Pozostaje jedynie interfejs, wygląd i implementacja innych planet.
(http://i.imgur.com/A9EOBKt.jpg)
Wkurza mnie ten ziemniak który się tworzy z Ziemi przez złe skalowanie wykresu. Da się jakoś wyśrodkować wykres tak jak układ współrzędnych, aby odwzorować rzeczywisty kształt (tzn. okrąg)?
-
To ten ziemniak jest Ziemią? Myślałem, że to taki sobie randomowy owal :DDD
Chyba nie da się wyśrodkować, bo Excel chce uparcie rysować całą krechę.
-
Można przecież tak:
(http://i.imgur.com/sAPrEMQ.png)
-
I ja zrobiłem jakiś swój arkusz który w zależności od v0 i h0 liczy pozostałe parametry orbity oraz rysuje trajektorię.
(http://i.imgur.com/tdplqiD.png)
Zielony okrąg to Kerbin, szary okrąg to orbita Muna