Форум программистов, компьютерный форум, киберфорум
Matlab
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.56/9: Рейтинг темы: голосов - 9, средняя оценка - 4.56
0 / 0 / 0
Регистрация: 23.02.2018
Сообщений: 1
1
Matlab 2016

Движение планеты вокруг солнца

23.02.2018, 17:14. Просмотров 1744. Ответов 2

Доброго времени суток, нужна помощь... то ли с Матлабом, то ли с физикой (скорее второе)

Не давно решил вспомнить азы работы с матлабом, так как в новом семестре придётся с ним очень много работать... и первое что пришло в голову, это просчёт движение одного объекта вокруг другого.

Сильно много расписывать не буду... перейду сразу к коду.

Кликните здесь для просмотра всего текста

Для упрощение подсчётов, решено было разместить "солнце" в центре кардинат (0,0)
Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
close all
clear all
clc
%% Тут задаём изначальную позицию и скорость нашей планеты
X=0 
Y=150e9 %(m)
Vx=29783  %(m/s)
Vy=0
 
%%Гравитационная постоянная и масса Солнца
 
G=6.67408e-11 
Ms=1.989e30 %(kg)
 
%% dt-временной промежуток (s) (1 сутки) и t-время (2 года) (s)
 
dt=86400 
t=86400:dt:63072000
 
%% цикл
 
   for i = 1:length(t)
    b=atan2(Y(i),X(i)) %% угол
    
    g=-G*Ms/(X(i)^2+Y(i)^2) % ускорение для конкретной точки в которой находится планета g=-G*Ms/r^2 где r считаем по c^2=a^2+b^2 »» c=sqrt(a^2+b^2)»» c=r »» r^2=a^2+b^2
 
       Vy(i+1)=Vy(i)+g*sin(b)*dt  % Просчитываем скорость для последующего цикла v=v0+g*dt
       Vx(i+1)=Vx(i)+g*cos(b)*dt
 
    
        X(i+1) = X(i) + Vx(i)*dt + (g*cos(b)*dt^2)/2 % Позиция для последующего цикла x=x0+v0*dt+1/2*g*t^2
        Y(i+1)= Y(i) + Vy(i)*dt + (g*sin(b)*dt^2)/2
 
% А дальше делаем плот 
hold on
grid on
h1 = plot(X(i),Y(i),'or') % Позиция планеты
h2 = plot(0,0,'ob') % Солнце
h3 = plot(X(i),Y(i),'.r') % Траектория планеты
axis([-200e9 200e9 -200e9 200e9])
pause(0.1)
delete(h1)
end


В итоге вроде бы всё работает... вот только высота орбиты планеты постоянно растёт (Она удаляется от центра), и как мне кажется тут два варианта... либо я где-то накосячил с формулами, либо это связанно с допущениями при расчётах (временной промежуток равный целым суткам).
Хотелось бы услышать от знающих людей, что не так я делаю и как это исправить...

P.S. В дальнейшем хочу усложнить задачку... движение двух тел с примерно равной массой вокруг общего центра масс.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.02.2018, 17:14
Ответы с готовыми решениями:

Моделирование движение Земли вокруг Солнца
Доброго дня уважаемые! На повестке у меня задача необходимо смоделировать движение Земли вокруг...

Изобразить движение планеты вокруг солнца по эллипсу
изобразить движение планеты вокруг солнца по эллипсу.

Движение планеты заданного радиуса r1 вокруг солнца (с лучами) по заданному радиусу r2.
Ребята помогите,пожалуйста!!! Задание 1. Напишите программу, движения прямых AB и BC по нижней...

Анимация: планеты, вращающиеся вокруг Солнца
Помогите написать программу с вращающимися вокруг солнца планетами ! Буду благодарен.

__________________
2
489 / 398 / 40
Регистрация: 17.07.2013
Сообщений: 2,055
23.02.2018, 22:16 2
Зачем 37 строка дублирует 39 ?
0
5531 / 4037 / 1593
Регистрация: 02.02.2014
Сообщений: 10,851
23.02.2018, 23:11 3
слегка причесала..
Кликните здесь для просмотра всего текста
Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
clc; clf; clear all;
%% Тут задаём изначальную позицию и скорость нашей планеты
X=0;
Y=150e9; %(m)
Vx=29783;  %(m/s)
Vy=0;
 
%% Гравитационная постоянная и масса Солнца
G=6.67408e-11;
Ms=1.989e30; %(kg)
 
%% dt-временной промежуток (s) (1 сутки) и t-время (2 года) (s)
dt=86400;
% t=86400:2*dt:63072000;
h2 = plot(0,0,'ob'); % Солнце
%% цикл
for i = 86400:dt:63072000
    b=atan2(Y,X); %% угол
    g=-G*Ms/(X^2+Y^2); % ускорение для конкретной точки в которой находится планета g=-G*Ms/r^2 где r считаем по c^2=a^2+b^2 »» c=sqrt(a^2+b^2)»» c=r »» r^2=a^2+b^2
    
    Vy=Vy+g*sin(b)*dt;  % Просчитываем скорость для последующего цикла v=v0+g*dt
    Vx=Vx+g*cos(b)*dt;
    
    X= X+ Vx*dt + (g*sin(b)*dt^2)/2; % Позиция для последующего цикла x=x0+v0*dt+1/2*g*t^2
    Y= Y+ Vy*dt + (g*cos(b)*dt^2)/2;
    
    % А дальше делаем плот
    hold on;   grid on
    h1 = plot(X,Y,'ok'); % Позиция планеты    
    h3 = plot(X,Y,'.r'); % Траектория планеты
    axis([-200e9 200e9 -200e9 200e9])
%     pause(0.0001)
    drawnow
    delete(h1)
end


Nick07, 37 - положение планеты в текущий момент, 39 - след ее траектории
2
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.02.2018, 23:11

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

Вращение планеты вместе с обьектами вокруг солнца
Здраствуйте я долгое время пытаюсь заставить вращатся планету вокруг солнца в месте с обьектами....

Движение Земли вокруг Солнца
Помогите пожалуйста написать код Создать графическую анимацию с пейзажем. -Полнота анимированной...

Создать модель движения Солнца вокруг орбиты, Земли вокруг Солнца, Луны вокруг земли
Вот есть набросок, что дальше? :help: Const pi = 3.14 Dim intRev As Single Private Sub...

Движение спутника вокруг планеты (проверка законов Кеплера + анимация) в MathCad
Вот полное условие, если кто сможет помочь за кратчайшие сроки, буду премного благодарен :)...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.