需要一些帮助在3 d轴移动球! !

5视图(30天)
riccardR Simonetti
riccardR Simonetti 2021年1月6日
编辑: 亚当Danz 2021年4月15日
嗨,家伙。我想创建一个可个性化的太阳能sistem基本上我有2个问题:
第一,更重要的是比我不能移动轨道上的行星轨道(由函数生成updatePVA使用半显式欧拉约我知道他们的工作,因为我已经尝试标记),我知道我必须修改X, Y, ZDATA每颗行星,但当我运行,所有行星消失而不是行动。
有人能帮助我吗? ?
这是我的代码。
clc;清晰;关闭所有;
% richiamo la funzione切"全体的il programma
AAA级;
函数AAA级;
dt = 0.1;
s = get (0,“拉”);
w = 800;m = 400;
无花果=图(“位置”,(3)/ 2 w / 2,年代(4)/ 2米/ 2,w m]);
fig.Name =“你们太阳系”;
fig.NumberTitle =“关闭”;
视图(3);
甘氨胆酸b =;
集(b,“颜色”,“黑”);
b。位置= (0.1 0.1 0.6 .85);
b。GridLineStyle =“没有”;
b。XTick = [];
b。YTick = [];
b。ZTick = [];
% pianeti sistema solare
唯一= flipud (imread (“Sole.jpg”));
墨丘里奥教练= flipud (imread (“Mercurio.jpeg”));
Venere = flipud (imread (“Venere.jpeg”));
Terra = flipud (imread (“Terra.jpg”));
玛蒂·= flipud (imread (“Marte.jpg”));
Giove = flipud (imread (“Giove.jpg”));
Saturno = flipud (imread (“Saturno.jpeg”));
铀源= flipud (imread (“Urano.jpeg”));
Nettuno = flipud (imread (“Nettuno.jpeg”));
Plutone = flipud (imread (“Plutone.jpeg”));
每personalizzare %额外纹理
%中提琴= flipud (imread (' Viola.jpeg '));
% Cocomero = flipud (imread (' Cocomero.jpeg '));
% NanaBianca = flipud (imread (' NanaBianca.jpeg '));
% EsplosioneDiColori = flipud (imread (' EsplosioneDiColori.jpeg '));
[X, Y, Z] =球(200);
身体= initialConditions ();
i = 1:长度(身体)
pianeta (i)。x =身体每分钟(i) (1);%的信息结构体中定义命名的身体位置(x, y, z),半径,质量(无用)
pianeta(我).Y =身体每分钟(i) (2);
pianeta(我)还是z =身体每分钟(i) (3);
pianeta (i) r =身体上(i) r;
pianeta (i)。s =表面(pianeta (i) r . * X + pianeta(我)方式,
pianeta(我)r。* Y + pianeta .Y(我),
pianeta(我)r。* Z + pianeta(我)还是Z);
pianeta (i) s。EdgeColor =“没有”;
pianeta (i) s。FaceColor =“texturemap”;
结束
平等的;
轴([-3000 3000 -3000 3000 -3000 3000]);
波特%纹理iniziali predefinite da modificare记住
pianeta (1) s。CData =唯一;
pianeta (2) s。CData =墨丘里奥教练;
pianeta (3) s。CData = Venere;
pianeta (4) s。CData =地球;
pianeta (5) s。CData =玛蒂·;
pianeta (6) s。CData = Giove;
pianeta (7) s。CData = Saturno;
pianeta (8) s。CData =铀源;
pianeta (9) s。CData = Nettuno;
pianeta (10) s。CData = Plutone;
inizia_personalizzazione = uicontrol (“风格”,“按钮”,“字符串”,“inizia personalizzazione”);%阶梯,scelta阶梯bottone、stringa scritta stringa
inizia_personalizzazione。单位=“归一化”;
inizia_personalizzazione。位置= (0.75 - 0.6 0.2 - 0.05);
inizia_personalizzazione。回调= @button_pers_callback;
inizia_simulazione = uicontrol (“风格”,“按钮”,“字符串”,“inizia simulazione”);%阶梯,scelta阶梯bottone、stringa scritta stringa
inizia_simulazione。单位=“归一化”;
inizia_simulazione。位置= (0.75 - 0.4 0.2 - 0.05);
inizia_simulazione。回调= @button_simulaz_callback;
button_fine = uicontrol (“风格”,“按钮”,“字符串”,“好programma”);%阶梯,scelta阶梯bottone、stringa scritta stringa
button_fine。单位=“归一化”;
button_fine。位置= (0.86 - 0.01 0.134 - 0.038);
button_fine。回调= @button_fine_callback;
函数button_pers_callback (~ ~)
集(inizia_personalizzazione,“可见”,“关闭”);
集(inizia_simulazione,“可见”,“关闭”);
menu_pers;
结束
函数menu_pers (~ ~)
f1 = gcf;
面板= uipanel (f1);
panel.Units =“归一化”;
面板。位置= (0.75 - 0.35 0.2 - 0.50);
popup_sceltapianeta = uicontrol (“风格”,“popupmenu”);
popup_sceltapianeta.Units =“归一化”;
popup_sceltapianeta.Position = (0.75 - 0.7 0.2 - 0.1);
popup_sceltapianeta.String =“Pianeta1 | Pianeta2 | pianeta3 | Pianeta4 | Pianeta5 | pianeta6 | pianeta7”;
popup_sceltapianeta.Callback = @popup_sceltapianeta_callback;
popup_texturepianeta = uicontrol (“风格”,“popupmenu”);
popup_texturepianeta.Units =“归一化”;
popup_texturepianeta.Position = (0.75 - 0.6 0.2 - 0.1);
popup_texturepianeta.String =“Terra |中提琴| Cocomero”;
popup_texturepianeta.Callback = @popup_texturepianeta_callback;
stringa_nomepianeta = uicontrol (“风格”,“编辑”);
stringa_nomepianeta.Units =“归一化”;
stringa_nomepianeta.Position = (0.75 - 0.5 0.2 - 0.1);
stringa_nomepianeta.Callback = @text_nomepianeta_callback;
结束
函数button_fine_callback (src, ~)
关上(gcf)
结束
函数popup_sceltapianeta_callback (src, ~)
src.Value
camlookat (pianeta (src));
返回;
结束
函数button_simulaz_callback (~ ~)
tp = 1:3000
由于pianeti % -力量gravitazionale交易
2 = 1:(长度(身体)1)
jj =(2 + 1):长度(身体)
(2)[尸体。f,身体(jj)。f] = updateF(身体(ii),身体(jj));
结束
结束
%更新位置,速度,加速度,和复位力
% aggiorna posizione、velocita accelerazione e resetta力量
2 = 1:长度(身体)
(2)[尸体。(2)p,尸体。(2)v,尸体。)= updatePVA(身体(ii), dt);
身体(ii)。f = [0 0 0];
结束
tpp = 1:长度(身体)
pianeta (tpp)。s。每分钟XData = X +身体(tpp) (1)
pianeta (tpp)。s。每分钟YData = Y +身体(tpp) (2)
pianeta (tpp)。s。每分钟ZData = Z +身体(tpp) (3)
结束
drawnow;
暂停(0.1);
结束
结束
结束

