Epicykloida 13/8

Dział dla użytkowników nie lubiących googlować ;) Konkretne zagadnienia matematyczne w sieci, skrypty online, poszukiwania wszelakie acz KONKRETNE!
grzegorz575
Użytkownik
Użytkownik
Posty: 4
Rejestracja: 3 wrz 2022, o 06:14
Płeć: Mężczyzna
wiek: 50

Epicykloida 13/8

Post autor: grzegorz575 »

Dzień dobry, poszukuję programu, bądź apletu, który rysowałby wykres epicykloidy po wpisaniu określonych parametrów. Tylko teraz diabeł tkwi w szczegółach, bo ja już kilka programów i apletów znalazłem, ale… albo są to rozbudowane programy, w których – jakbym poświęcił pół roku na naukę – to może i bym przez to przebrnął, albo są to proste aplety, niespełniające założeń, których potrzebuję. Już wyjaśniam, o co chodzi:

Jak wiadomo, Wenus i Ziemia, podróżując po swych orbitach, wykreślają w przestrzeni specyficzną epicykloidę, będącą graficznym odwzorowaniem „PRAWIE rezonansu 13/8”. To słówko „PRAWIE” jest tu dość istotne, ponieważ startując z koniunkcji dolnej, po każdych ośmiu latach ziemskich (Wenus w tym czasie robi 13 okrążeń wokół Słońca) obie planety ustawiają się ponownie w koniunkcji dolnej, ale z drobnym przesunięciem w stosunku do pozycji sprzed ośmiu lat. Niedopasowanie po każdym cyklu wynosi coś około 1,5%. Warto dodać, że owa epicykloida powstaje zarówno w modelu heliocentrycznym, jak i geocentrycznym. W pierwszym przypadku wykreśla ją punkt pośrodku wirtualnej poprzeczki, którą połączymy krążące wokół Słońca planety. W drugim przypadku kreśli ją sama Wenus, poruszająca się po orbicie Słońca, które okrąża Ziemię.

Potrzebowałbym więc takiej pomocy naukowej, która wykreśliłaby mi tę epicykloidę, obojętnie w którym modelu, ale z możliwością dokonywania KOREKTY PARAMETRÓW. A konkretnie:

1) Eliminujemy orbity eliptyczne, zastępując je kołowymi.
2) Regulujemy promienie orbit.
3) Regulujemy okresy orbitalne.

W efekcie powinniśmy otrzymać matematyczny model orbit obydwu planet, zgodny w stu procentach z wykresem epicykloidy (czyli po ośmiu latach planety meldują się dokładnie w pozycji startowej).

Od razu przyznam się, że jestem cienki bolek w matematykę i programowanie :) Po prostu nie dam rady sobie czegoś takiego napisać. Dlatego idealna dla mnie byłaby jedna z dwóch opcji:

1) Prosty aplet, który rysowałby TĘ konkretną epicykloidę, dając wspomniane wyżej możliwości manewru.
2) Interaktywny plik graficzny, który dałoby się odpalić w jakimś programie, typu np. CABRI.

Jeżeli czyta to jakiś Człowiek Dobrej Woli, który byłby skłonny przyjść z pomocą, to ja ze swej strony zapewniam, że pomoc takową z wdzięcznością przyjmę :)
janusz47
Użytkownik
Użytkownik
Posty: 7917
Rejestracja: 18 mar 2009, o 16:24
Płeć: Mężczyzna
Podziękował: 30 razy
Pomógł: 1671 razy

Re: Epicykloida 13/8

Post autor: janusz47 »

Program w MATLAB "epicykloidy" z możliwością zmian promieni i okresów obiegu.

Program w wersji oryginalnej opracował Prof. Roche C. Guzman z Uniwersytetu Hofstra

Kod: Zaznacz cały

function epicykloidy(Q,R,T1,r,tratio,Nc,Ntpc,ti)
clear; clc; close('all');
Q = input('Animacja?(0 = nie, 1 = tak): ');
R=5;% promień orbity pierwotnej
T1=1;% okres obiegu 
r=2;% promień epicykloidy
tratio = 9.25; %stosunek
    Nc = 10; % liczba cykli
    Ntpc = 200; % liczba punktów na cykl
    ti = 0; % czas początkowy
%% Obliczenia
    % czas i liczba danych punktów
    tf = Nc*T1; % czas końcowy
    Nt = Nc*Ntpc; % ogólna liczba punktów
    t = linspace(ti,tf,Nt); % wektor czasu orbity pierwotnej
    omega1 = (2*pi)/T1; % prędkość kątowa
    X = R*cos(omega1*t); % wektor
    Y = R*sin(omega1*t); %  vector
    % epicykloida
    T2 = T1/tratio; % okres 
    omega2 = (2*pi)/T2; % prędkość końcowa
    x = R*cos(omega1*t)+r*cos(omega2*t); % wektor
    y = R*sin(omega1*t)+r*sin(omega2*t); % wektor
%% Wyświetlenie wyników:
doAnimation = logical(Q);
if doAnimation
    for k = 1:Nt
        plot(X,Y); % orbita początkowa
        hold('on');
        plot(x(k),y(k),'or','markerfacecolor',[1 0 0]); 
        plot(x(1:k),y(1:k),'r-','markerfacecolor',[1 0 0]);
        axis([-(R+r) (R+r) -(R+r) (R+r)]);
        title('EPICYKLOIDY');
        xlabel('x');
        ylabel('y');
        hold('off');
        pause(0.1);
        drawnow;
    end
else
    plot(X,Y); 
    hold('on');
    plot(x,y,'r-','markerfacecolor',[1 0 0]); 
    axis([-(R+r) (R+r) -(R+r) (R+r)]);
    title('EPICYKLOIDY');
    xlabel('x');
    ylabel('y');
    hold('off');
end
Wywołanie programu:

Kod: Zaznacz cały

epicykloidy(1,5,1,2,9.25,10,200,0)
grzegorz575
Użytkownik
Użytkownik
Posty: 4
Rejestracja: 3 wrz 2022, o 06:14
Płeć: Mężczyzna
wiek: 50

Re: Epicykloida 13/8

Post autor: grzegorz575 »

O! Dzięki bardzo! Jutro zacznę z tym walczyć i pochwalę się, czy podołałem :)
grzegorz575
Użytkownik
Użytkownik
Posty: 4
Rejestracja: 3 wrz 2022, o 06:14
Płeć: Mężczyzna
wiek: 50

Re: Epicykloida 13/8

Post autor: grzegorz575 »

MATLAB jest niestety poza moim zasięgiem. Ale niewykluczone, że po drobnych modyfikacjach da się to uruchomić w darmowym SCILAB. Np. "%" pozamieniać na "//". Będę próbował, bo dopiero raczkuję w tym temacie. W każdym razie jestem odrobinę dalej, niż byłem, więc dzięki raz jeszcze. Jakiekolwiek sugestie w kwestii uruchamiania w SCILAB programów napisanych dla MATLAB - mile widziane :)
janusz47
Użytkownik
Użytkownik
Posty: 7917
Rejestracja: 18 mar 2009, o 16:24
Płeć: Mężczyzna
Podziękował: 30 razy
Pomógł: 1671 razy

Re: Epicykloida 13/8

Post autor: janusz47 »

Istnieją też oprócz SCILAB darmowe klony MATLABA: OCTAVE i FreeMat.
grzegorz575
Użytkownik
Użytkownik
Posty: 4
Rejestracja: 3 wrz 2022, o 06:14
Płeć: Mężczyzna
wiek: 50

Re: Epicykloida 13/8

Post autor: grzegorz575 »

OK, działa pod OCTAVE plus GNUPLOT. Tylko - zdaje się - całe sterowanie grafiką i parametrami wyłącznie przez konsolę, więc już zaopatrzyłem się w samouczek i zaczynam zabawę z pętelkami. Temat można zamknąć, pomoc dotarła na czas :)
ODPOWIEDZ