答案(1)

艾哈迈德Redissi
艾哈迈德Redissi 2021年4月15日
你好,
我之前从事类似创建Matlab的太阳系。首先,我计算了x, y, z坐标为每个行星和月亮在不同的时间点。然后我出了行星或月球和插入一个暂停。然后,我删除了阴谋,所以我可以在下次的阴谋。
这是simiplified版本的代码,只有太阳,地球,月球和绘制的动画:
清晰的
clc
关闭所有
警告
%定义参数
数控= 1;%的周期数
thetadeg = 0:2.5:360 *数控;
θ=函数(thetadeg);
L =长度(θ);
s = 0;%保存动画(s = 1)
w = 0.1;%等待时间(s)
文件名=“sun_earth_moon.gif”;
circledeg = 0:2.5:360;
圆=函数(circledeg);
%的太阳
Rs = 0.25;%太阳半径
[xstar, ystar zstar] =球(50);
xstar = Rs * xstar;
ystar = Rs * ystar;
zstar = Rs * zstar;
%地球
Dp3 = 1;%地球轨道半径
Rp3 = 0.08;%地球半径
op3 = 1;%地球轨道周期
tiltp3 = 7;%地球轨道倾斜(度)
axisp3 =“y”;
款手机,yp3] = pol2cart(θ,Dp3);
zp3 = 0(1升);
款手机,yp3、zp3] = AxialTilt(款手机,yp3、zp3 tiltp3, axisp3);
%的月亮
Dm1 = 0.2;%月球轨道半径
1 = 0.04;%月球半径
opm1 = 0.08;%月球轨道周期
tiltm1 = 5.15;%月球轨道倾斜(度)
axism1 =“y”;
[xm1, ym1] = pol2cart(θ,Dm1);
zm1 = 0(1升);
[xm1, ym1 zm1] = AxialTilt (xm1、ym1 zm1, tiltm1, axism1);
lim = 1.5;
h =图;
%绘制轨道
orbitcolor =‘g’;%轨道颜色
plot3(款手机,yp3、zp3 orbitcolor)
轴(lim, lim lim, lim lim / 2, lim / 2))
集(gca),“xtick”[])
集(gca),“ytick”[])
集(gca),“ztick”[])
集(gca),“可见”,“关闭”)
集(gca),“颜色”,“k”)
集(gcf,“颜色”,“k”)
集(gcf,“位置”,(0,0,1680,1200))
视图(10、30)
持有
%绘制太阳
冲浪(xstar ystar zstar,“FaceColor”(1,0.5,0),“线型”,“没有”,“EdgeAlpha”,0);
i = 1: L
%绘制地球
[xcp3, ycp3 zcp3] =中心(θ(i), op3、Dp3 tiltp3, axisp3);
[xplanet3, yplanet3 zplanet3] = PlotSphere (xcp3、ycp3 zcp3, Rp3);
fp3 =冲浪(xplanet3 yplanet3 zplanet3,“FaceColor”[0,0,1],“线型”,“没有”,“EdgeAlpha”,0);
%绘制月球轨道
xmd1 = xm1 + xcp3;ymd1 = ym1 + ycp3;zmd1 = zm1 + zcp3;
pm1 = plot3 (xmd1 ymd1、zmd1 orbitcolor);
%绘制月球
[xcm1, ycm1 zcm1] = CenterPoint2(θ(i), op3、Dp3 tiltp3, axisp3, opm1, Dm1, tiltm1, axism1);
[xmoon1, ymoon1 zmoon1] = PlotSphere (xcm1、ycm1 zcm1, 1);
fm1 =冲浪(xmoon1 ymoon1 zmoon1,“FaceColor”(0.5,0.5,0.5),“线型”,“没有”,“EdgeAlpha”,0);
暂停(w)
如果s = = 1
%捕捉情节作为一个形象
帧= getframe (h);
我= frame2im(框架);
[imind,厘米]= rgb2ind (im, 256);
%写GIF文件
如果我= = 1
imwrite (imind,厘米,文件名,“gif”,“Loopcount”正,“延迟时间”,w);
其他的
imwrite (imind,厘米,文件名,“gif”,“写模式”,“添加”,“延迟时间”,w);
结束
结束
如果我~ =
删除(fp3);
删除(pm1);
删除(fm1);
结束
结束
持有
函数[xrot, yrot zrot] = AxialTilt (tiltdeg, x, y, z轴)
% x, y, z坐标前倾斜
% tiltdeg倾斜角度(度)
%轴-轴倾斜:' x ', ' y ',或' z '
% xrot, yrot zrot——坐标后倾斜
倾斜函数= (tiltdeg);
Rx =[1, 0, 0, 0,因为(倾斜),sin(倾斜);0,罪(倾斜),因为(倾斜)];
办法= (cos(倾斜),0,罪(倾斜);0,1,0;sin(倾斜),0,因为(倾斜)];
Rz = [cos(倾斜),sin(倾斜),0;罪(倾斜),因为(倾斜),0,0,0,1];
如果轴= =“x”
temp = Rx * [x, y, z];
elseif轴= =“y”
temp =一* [x, y, z];
elseif轴= =“z”
temp = Rz * [x, y, z];
结束
:xrot = temp (1);
yrot = temp (2:);
zrot = temp (3);
结束
函数[x, y, z] =中心(θ,op, D, tiltdeg轴)
倾斜函数= (tiltdeg);
频率= 1 / op;
如果轴= =“y”
x = D * cosθ(频率*)* cos(倾斜);
y = D * sinθ(频率*);
z = - d * cosθ(频率*)* sin(倾斜);
elseif轴= =“x”
x = D * cosθ(频率*);
y = D * sinθ(频率*)* cos(倾斜);
z = D * sinθ(频率* *罪(倾斜);
其他的
错误('请输入x或y轴作为字符串的)
结束
结束
函数[x, y, z] = PlotSphere (x0, y0, z0, R)
% x0, y0, z0 -球体中心坐标
% R -球体半径
% x, y, z -球体网格
[x, y, z] =球(50);
x = x0 + R *;
y = y0 + R * y;
z = z0 + R * z;
结束
函数[x, y, z] = CenterPoint2(θ,op1, D1、tiltdeg1 axis1中,《凤凰社》第2章,D2, tiltdeg2, axis2)
tilt1 =函数(tiltdeg1);
tilt2 =函数(tiltdeg2);
freq1 = 1 / op1;
freq2 = 1 / op2;
如果axis1中= =“y”
x = D1 * cosθ(freq1 *) * cos (tilt1);
y = D1 * sinθ(freq1 *);
z = d1 * cosθ(freq1 *) * sin (tilt1);
elseifaxis1中= =“x”
x = D1 * cosθ(freq1 *);
y = D1 * sinθ(freq1 *) * cos (tilt1);
z = D1 * sinθ(freq1 * *罪(tilt1);
其他的
错误('请输入x或y轴作为字符串的)
结束
如果axis2 = =“y”
x = x + D2 * cosθ(freq2 *) * cos (tilt2);
y = y + D2 * sinθ(freq2 *);
z = z-D2 * cosθ(freq2 *) * sin (tilt2);
elseifaxis2 = =“x”
x = x + D2 * cosθ(freq2 *);
y = y + D2 * sinθ(freq2 *) * cos (tilt2);
z = z + D2 * sinθ(freq2 *) *罪(tilt2);
其他的
错误('请输入x或y轴作为字符串的)
结束
结束

类别

找到更多的在地球和行星科学帮助中心文件交换

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!