提交 56f5a2b4 编写于 作者: 三月三net's avatar 三月三net

Python超人-宇宙模拟器

上级 6a6612d7
...@@ -194,6 +194,7 @@ class System(object): ...@@ -194,6 +194,7 @@ class System(object):
# m/s² = kg * m / m**3 # m/s² = kg * m / m**3
# km/s² = kg * m / m**3 / 1e9 # km/s² = kg * m / m**3 / 1e9
# acceleration = G * body2.mass * dx / (d ** 3) # acceleration = G * body2.mass * dx / (d ** 3)
if np.linalg.norm(r) > 0.0:
acceleration += (G * body2.mass * r / np.linalg.norm(r) ** 3) / 1e9 acceleration += (G * body2.mass * r / np.linalg.norm(r) ** 3) / 1e9
body1.acceleration = acceleration body1.acceleration = acceleration
......
from objs.diamond import Diamond
from objs.football import Football
from objs.satellite import Satellite
...@@ -12,29 +12,32 @@ from objs.obj import Obj ...@@ -12,29 +12,32 @@ from objs.obj import Obj
class Diamond(Obj): class Diamond(Obj):
""" """
钻石 钻石
密度:3.51g/cm³
""" """
def __init__(self, name="钻石", mass=5.97237e24, def __init__(self, name="钻石", mass=5.97237e24,
init_position=[0, 0, 0], init_position=[0, 0, 0],
init_velocity=[0, 0, 0], init_velocity=[0, 0, 0],
texture="earth1.jpg", size_scale=1.0, distance_scale=1.0, texture=None, size_scale=1.0, distance_scale=1.0,
ignore_mass=False, ignore_mass=False, density=3.51e3, color=(7, 0, 162),
trail_color=None, show_name=False, trail_color=None, show_name=False,
parent=None): parent=None, gravity_only_for=[]):
params = { params = {
"name": name, "name": name,
"mass": mass, "mass": mass,
"init_position": init_position, "init_position": init_position,
"init_velocity": init_velocity, "init_velocity": init_velocity,
"density": 5507.85, "density": density,
"color": (7, 0, 162), "color": color,
"texture": texture, "texture": texture,
"size_scale": size_scale, "size_scale": size_scale,
"distance_scale": distance_scale, "distance_scale": distance_scale,
"ignore_mass": ignore_mass, "ignore_mass": ignore_mass,
"trail_color": trail_color, "trail_color": trail_color,
"show_name": show_name, "show_name": show_name,
"parent": parent "parent": parent,
"gravity_only_for": gravity_only_for,
"model": "diamond"
} }
super().__init__(**params) super().__init__(**params)
......
# -*- coding:utf-8 -*-
# title :地球
# description :地球
# author :Python超人
# date :2023-02-11
# link :https://gitcode.net/pythoncr/
# python_version :3.8
# ==============================================================================
from objs.obj import Obj
class Football(Obj):
"""
足球
"""
def __init__(self, name="足球", mass=5.97237e24,
init_position=[0, 0, 0],
init_velocity=[0, 0, 0],
texture="football.jpg", size_scale=1.0, distance_scale=1.0,
ignore_mass=False, density=1e3, color=(7, 0, 162),
trail_color=None, show_name=False,
parent=None, gravity_only_for=[]):
params = {
"name": name,
"mass": mass,
"init_position": init_position,
"init_velocity": init_velocity,
"density": density,
"color": color,
"texture": texture,
"size_scale": size_scale,
"distance_scale": distance_scale,
"ignore_mass": ignore_mass,
"trail_color": trail_color,
"show_name": show_name,
"parent": parent,
"gravity_only_for": gravity_only_for,
"model": "sphere"
}
super().__init__(**params)
if __name__ == '__main__':
football = Football()
print(football)
# Blender v2.63 (sub 0) OBJ File: 'Satelite.blend'
# www.blender.org
mtllib Satelite.mtl
o Satelite
v 1.080000 0.164007 -2.500000
v 1.080000 -0.200000 2.500000
v 1.200001 0.500000 -2.499999
v 1.199999 0.500000 2.500001
v 0.600000 -0.042671 -2.500000
v 0.600000 -0.800000 2.500000
v 0.666667 1.000000 -2.499999
v 0.666665 1.000000 2.500000
v 1.080000 -0.200000 0.750000
v 1.200000 0.500000 0.750001
v 0.600000 -0.800000 0.750000
v 0.666666 1.000000 0.750001
v 0.600000 -0.800000 1.450000
v 0.666666 1.000000 1.450001
v 1.200000 0.500000 1.450001
v 1.080000 -0.200000 1.450000
v 0.981438 -0.183104 0.750000
v 1.101438 0.516896 0.750001
v 1.101437 0.516896 1.450001
v 0.981438 -0.183104 1.450000
v 1.007838 -0.029104 0.904000
v 1.075038 0.362896 0.904001
v 1.075037 0.362896 1.296001
v 1.007838 -0.029104 1.296000
v 1.041438 0.166896 0.820001
v 1.041438 0.166896 1.380001
v 1.089437 0.446896 1.100001
v 0.993438 -0.113104 1.100000
v 1.611643 -0.057962 0.976520
v 1.602571 -0.110882 0.923600
v 1.663051 0.241918 0.923601
v 1.663051 0.241918 1.276401
v 1.602571 -0.110882 1.276400
v 1.632811 0.065518 0.848001
v 1.632811 0.065518 1.352001
v 1.676011 0.317518 1.100001
v 1.589611 -0.186482 1.100000
v 2.597266 -0.226925 0.976521
v 1.653979 0.188998 0.976521
v 1.653979 0.188998 1.223481
v 1.611643 -0.057962 1.223480
v 1.632811 0.065518 0.923601
v 1.632811 0.065518 1.276401
v 1.663051 0.241918 1.100001
v 1.602571 -0.110882 1.100000
v 2.639601 0.020035 0.976521
v 2.639601 0.020035 1.223481
v 2.597266 -0.226925 1.223481
v 2.618433 -0.103445 0.923601
v 2.618433 -0.103445 1.276401
v 2.648674 0.072955 1.100001
v 2.588193 -0.279845 1.100000
v 0.510666 -0.010000 2.500000
v 0.510666 0.270000 2.500001
v 0.307999 -0.250000 2.500000
v 0.307999 0.470000 2.500000
v 0.510666 -0.010000 3.300000
v 0.510666 0.270000 3.300001
v 0.307999 -0.250000 3.300000
v 0.307999 0.470000 3.300001
v 0.127158 -0.020637 3.300000
v 0.127158 0.240637 3.300001
v 0.187055 0.110000 3.300000
v 0.127150 -0.020640 7.300000
v 0.127157 -0.020638 3.900000
v 0.127157 0.240636 3.900001
v 0.187054 0.109999 3.900001
v 0.127155 0.051473 3.980312
v 0.127151 -0.020640 6.900000
v 0.127151 0.240634 6.900001
v 0.187047 0.109997 6.900001
v 2.127155 0.251473 3.980313
v 0.127150 0.240633 7.300001
v 0.187046 0.109997 7.300001
v 0.127155 0.168524 3.980314
v 0.127153 0.051473 6.819687
v 0.127153 0.168523 6.819687
v 2.127155 0.368524 3.980315
v 2.127153 0.251473 6.819688
v 2.127153 0.368523 6.819688
v 2.603616 -0.189881 1.013565
v 2.633251 -0.017009 1.013565
v 2.633251 -0.017009 1.186437
v 2.603616 -0.189881 1.186437
v 2.702178 -0.206777 1.013565
v 2.731813 -0.033905 1.013565
v 2.731813 -0.033905 1.186437
v 2.702178 -0.206777 1.186437
v 6.644668 -0.882630 1.013567
v 6.674303 -0.709758 1.013568
v 6.674303 -0.709758 1.186440
v 6.644668 -0.882630 1.186440
v 0.622222 0.204886 -2.500000
v 0.644445 0.500000 -2.500000
v 1.200001 0.500000 -2.899999
v 0.666668 1.000000 -2.899999
v 0.644445 0.500000 -2.900000
v 1.378587 0.500000 -2.499999
v 1.378586 0.500000 2.500001
v 0.845254 1.000000 -2.499999
v 0.845252 1.000000 2.500000
v 1.378586 0.500000 0.750001
v 0.845253 1.000000 0.750001
v 0.845252 1.000000 1.450001
v 1.378586 0.500000 1.450001
v 1.378587 0.500000 -2.899999
v 0.845254 1.000000 -2.899999
v 0.600000 -0.391557 -0.333334
v 0.600000 -0.139114 -1.416667
v 3.127154 0.451473 4.690157
v 3.127154 0.568523 4.690159
v 3.127154 0.451473 6.109845
v 3.127154 0.568523 6.109845
v 0.951222 0.220944 -3.000000
v 1.017902 0.363938 -2.999999
v 0.721624 0.328007 -3.000000
v 0.788304 0.471001 -3.000000
v 0.788302 0.471000 -2.500000
v 0.721623 0.328006 -2.500000
v 1.017900 0.363937 -2.499999
v 0.951221 0.220942 -2.500000
v 1.011702 0.350642 -3.255782
v 1.058851 0.451754 -3.144217
v 0.782104 0.457705 -3.255782
v 0.829253 0.558818 -3.144217
v 1.255805 1.053953 -3.929417
v 1.274665 1.094398 -3.884791
v 1.163966 1.096778 -3.929417
v 1.182826 1.137223 -3.884791
v 3.096427 -0.274363 -1.665991
v 2.702178 -0.206777 -1.398043
v 3.126062 -0.101491 -1.665979
v 2.731813 -0.033905 -1.398033
v 3.126062 -0.101491 3.865923
v 2.731813 -0.033905 3.597966
v 3.096427 -0.274363 3.865915
v 2.702178 -0.206777 3.597960
v 6.250419 -0.815044 -1.665921
v 6.644668 -0.882630 -1.397964
v 6.280054 -0.642172 -1.665909
v 6.674303 -0.709758 -1.397954
v 6.280054 -0.642172 3.865993
v 6.674303 -0.709758 3.598046
v 6.250419 -0.815044 3.865985
v 6.644668 -0.882630 3.598039
v 0.127156 -0.020638 4.650000
v 0.127152 -0.020639 6.150000
v 0.127152 0.240634 6.150001
v 0.127156 0.240635 4.650001
v 0.127154 0.051473 4.690156
v 0.127154 0.051473 6.109843
v 0.127154 0.168523 6.109844
v 0.127154 0.168523 4.690157
v 2.127154 0.251473 4.690156
v 2.127154 0.251473 6.109844
v 2.127154 0.368523 6.109845
v 2.127154 0.368523 4.690158
v -1.080000 0.164007 -2.500000
v -1.080000 -0.200000 2.500000
v -1.200001 0.500000 -2.499999
v -1.199999 0.500000 2.500001
v -0.600000 -0.042671 -2.500000
v -0.600000 -0.800000 2.500000
v -0.666667 1.000000 -2.499999
v -0.666665 1.000000 2.500000
v -1.080000 -0.200000 0.750000
v -1.200000 0.500000 0.750001
v -0.600000 -0.800000 0.750000
v -0.666666 1.000000 0.750001
v -0.600000 -0.800000 1.450000
v -0.666666 1.000000 1.450001
v -1.200000 0.500000 1.450001
v -1.080000 -0.200000 1.450000
v -0.981438 -0.183104 0.750000
v -1.101438 0.516896 0.750001
v -1.101437 0.516896 1.450001
v -0.981438 -0.183104 1.450000
v -1.007838 -0.029104 0.904000
v -1.075038 0.362896 0.904001
v -1.075037 0.362896 1.296001
v -1.007838 -0.029104 1.296000
v -1.041438 0.166896 0.820001
v -1.041438 0.166896 1.380001
v -1.089437 0.446896 1.100001
v -0.993438 -0.113104 1.100000
v -1.611643 -0.057962 0.976520
v -1.602571 -0.110882 0.923600
v -1.663051 0.241918 0.923601
v -1.663051 0.241918 1.276401
v -1.602571 -0.110882 1.276400
v -1.632811 0.065518 0.848001
v -1.632811 0.065518 1.352001
v -1.676011 0.317518 1.100001
v -1.589611 -0.186482 1.100000
v -2.597266 -0.226925 0.976521
v -1.653979 0.188998 0.976521
v -1.653979 0.188998 1.223481
v -1.611643 -0.057962 1.223480
v -1.632811 0.065518 0.923601
v -1.632811 0.065518 1.276401
v -1.663051 0.241918 1.100001
v -1.602571 -0.110882 1.100000
v -0.000000 -0.042671 -2.500000
v -2.639601 0.020035 0.976521
v -2.639601 0.020035 1.223481
v -2.597266 -0.226925 1.223481
v -2.618433 -0.103445 0.923601
v -2.618433 -0.103445 1.276401
v -2.648674 0.072955 1.100001
v -2.588193 -0.279845 1.100000
v -0.510666 -0.010000 2.500000
v 0.000000 -0.800000 2.500000
v -0.000000 1.000000 -2.500000
v 0.000001 1.000000 2.500000
v -0.000000 -0.800000 0.750000
v 0.000001 1.000000 0.750000
v 0.000000 -0.800000 1.450000
v 0.000001 1.000000 1.450000
v -0.510666 0.270000 2.500001
v -0.307999 -0.250000 2.500000
v -0.307999 0.470000 2.500000
v 0.000000 -0.250000 2.500000
v 0.000000 0.470000 2.500000
v -0.510666 -0.010000 3.300000
v -0.510666 0.270000 3.300001
v -0.307999 -0.250000 3.300000
v -0.307999 0.470000 3.300001
v 0.000000 -0.250000 3.300000
v 0.000000 0.470000 3.300000
v -0.127158 -0.020637 3.300000
v -0.127158 0.240637 3.300001
v 0.000000 -0.045520 3.300000
v 0.000000 0.265520 3.300000
v -0.187055 0.110000 3.300000
v -0.127150 -0.020640 7.300000
v -0.127157 -0.020638 3.900000
v -0.127157 0.240636 3.900001
v 0.000000 -0.045521 3.900000
v 0.000000 0.265519 3.900000
v -0.187054 0.109999 3.900001
v -0.127155 0.051473 3.980312
v -0.127151 -0.020640 6.900000
v -0.127151 0.240634 6.900001
v 0.000000 -0.045523 6.900000
v 0.000000 0.265517 6.900000
v -0.187047 0.109997 6.900001
v -2.127155 0.251473 3.980313
v -0.127150 0.240633 7.300001
v 0.000000 -0.045523 7.300000
v 0.000000 0.265517 7.300000
v -0.187046 0.109997 7.300001
v 0.000000 0.109997 7.300000
v -0.127155 0.168524 3.980314
v -0.127153 0.051473 6.819687
v -0.127153 0.168523 6.819687
v -2.127155 0.368524 3.980315
v -2.127153 0.251473 6.819688
v -2.127153 0.368523 6.819688
v -2.603616 -0.189881 1.013565
v -2.633251 -0.017009 1.013565
v -2.633251 -0.017009 1.186437
v -2.603616 -0.189881 1.186437
v -2.702178 -0.206777 1.013565
v -2.731813 -0.033905 1.013565
v -2.731813 -0.033905 1.186437
v -2.702178 -0.206777 1.186437
v -6.644668 -0.882630 1.013567
v -6.674303 -0.709758 1.013568
v -6.674303 -0.709758 1.186440
v -6.644668 -0.882630 1.186440
v -0.622222 0.204886 -2.500000
v -0.644445 0.500000 -2.500000
v 0.000000 0.204886 -2.500000
v 0.000000 0.500000 -2.500000
v -1.200001 0.500000 -2.899999
v -0.666668 1.000000 -2.899999
v 0.000000 1.000000 -2.900000
v -0.644445 0.500000 -2.900000
v 0.000000 0.500000 -2.900000
v -1.378587 0.500000 -2.499999
v -1.378586 0.500000 2.500001
v -0.845254 1.000000 -2.499999
v -0.845252 1.000000 2.500000
v -1.378586 0.500000 0.750001
v -0.845253 1.000000 0.750001
v -0.845252 1.000000 1.450001
v -1.378586 0.500000 1.450001
v -1.378587 0.500000 -2.899999
v -0.845254 1.000000 -2.899999
v -0.600000 -0.391557 -0.333334
v -0.600000 -0.139114 -1.416667
v 0.000000 -0.391557 -0.333334
v 0.000000 -0.139114 -1.416667
v -3.127154 0.451473 4.690157
v -3.127154 0.568523 4.690159
v -3.127154 0.451473 6.109845
v -3.127154 0.568523 6.109845
v -0.951222 0.220944 -3.000000
v -1.017902 0.363938 -2.999999
v -0.721624 0.328007 -3.000000
v -0.788304 0.471001 -3.000000
v -0.788302 0.471000 -2.500000
v -0.721623 0.328006 -2.500000
v -1.017900 0.363937 -2.499999
v -0.951221 0.220942 -2.500000
v -1.011702 0.350642 -3.255782
v -1.058851 0.451754 -3.144217
v -0.782104 0.457705 -3.255782
v -0.829253 0.558818 -3.144217
v -1.255805 1.053953 -3.929417
v -1.274665 1.094398 -3.884791
v -1.163966 1.096778 -3.929417
v -1.182826 1.137223 -3.884791
v -3.096427 -0.274363 -1.665991
v -2.702178 -0.206777 -1.398043
v -3.126062 -0.101491 -1.665979
v -2.731813 -0.033905 -1.398033
v -3.126062 -0.101491 3.865923
v -2.731813 -0.033905 3.597966
v -3.096427 -0.274363 3.865915
v -2.702178 -0.206777 3.597960
v -6.250419 -0.815044 -1.665921
v -6.644668 -0.882630 -1.397964
v -6.280054 -0.642172 -1.665909
v -6.674303 -0.709758 -1.397954
v -6.280054 -0.642172 3.865993
v -6.674303 -0.709758 3.598046
v -6.250419 -0.815044 3.865985
v -6.644668 -0.882630 3.598039
v 0.000000 0.265519 4.650000
v 0.000000 0.265518 6.150000
v 0.000000 -0.045522 6.150000
v 0.000000 -0.045521 4.650000
v -0.127156 -0.020638 4.650000
v -0.127152 -0.020639 6.150000
v -0.127152 0.240634 6.150001
v -0.127156 0.240635 4.650001
v -0.127154 0.051473 4.690156
v -0.127154 0.051473 6.109843
v -0.127154 0.168523 6.109844
v -0.127154 0.168523 4.690157
v -2.127154 0.251473 4.690156
v -2.127154 0.251473 6.109844
v -2.127154 0.368523 6.109845
v -2.127154 0.368523 4.690158
vt 0.104066 0.800688
vt 0.104343 0.864221
vt 0.010459 0.864695
vt 0.010136 0.801195
vt 0.009741 0.732489
vt 0.103629 0.731949
vt 0.166933 0.863992
vt 0.457994 0.864588
vt 0.457959 0.880580
vt 0.166945 0.879972
vt 0.514261 0.731368
vt 0.567974 0.731368
vt 0.541834 0.780606
vt 0.514261 0.780606
vt 0.493933 0.814917
vt 0.493816 0.864670
vt 0.458110 0.814833
vt 0.458061 0.832638
vt 0.166827 0.800352
vt 0.461171 0.785929
vt 0.364249 0.776050
vt 0.104410 0.880184
vt 0.166209 0.731511
vt 0.573942 0.892509
vt 0.621688 0.847748
vt 0.637676 0.847748
vt 0.589930 0.892509
vt 0.703589 0.943242
vt 0.699226 0.882762
vt 0.703495 0.878199
vt 0.707710 0.947120
vt 0.695478 0.912461
vt 0.687235 0.895806
vt 0.643905 0.942579
vt 0.639614 0.947120
vt 0.634271 0.877143
vt 0.639712 0.882279
vt 0.655958 0.929599
vt 0.647751 0.912959
vt 0.672882 0.936881
vt 0.689330 0.929642
vt 0.653910 0.895813
vt 0.670320 0.888562
vt 0.600646 0.927008
vt 0.581843 0.927205
vt 0.577953 0.917422
vt 0.604815 0.917140
vt 0.623340 0.963727
vt 0.603888 0.982644
vt 0.599998 0.972861
vt 0.613614 0.959619
vt 0.558501 0.936339
vt 0.568227 0.940447
vt 0.568227 0.959440
vt 0.558501 0.963472
vt 0.613614 0.940626
vt 0.623340 0.936594
vt 0.577026 0.982926
vt 0.581195 0.973058
vt 0.541834 0.845062
vt 0.559977 0.827158
vt 0.610945 0.785082
vt 0.559977 0.802091
vt 0.713545 0.695342
vt 0.712901 0.627158
vt 0.751863 0.626789
vt 0.752508 0.694974
vt 0.862647 0.447967
vt 0.796997 0.447967
vt 0.796997 0.344569
vt 0.862647 0.344568
vt 0.514261 0.845062
vt 0.514261 0.892509
vt 0.715203 0.973714
vt 0.716240 0.958072
vt 0.754781 0.957708
vt 0.754826 0.973567
vt 0.714686 0.815982
vt 0.713975 0.740799
vt 0.752938 0.740430
vt 0.753649 0.815613
vt 0.862647 0.836945
vt 0.796997 0.836945
vt 0.796997 0.516900
vt 0.862647 0.516900
vt 0.519823 0.659399
vt 0.541437 0.636703
vt 0.572776 0.637032
vt 0.689595 0.691525
vt 0.689595 0.736645
vt 0.656937 0.768873
vt 0.656937 0.652851
vt 0.607305 0.652851
vt 0.627796 0.689811
vt 0.607305 0.685801
vt 0.637447 0.710862
vt 0.607305 0.735923
vt 0.627796 0.731913
vt 0.607305 0.768873
vt 0.762763 0.610129
vt 0.757936 0.620655
vt 0.757936 0.599601
vt 0.751464 0.614844
vt 0.751464 0.605412
vt 0.675308 0.833158
vt 0.704790 0.838928
vt 0.704789 0.802868
vt 0.661420 0.802868
vt 0.704790 0.766808
vt 0.675308 0.772578
vt 0.693377 0.666053
vt 0.684817 0.647365
vt 0.693390 0.628684
vt 0.773291 0.615703
vt 0.778656 0.615702
vt 0.787815 0.524016
vt 0.782450 0.524016
vt 0.704873 0.639002
vt 0.704868 0.655743
vt 0.764137 0.671917
vt 0.769502 0.671916
vt 0.782451 0.884856
vt 0.787815 0.884857
vt 0.778672 0.793190
vt 0.773307 0.793189
vt 0.573856 0.713452
vt 0.542516 0.713124
vt 0.595469 0.690756
vt 0.519823 0.691055
vt 0.595469 0.659101
vt 0.547055 0.701710
vt 0.584122 0.686053
vt 0.494069 0.772061
vt 0.494069 0.756585
vt 0.503021 0.756585
vt 0.503021 0.772061
vt 0.532070 0.672891
vt 0.541655 0.695583
vt 0.538916 0.702470
vt 0.525223 0.670053
vt 0.576376 0.647686
vt 0.590069 0.680103
vt 0.583222 0.677265
vt 0.573637 0.654573
vt 0.568236 0.648446
vt 0.531170 0.664103
vt 0.265099 0.367310
vt 0.249623 0.367311
vt 0.249616 0.009219
vt 0.265091 0.009219
vt 0.505568 0.736418
vt 0.505567 0.761051
vt 0.491523 0.761051
vt 0.491523 0.736417
vt 0.491523 0.792229
vt 0.491523 0.767595
vt 0.505567 0.767595
vt 0.505568 0.792228
vt 0.503022 0.725407
vt 0.503021 0.740883
vt 0.494069 0.740883
vt 0.494069 0.725407
vt 0.966928 0.474435
vt 0.993346 0.474434
vt 0.993346 0.500472
vt 0.966929 0.500473
vt 0.265099 0.367315
vt 0.249623 0.367315
vt 0.249623 0.725407
vt 0.265099 0.725407
vt 0.686646 0.972297
vt 0.713667 0.992412
vt 0.680183 0.993254
vt 0.691072 0.984628
vt 0.705371 0.989673
vt 0.862647 0.876335
vt 0.796996 0.876335
vt 0.754826 0.992421
vt 0.915167 0.925573
vt 0.860458 0.925573
vt 0.796996 0.925572
vt 0.458246 0.757118
vt 0.494069 0.757202
vt 0.010540 0.880661
vt 0.952224 0.447967
vt 0.880233 0.447967
vt 0.880233 0.344568
vt 0.952224 0.344568
vt 0.952224 0.836945
vt 0.880233 0.836945
vt 0.880233 0.516900
vt 0.952224 0.516899
vt 0.952224 0.876335
vt 0.880233 0.876335
vt 0.932753 0.925573
vt 0.493780 0.880663
vt 0.266101 0.758994
vt 0.715472 0.888019
vt 0.754224 0.887653
vt 0.769511 0.736983
vt 0.764146 0.736983
vt 0.434465 0.917397
vt 0.431423 0.929482
vt 0.392847 0.928425
vt 0.393181 0.916252
vt 0.409176 0.760004
vt 0.409176 0.737325
vt 0.453937 0.737325
vt 0.453937 0.760004
vt 0.393101 0.895967
vt 0.434636 0.895144
vt 0.449567 0.896177
vt 0.449289 0.916691
vt 0.709208 0.981408
vt 0.694791 0.975504
vt 0.431742 0.882891
vt 0.392847 0.883694
vt 0.293313 0.753200
vt 0.293313 0.744128
vt 0.382937 0.737325
vt 0.382937 0.760004
vt 0.452295 0.884324
vt 0.451661 0.928520
vt 0.530975 0.903720
vt 0.536509 0.903922
vt 0.535926 0.912337
vt 0.530685 0.911975
vt 0.531642 0.898695
vt 0.531100 0.916899
vt 0.220264 0.974283
vt 0.220265 0.989827
vt 0.006550 0.989838
vt 0.006549 0.974295
vt 0.546549 0.974293
vt 0.546549 0.989838
vt 0.262933 0.989828
vt 0.262933 0.974283
vt 0.033729 0.009223
vt 0.033729 0.367315
vt 0.009741 0.045033
vt 0.009741 0.331507
vt 0.033736 0.367315
vt 0.033729 0.725407
vt 0.009748 0.403125
vt 0.009741 0.689597
vt 0.264565 0.955497
vt 0.264565 0.939953
vt 0.548168 0.939946
vt 0.548168 0.955491
vt 0.504974 0.045022
vt 0.504973 0.331496
vt 0.480985 0.009214
vt 0.480986 0.367305
vt 0.008168 0.955491
vt 0.008168 0.939946
vt 0.221896 0.939952
vt 0.221896 0.955497
vt 0.504974 0.689598
vt 0.504980 0.403124
vt 0.480992 0.367315
vt 0.480985 0.725407
vt 0.993364 0.863706
vt 0.966946 0.863706
vt 0.966928 0.111209
vt 0.993346 0.111211
vt 0.993366 0.936223
vt 0.966948 0.936223
vt 0.966930 0.038692
vt 0.993348 0.038694
vt 0.568521 0.280448
vt 0.504974 0.189152
vt 0.568521 0.189152
vt 0.699068 0.564191
vt 0.699068 0.475634
vt 0.760709 0.475634
vt 0.695615 0.280449
vt 0.695615 0.189153
vt 0.759163 0.189153
vt 0.579885 0.605416
vt 0.522699 0.605419
vt 0.516228 0.599609
vt 0.576650 0.599607
vt 0.575786 0.475634
vt 0.514145 0.475635
vt 0.514145 0.301094
vt 0.575786 0.301094
vt 0.694265 0.605412
vt 0.697500 0.599601
vt 0.699068 0.301093
vt 0.760709 0.301093
vt 0.694274 0.588491
vt 0.751467 0.588493
vt 0.757938 0.594303
vt 0.697509 0.594301
vt 0.695616 0.009214
vt 0.759163 0.009214
vt 0.522700 0.588493
vt 0.579896 0.588491
vt 0.576661 0.594302
vt 0.516228 0.594303
vt 0.504974 0.009214
vt 0.568521 0.009214
vt 0.575786 0.564191
vt 0.899109 0.937273
vt 0.915688 0.935782
vt 0.921207 0.986948
vt 0.902786 0.988604
vt 0.799976 0.933741
vt 0.816330 0.935782
vt 0.810810 0.986948
vt 0.792639 0.984680
vt 0.829231 0.988604
vt 0.832909 0.937273
vt 0.884317 0.989591
vt 0.882486 0.938161
vt 0.866009 0.989936
vt 0.847700 0.989591
vt 0.849531 0.938161
vt 0.866009 0.938472
vt 0.939378 0.984679
vt 0.932041 0.933741
vt 0.780116 0.072681
vt 0.780116 0.048940
vt 0.954686 0.048940
vt 0.954686 0.072681
vt 0.954686 0.096423
vt 0.780116 0.096422
vt 0.954686 0.119928
vt 0.954686 0.143434
vt 0.780116 0.143433
vt 0.780116 0.119928
vt 0.825214 0.237542
vt 0.853335 0.237542
vt 0.853335 0.309160
vt 0.825213 0.309160
vt 0.878401 0.237542
vt 0.878401 0.309160
vt 0.780116 0.167175
vt 0.954686 0.167175
vt 0.954686 0.025434
vt 0.780116 0.025434
vt 0.954686 0.190916
vt 0.780116 0.190916
vt 0.780116 0.214421
vt 0.954686 0.214422
vt 0.931465 0.309160
vt 0.903891 0.309160
vt 0.903891 0.237542
vt 0.931464 0.237542
vt 0.797641 0.237542
vt 0.797640 0.309160
vt 0.313660 0.935563
vt 0.313827 0.923627
vt 0.369336 0.923819
vt 0.369329 0.935832
vt 0.369339 0.910514
vt 0.313990 0.910441
vt 0.369300 0.885241
vt 0.369323 0.897222
vt 0.313910 0.897260
vt 0.313818 0.885348
vt 0.009800 0.930968
vt 0.009769 0.920083
vt 0.043453 0.919716
vt 0.043405 0.930873
vt 0.041657 0.908449
vt 0.009741 0.908076
vt 0.043866 0.886092
vt 0.043683 0.897229
vt 0.010094 0.896090
vt 0.010370 0.885240
vt 0.109515 0.885942
vt 0.109485 0.897465
vt 0.109289 0.920720
vt 0.109126 0.932250
vt 0.244795 0.933824
vt 0.245002 0.922006
vt 0.245149 0.898193
vt 0.245089 0.886388
usemtl Satelite_Satelite
s off
f 16/1 15/2 4/3 2/4
f 16/1 2/4 6/5 13/6
f 10/7 3/8 98/9 102/10
f 212/11 6/12 55/13 222/14
f 97/15 95/16 3/8 94/17
f 1/18 3/8 10/7 9/19
f 5/20 1/18 109/21
f 15/2 10/7 102/10 105/22
f 9/19 16/1 13/6 11/23
f 8/24 4/25 99/26 101/27
f 18/28 17/29 9/30 10/31
f 25/32 21/33 17/29
f 19/34 18/28 10/31 15/35
f 16/36 9/30 17/29 20/37
f 15/35 16/36 20/37 19/34
f 23/38 19/34 26/39
f 27/40 22/41 18/28
f 24/42 20/37 28/43
f 22/41 25/32 18/28
f 18/28 25/32 17/29
f 20/37 24/42 26/39
f 19/34 20/37 26/39
f 23/38 27/40 19/34
f 19/34 27/40 18/28
f 17/29 21/33 28/43
f 20/37 17/29 28/43
f 45/44 41/45 33/46 37/47
f 34/48 31/49 39/50 42/51
f 35/52 33/46 41/45 43/53
f 43/53 40/54 32/55 35/52
f 42/51 29/56 30/57 34/48
f 37/47 30/57 29/56 45/44
f 36/58 32/55 40/54 44/59
f 44/59 39/50 31/49 36/58
f 56/60 54/61 4/25 8/24
f 6/12 2/62 53/63 55/13
f 13/64 6/65 212/66 217/67
f 14/68 218/69 214/70 8/71
f 223/72 56/60 8/24 214/73
f 93/74 5/75 203/76 273/77
f 108/78 11/79 215/80 292/81
f 7/82 213/83 216/84 12/85
f 11/79 13/64 217/67 215/80
f 12/85 216/84 218/69 14/68
f 48/86 52/87 38/88
f 2/62 4/25 54/61 53/63
f 57/89 58/90 60/91 59/92
f 228/93 59/92 61/94 232/95
f 63/96 61/94 59/92
f 233/97 62/98 60/91 229/99
f 62/98 63/96 60/91
f 60/91 63/96 59/92
f 67/100 66/101 65/102
f 75/103 68/104 65/102 66/101
f 73/105 250/106 252/107
f 74/108 73/105 252/107
f 74/108 252/107 249/109
f 74/108 249/109 64/110
f 70/111 71/112 69/113
f 78/114 72/115 68/116 75/117
f 70/111 69/113 76/118 77/119
f 111/120 110/121 72/115 78/114
f 77/122 76/123 79/124 80/125
f 51/126 47/127 46/128
f 47/127 50/129 48/86
f 49/130 46/128 38/88
f 46/128 47/127 83/131 82/132
f 82/133 83/134 87/135 86/136
f 84/137 83/138 47/139 48/140
f 38/141 46/142 82/143 81/144
f 81/145 84/146 48/86 38/88
f 89/147 92/148 88/149 85/150
f 88/151 87/152 83/153 84/154
f 81/155 82/156 86/157 85/158
f 85/159 88/160 84/161 81/162
f 89/163 90/164 91/165 92/166
f 86/167 87/168 91/169 90/170
f 1/171 5/75 93/74
f 94/172 3/173 120/174 118/175
f 213/83 7/82 96/176 277/177
f 94/172 93/74 273/77 274/178
f 96/176 95/179 97/180
f 96/176 97/180 279/181 277/177
f 94/17 274/182 279/183 97/15
f 105/22 99/184 4/3 15/2
f 105/185 104/186 101/187 99/188
f 98/189 100/190 103/191 102/192
f 102/192 103/191 104/186 105/185
f 100/190 98/189 106/193 107/194
f 104/186 103/191 12/85 14/68
f 107/194 106/195 95/179 96/176
f 103/191 100/190 7/82 12/85
f 14/68 8/71 101/187 104/186
f 106/196 98/9 3/8 95/16
f 100/190 107/194 96/176 7/82
f 9/19 11/23 108/197
f 1/18 9/19 108/197 109/21
f 5/75 109/198 293/199 203/76
f 109/198 108/78 292/81 293/199
f 80/125 79/124 112/200 113/201
f 117/202 116/203 119/204 118/205
f 116/206 114/207 121/208 119/209
f 118/205 120/210 115/211 117/202
f 117/202 115/211 123/212 125/213
f 118/175 119/214 93/74 94/172
f 1/171 93/74 119/214 121/215
f 3/173 1/171 121/215 120/174
f 114/216 115/211 120/210 121/217
f 128/218 126/219 122/220 124/221
f 122/222 123/212 115/211 114/216
f 125/213 124/223 116/203 117/202
f 124/221 122/220 114/207 116/206
f 127/224 126/225 128/226 129/227
f 125/213 123/212 127/224 129/227
f 126/228 127/224 123/212 122/222
f 129/227 128/229 124/223 125/213
f 137/230 135/231 87/232 88/233
f 144/234 142/235 134/236 136/237
f 137/238 88/149 92/148
f 137/238 92/148 145/239
f 136/240 137/238 145/239
f 144/241 136/240 145/239
f 91/169 87/168 135/242
f 143/243 91/169 135/242
f 134/244 143/243 135/242
f 134/244 142/245 143/243
f 130/246 132/247 140/248 138/249
f 130/250 138/251 131/252
f 138/251 139/253 131/252
f 139/253 85/150 131/252
f 139/253 89/147 85/150
f 85/254 86/255 133/256 131/257
f 140/258 132/259 133/260
f 140/258 133/260 141/261
f 133/260 86/167 141/261
f 86/167 90/170 141/261
f 92/166 91/165 143/262 145/263
f 139/264 141/265 90/164 89/163
f 136/237 134/236 135/231 137/230
f 145/263 143/262 142/266 144/267
f 131/257 133/256 132/247 130/246
f 141/265 139/264 138/268 140/269
f 112/270 79/271 155/272
f 113/273 156/274 80/275
f 110/276 154/277 72/278
f 151/279 76/280 69/281 147/282
f 157/283 78/284 75/285 153/286
f 110/121 111/120 113/201 112/200
f 68/104 150/287 146/288 65/102
f 80/275 156/274 152/289 77/290
f 153/291 75/292 66/293 149/294
f 72/278 154/277 150/295 68/296
f 77/297 152/298 148/299 70/300
f 155/272 79/271 76/301 151/302
f 146/288 150/287 151/279 147/282
f 148/299 152/298 153/291 149/294
f 152/289 156/274 157/283 153/286
f 150/295 154/277 155/272 151/302
f 156/274 113/273 111/303 157/283
f 111/303 78/284 157/283
f 154/277 110/276 112/270 155/272
f 173/1 159/4 161/3 172/2
f 173/1 170/6 163/5 159/4
f 167/7 284/10 280/9 160/8
f 212/11 222/14 220/13 163/12
f 278/15 272/17 160/8 275/16
f 158/18 166/19 167/7 160/8
f 162/20 291/21 158/18
f 172/2 287/22 284/10 167/7
f 166/19 168/23 170/6 173/1
f 165/24 283/27 281/26 161/25
f 175/28 167/31 166/30 174/29
f 182/32 174/29 178/33
f 176/34 172/35 167/31 175/28
f 173/36 177/37 174/29 166/30
f 172/35 176/34 177/37 173/36
f 180/38 183/39 176/34
f 184/40 175/28 179/41
f 181/42 185/43 177/37
f 179/41 175/28 182/32
f 175/28 174/29 182/32
f 177/37 183/39 181/42
f 176/34 183/39 177/37
f 180/38 176/34 184/40
f 176/34 175/28 184/40
f 174/29 185/43 178/33
f 177/37 185/43 174/29
f 202/44 194/47 190/46 198/45
f 191/48 199/51 196/50 188/49
f 192/52 200/53 198/45 190/46
f 200/53 192/52 189/55 197/54
f 199/51 191/48 187/57 186/56
f 194/47 202/44 186/56 187/57
f 193/58 201/59 197/54 189/55
f 201/59 193/58 188/49 196/50
f 221/60 165/24 161/25 219/61
f 163/12 220/13 211/63 159/62
f 170/64 217/67 212/66 163/65
f 171/68 165/71 214/70 218/69
f 223/72 214/73 165/24 221/60
f 271/74 273/77 203/76 162/75
f 290/78 292/81 215/80 168/79
f 164/82 169/85 216/84 213/83
f 168/79 215/80 217/67 170/64
f 169/85 171/68 218/69 216/84
f 206/86 195/88 210/87
f 159/62 211/63 219/61 161/25
f 224/89 226/92 227/91 225/90
f 228/93 232/95 230/94 226/92
f 234/96 226/92 230/94
f 233/97 229/99 227/91 231/98
f 231/98 227/91 234/96
f 227/91 226/92 234/96
f 240/100 236/102 237/101
f 253/103 237/101 236/102 241/104
f 252/107 250/106 248/105
f 251/108 252/107 248/105
f 251/108 235/110 252/107
f 235/110 249/109 252/107
f 243/111 242/113 246/112
f 256/114 253/117 241/116 247/115
f 243/111 255/119 254/118 242/113
f 295/120 256/114 247/115 294/121
f 255/122 258/125 257/124 254/123
f 209/126 204/128 205/127
f 205/127 206/86 208/129
f 207/130 195/88 204/128
f 204/128 260/132 261/131 205/127
f 260/133 264/136 265/135 261/134
f 262/137 206/140 205/139 261/138
f 195/141 259/144 260/143 204/142
f 259/145 195/88 206/86 262/146
f 267/147 263/150 266/149 270/148
f 266/151 262/154 261/153 265/152
f 259/155 263/158 264/157 260/156
f 263/159 259/162 262/161 266/160
f 267/163 270/166 269/165 268/164
f 264/167 268/170 269/169 265/168
f 158/171 271/74 162/75
f 272/172 302/175 304/174 160/173
f 213/83 277/177 276/176 164/82
f 272/172 274/178 273/77 271/74
f 276/176 278/180 275/179
f 276/176 277/177 279/181 278/180
f 272/17 278/15 279/183 274/182
f 287/22 172/2 161/3 281/184
f 287/185 281/188 283/187 286/186
f 280/189 284/192 285/191 282/190
f 284/192 287/185 286/186 285/191
f 282/190 289/194 288/193 280/189
f 286/186 171/68 169/85 285/191
f 289/194 276/176 275/179 288/195
f 285/191 169/85 164/82 282/190
f 171/68 286/186 283/187 165/71
f 288/196 275/16 160/8 280/9
f 282/190 164/82 276/176 289/194
f 166/19 290/197 168/23
f 158/18 291/21 290/197 166/19
f 162/75 203/76 293/199 291/198
f 291/198 293/199 292/81 290/78
f 258/125 297/201 296/200 257/124
f 301/202 302/205 303/204 300/203
f 300/206 303/209 305/208 298/207
f 302/205 301/202 299/211 304/210
f 301/202 309/213 307/212 299/211
f 302/175 272/172 271/74 303/214
f 303/214 271/74 158/171 305/215
f 305/215 158/171 160/173 304/174
f 298/216 305/217 304/210 299/211
f 312/218 308/221 306/220 310/219
f 306/222 298/216 299/211 307/212
f 309/213 301/202 300/203 308/223
f 308/221 300/206 298/207 306/220
f 311/224 313/227 312/226 310/225
f 309/213 313/227 311/224 307/212
f 310/228 306/222 307/212 311/224
f 313/227 309/213 308/223 312/229
f 321/230 266/233 265/232 319/231
f 328/234 320/237 318/236 326/235
f 270/148 266/149 321/238
f 329/239 270/148 321/238
f 329/239 321/238 320/240
f 328/241 329/239 320/240
f 319/242 265/168 269/169
f 319/242 269/169 327/243
f 318/244 319/242 327/243
f 318/244 327/243 326/245
f 314/246 322/249 324/248 316/247
f 314/250 315/252 322/251
f 315/252 323/253 322/251
f 315/252 263/150 323/253
f 263/150 267/147 323/253
f 263/254 315/257 317/256 264/255
f 324/258 317/260 316/259
f 324/258 325/261 317/260
f 325/261 264/167 317/260
f 325/261 268/170 264/167
f 270/166 329/263 327/262 269/165
f 323/264 267/163 268/164 325/265
f 320/237 321/230 319/231 318/236
f 329/263 328/267 326/266 327/262
f 315/257 314/246 316/247 317/256
f 325/265 324/269 322/268 323/264
f 296/270 343/272 257/271
f 297/273 258/275 344/274
f 294/276 247/278 342/277
f 339/279 335/282 242/281 254/280
f 345/283 341/286 253/285 256/284
f 294/121 296/200 297/201 295/120
f 241/104 236/102 334/288 338/287
f 258/275 255/290 340/289 344/274
f 341/291 337/294 237/293 253/292
f 247/278 241/296 338/295 342/277
f 255/297 243/300 336/299 340/298
f 343/272 339/302 254/301 257/271
f 334/288 335/282 339/279 338/287
f 336/299 337/294 341/291 340/298
f 340/289 341/286 345/283 344/274
f 338/295 339/302 343/272 342/277
f 344/274 345/283 295/303 297/273
f 295/303 345/283 256/284
f 342/277 343/272 296/270 294/276
s 1
f 34/304 30/305 21/306 25/307
f 37/308 33/309 24/310 28/311
f 26/312 24/310 33/309 35/313
f 25/307 22/314 31/315 34/304
f 27/316 23/317 32/318 36/319
f 28/320 21/306 30/305 37/321
f 35/313 32/318 23/317 26/312
f 36/319 31/315 22/314 27/316
f 43/322 41/323 48/324 50/325
f 50/325 47/326 40/327 43/322
f 51/328 46/329 39/330 44/331
f 44/331 40/327 47/326 51/328
f 55/332 53/333 57/334 59/335
f 53/333 54/336 58/337 57/334
f 42/338 39/330 46/329 49/339
f 52/340 48/324 41/323 45/341
f 49/339 38/342 29/343 42/338
f 45/344 29/343 38/342 52/345
f 229/346 60/347 56/348 223/349
f 222/350 55/332 59/335 228/351
f 60/347 58/337 54/336 56/348
f 239/352 66/353 62/354 233/355
f 63/356 62/354 66/353 67/357
f 232/358 61/359 65/360 238/361
f 67/357 65/360 61/359 63/356
f 250/362 73/363 70/364 245/365
f 71/366 70/364 73/363 74/367
f 244/368 69/369 64/370 249/371
f 74/367 64/370 69/369 71/366
f 332/372 147/373 69/369 244/368
f 245/365 70/364 148/374 331/375
f 330/376 149/377 66/353 239/352
f 238/361 65/360 146/378 333/379
f 333/379 146/378 147/373 332/372
f 331/375 148/374 149/377 330/376
f 191/304 182/307 178/306 187/305
f 194/308 185/311 181/310 190/309
f 183/312 192/313 190/309 181/310
f 182/307 191/304 188/315 179/314
f 184/316 193/319 189/318 180/317
f 185/320 194/321 187/305 178/306
f 192/313 183/312 180/317 189/318
f 193/319 184/316 179/314 188/315
f 200/322 208/325 206/324 198/323
f 208/325 200/322 197/327 205/326
f 209/328 201/331 196/330 204/329
f 201/331 209/328 205/326 197/327
f 220/332 226/335 224/334 211/333
f 211/333 224/334 225/337 219/336
f 199/338 207/339 204/329 196/330
f 210/340 202/341 198/323 206/324
f 207/339 199/338 186/343 195/342
f 202/344 210/345 195/342 186/343
f 229/346 223/349 221/348 227/347
f 222/350 228/351 226/335 220/332
f 227/347 221/348 219/336 225/337
f 239/352 233/355 231/354 237/353
f 234/356 240/357 237/353 231/354
f 232/358 238/361 236/360 230/359
f 240/357 234/356 230/359 236/360
f 250/362 245/365 243/364 248/363
f 246/366 251/367 248/363 243/364
f 244/368 249/371 235/370 242/369
f 251/367 246/366 242/369 235/370
f 332/372 244/368 242/369 335/373
f 245/365 331/375 336/374 243/364
f 330/376 239/352 237/353 337/377
f 238/361 333/379 334/378 236/360
f 333/379 332/372 335/373 334/378
f 331/375 330/376 337/377 336/374
...@@ -12,6 +12,7 @@ import numpy as np ...@@ -12,6 +12,7 @@ import numpy as np
import math import math
from common.consts import AU from common.consts import AU
import copy import copy
import os
class Obj(metaclass=ABCMeta): class Obj(metaclass=ABCMeta):
...@@ -23,7 +24,8 @@ class Obj(metaclass=ABCMeta): ...@@ -23,7 +24,8 @@ class Obj(metaclass=ABCMeta):
density=5e3, color=(125 / 255, 125 / 255, 125 / 255), density=5e3, color=(125 / 255, 125 / 255, 125 / 255),
texture=None, size_scale=1.0, distance_scale=1.0, texture=None, size_scale=1.0, distance_scale=1.0,
parent=None, ignore_mass=False, parent=None, ignore_mass=False,
trail_color=None, show_name=False): trail_color=None, show_name=False,
gravity_only_for=[], model=None):
""" """
对象类 对象类
@param name: 对象名称 @param name: 对象名称
...@@ -45,6 +47,8 @@ class Obj(metaclass=ABCMeta): ...@@ -45,6 +47,8 @@ class Obj(metaclass=ABCMeta):
self.__his_vel = [] self.__his_vel = []
self.__his_acc = [] self.__his_acc = []
self.__his_reserved_num = 200 self.__his_reserved_num = 200
self.gravity_only_for = gravity_only_for
self.model = self.find_model(model)
if name is None: if name is None:
name = getattr(self.__class__, '__name__') name = getattr(self.__class__, '__name__')
...@@ -90,6 +94,21 @@ class Obj(metaclass=ABCMeta): ...@@ -90,6 +94,21 @@ class Obj(metaclass=ABCMeta):
self.__has_rings = False self.__has_rings = False
def find_model(self, model: str):
if not model.endswith(".obj"):
return model
if os.path.exists(model):
return model
paths = [os.path.join('.', 'objs/models'),
os.path.join('..', 'objs/models'),
os.path.join('..', '..', 'objs/models')]
for path in paths:
p = os.path.join(path, model)
if os.path.exists(p):
return p
return ""
def set_ignore_gravity(self, value=True): def set_ignore_gravity(self, value=True):
""" """
设置忽略质量,True为引力失效 设置忽略质量,True为引力失效
...@@ -198,7 +217,7 @@ class Obj(metaclass=ABCMeta): ...@@ -198,7 +217,7 @@ class Obj(metaclass=ABCMeta):
停止运动,将加速度和速度置零 停止运动,将加速度和速度置零
@return: @return:
""" """
self.init_velocity = [0.0, 0.0, 0.0] self.velocity = [0.0, 0.0, 0.0]
self.acceleration = [0.0, 0.0, 0.0] self.acceleration = [0.0, 0.0, 0.0]
def stop_and_ignore_gravity(self): def stop_and_ignore_gravity(self):
...@@ -305,6 +324,10 @@ class Obj(metaclass=ABCMeta): ...@@ -305,6 +324,10 @@ class Obj(metaclass=ABCMeta):
@param body: @param body:
@return: @return:
""" """
if len(self.gravity_only_for) > 0:
if body in self.gravity_only_for:
return False
return True
# TODO: 注意:这里的算法是基于牛顿的万有引力(质量为0不受引力的影响在对象物理学中是不严谨) # TODO: 注意:这里的算法是基于牛顿的万有引力(质量为0不受引力的影响在对象物理学中是不严谨)
if self.ignore_mass: if self.ignore_mass:
return True return True
......
# -*- coding:utf-8 -*-
# title :地球
# description :地球
# author :Python超人
# date :2023-02-11
# link :https://gitcode.net/pythoncr/
# python_version :3.8
# ==============================================================================
from objs.obj import Obj
class Satellite(Obj):
"""
卫星
"""
def __init__(self, name="卫星", mass=5.97237e24,
init_position=[0, 0, 0],
init_velocity=[0, 0, 0],
texture="satelite.png", size_scale=1.0, distance_scale=1.0,
ignore_mass=False, density=1e3, color=(7, 0, 162),
trail_color=None, show_name=False,
model="satelite.obj",
parent=None, gravity_only_for=[]):
params = {
"name": name,
"mass": mass,
"init_position": init_position,
"init_velocity": init_velocity,
"density": density,
"color": color,
"texture": texture,
"size_scale": size_scale,
"distance_scale": distance_scale,
"ignore_mass": ignore_mass,
"trail_color": trail_color,
"show_name": show_name,
"parent": parent,
"gravity_only_for": gravity_only_for,
"model": model
}
super().__init__(**params)
if __name__ == '__main__':
satellite = Satellite()
print(satellite)
...@@ -26,7 +26,7 @@ if __name__ == '__main__': ...@@ -26,7 +26,7 @@ if __name__ == '__main__':
Sun(name="抖音", mass=1.9891e30, Sun(name="抖音", mass=1.9891e30,
init_position=[0, 0, 0], init_position=[0, 0, 0],
init_velocity=[0, 0, 0], init_velocity=[0, 0, 0],
texture="douyin.jpg", size_scale=8e1, distance_scale=1.0), texture="douyin.jpg", size_scale=6e1, distance_scale=1.0),
# 地球的质量为 5.97237✕10²⁴ kg # 地球的质量为 5.97237✕10²⁴ kg
# 初始位置 x=1.12天文单位, y=0, z=0 # 初始位置 x=1.12天文单位, y=0, z=0
...@@ -35,10 +35,10 @@ if __name__ == '__main__': ...@@ -35,10 +35,10 @@ if __name__ == '__main__':
# 放大倍数为 5000 倍 # 放大倍数为 5000 倍
# 距离保持不变 # 距离保持不变
Earth(name="超人", mass=5.97237e24, Earth(name="超人", mass=5.97237e24,
init_position=[2 * AU, 0, 0], init_position=[0, 0, AU],
init_velocity=[0, 29.79, 0], init_velocity=[-29.79, 0, 0],
rotation_speed=1.5, rotation_speed=1.5,
texture="pythoncr.jpg", size_scale=5e3, distance_scale=1.0), texture="pythoncr.jpg", size_scale=3e3, distance_scale=1.0),
] ]
# 使用 mayavi 查看的运行效果 # 使用 mayavi 查看的运行效果
# mayavi_run(bodies, SECONDS_PER_DAY, view_azimuth=135) # mayavi_run(bodies, SECONDS_PER_DAY, view_azimuth=135)
...@@ -49,4 +49,4 @@ if __name__ == '__main__': ...@@ -49,4 +49,4 @@ if __name__ == '__main__':
# 使用 ursina 查看的运行效果 # 使用 ursina 查看的运行效果
# 常用快捷键: P:运行和暂停 O:重新开始 I:显示天体轨迹 # 常用快捷键: P:运行和暂停 O:重新开始 I:显示天体轨迹
# position = 左-右+、上+下-、前+后- # position = 左-右+、上+下-、前+后-
ursina_run(bodies, SECONDS_PER_WEEK, position=(0, AU, -5 * AU)) ursina_run(bodies, SECONDS_PER_WEEK * 2, position=(0, AU, -5 * AU))
...@@ -7,8 +7,9 @@ ...@@ -7,8 +7,9 @@
# python_version :3.8 # python_version :3.8
# ============================================================================== # ==============================================================================
from bodies import Moon, Earth, Body from bodies import Moon, Earth, Body
from objs import Satellite
from common.consts import SECONDS_PER_HOUR, SECONDS_PER_HALF_DAY, SECONDS_PER_DAY, SECONDS_PER_WEEK, SECONDS_PER_MONTH from common.consts import SECONDS_PER_HOUR, SECONDS_PER_HALF_DAY, SECONDS_PER_DAY, SECONDS_PER_WEEK, SECONDS_PER_MONTH
from sim_scenes.func import mayavi_run, ursina_run from sim_scenes.func import mayavi_run, ursina_run, camera_look_at
import math import math
import random import random
...@@ -36,6 +37,10 @@ import random ...@@ -36,6 +37,10 @@ import random
import random import random
import math import math
from simulators.ursina.entities.body_timer import TimeData
from simulators.ursina.ursina_config import UrsinaConfig
from simulators.ursina.ursina_event import UrsinaEvent
def get_satellite_position_velocity(earth_mass, earth_position, earth_radius, altitude): def get_satellite_position_velocity(earth_mass, earth_position, earth_radius, altitude):
# 万有引力常数 # 万有引力常数
...@@ -97,15 +102,37 @@ if __name__ == '__main__': ...@@ -97,15 +102,37 @@ if __name__ == '__main__':
earth = Earth(init_position=[0, 0, 0], size_scale=1, texture="earth_hd.jpg", init_velocity=[0, 0, 0]) earth = Earth(init_position=[0, 0, 0], size_scale=1, texture="earth_hd.jpg", init_velocity=[0, 0, 0])
# 北斗卫星高度为2.13-2.15万千米。GPS卫星平均轨道高度2.02万千米。 # 北斗卫星高度为2.13-2.15万千米。GPS卫星平均轨道高度2.02万千米。
bodies = [earth] bodies = [earth]
for i in range(10): satellite_infos = [
altitude = random.randint(4000, 10000) {"position": [0, 0, 10000], "velocity": [-6.3, 0, 0]},
position, velocity = get_satellite_position_velocity(earth.mass, earth.init_position, earth.raduis, altitude) {"position": [0, 0, -12000], "velocity": [5.75, 0, 0]},
satellite = Body(name=f'卫星{i + 1}', mass=4.4e10, size_scale=1e3, color=(255, 200, 0), {"position": [0, 8000, 0], "velocity": [7.05, 0, 0]},
init_position=position, {"position": [0, -12000, 0], "velocity": [-5.75, 0, 0]},
init_velocity=velocity) {"position": [0, 0, 8000], "velocity": [0, 7.05, 0]},
{"position": [0, 0, -10000], "velocity": [0, -6.3, 0]},
]
for i, info in enumerate(satellite_infos):
# altitude = random.randint(4000, 10000)
# position, velocity = get_satellite_position_velocity(earth.mass, earth.init_position, earth.raduis, altitude)
satellite = Satellite(name=f'卫星{i + 1}', mass=4.4e10, size_scale=2e2, color=(255, 200, 0),
init_position=info["position"],
init_velocity=info["velocity"])
bodies.append(satellite) bodies.append(satellite)
def on_ready():
camera_look_at(earth, rotation_z=0)
UrsinaConfig.trail_length = 150
UrsinaConfig.trail_type = "line"
pass
UrsinaEvent.on_ready_subscription(on_ready)
# 使用 ursina 查看的运行效果 # 使用 ursina 查看的运行效果
# 常用快捷键: P:运行和暂停 O:重新开始 I:显示天体轨迹 # 常用快捷键: P:运行和暂停 O:重新开始 I:显示天体轨迹
# position = 左-右+、上+下-、前+后- # position = 左-右+、上+下-、前+后-
ursina_run(bodies, SECONDS_PER_HOUR/60, position=(0, 0, -80000), show_trail=True, view_closely=0.01) ursina_run(bodies, SECONDS_PER_HOUR / 2,
position=(30000, 5000, -30000),
show_trail=True,
view_closely=0.001)
...@@ -7,13 +7,14 @@ ...@@ -7,13 +7,14 @@
# python_version :3.8 # python_version :3.8
# ============================================================================== # ==============================================================================
from bodies import Moon, Earth, Body from bodies import Moon, Earth, Body
from objs import Football
from common.consts import SECONDS_PER_HOUR, SECONDS_PER_MINUTE from common.consts import SECONDS_PER_HOUR, SECONDS_PER_MINUTE
from sim_scenes.func import ursina_run, get_vector2d_velocity, camera_look_at, two_bodies_colliding from sim_scenes.func import ursina_run, get_vector2d_velocity, camera_look_at, two_bodies_colliding
from simulators.ursina.entities.body_timer import TimeData from simulators.ursina.entities.body_timer import TimeData
from simulators.ursina.ursina_event import UrsinaEvent from simulators.ursina.ursina_event import UrsinaEvent
def create_ejected_object(velocity, raduis, trail_color, angle=10): def create_ejected_object(velocity, raduis, trail_color, gravity_only_for, angle=10):
""" """
创建一个被抛的物体 创建一个被抛的物体
@param velocity: 抛出去的速度 @param velocity: 抛出去的速度
...@@ -24,10 +25,10 @@ def create_ejected_object(velocity, raduis, trail_color, angle=10): ...@@ -24,10 +25,10 @@ def create_ejected_object(velocity, raduis, trail_color, angle=10):
""" """
# 根据速度、角度获取矢量速度(vx、vy) -> vx² + vy² = velocity² # 根据速度、角度获取矢量速度(vx、vy) -> vx² + vy² = velocity²
vx, vy = get_vector2d_velocity(velocity, angle=angle) vx, vy = get_vector2d_velocity(velocity, angle=angle)
moon = Moon(name=f'物体速度:{velocity}', mass=500, size_scale=2e6, trail_color=trail_color, football = Football(name=f'物体速度:{velocity}', mass=500, size_scale=1e3, trail_color=trail_color,
init_position=[0, raduis, 0], init_position=[0, raduis, 0],
init_velocity=[vx, vy, 0], gravity_only_for_earth=True) # 仅适用于地球的重力,物体之间重力不要受到影响 init_velocity=[vx, vy, 0], gravity_only_for=[gravity_only_for]) # 仅适用于地球的重力,物体之间重力不要受到影响
return moon return football
if __name__ == '__main__': if __name__ == '__main__':
...@@ -39,13 +40,13 @@ if __name__ == '__main__': ...@@ -39,13 +40,13 @@ if __name__ == '__main__':
raduis = earth.raduis + 300 raduis = earth.raduis + 300
# TODO: 4个不同的抛出速度 7.5km/s、8.5km/s、10km/s、11.2km/s(第二宇宙速度) # TODO: 4个不同的抛出速度 7.5km/s、8.5km/s、10km/s、11.2km/s(第二宇宙速度)
# 粉色:velocity = 7.5,飞不出地球太远,就落地 # 粉色:velocity = 7.5,飞不出地球太远,就落地
obj0 = create_ejected_object(velocity=7.5, raduis=raduis, trail_color=(255, 0, 255)) obj0 = create_ejected_object(velocity=7.5, raduis=raduis, trail_color=(255, 0, 255), gravity_only_for=earth)
# 红色:velocity = 8.5,飞不出地球太远,就落地 # 红色:velocity = 8.5,飞不出地球太远,就落地
obj1 = create_ejected_object(velocity=8.5, raduis=raduis, trail_color=(255, 0, 0)) obj1 = create_ejected_object(velocity=8.5, raduis=raduis, trail_color=(255, 0, 0), gravity_only_for=earth)
# 绿色:velocity = 10,能飞出地球很远,但还是无法摆脱地球引力 # 绿色:velocity = 10,能飞出地球很远,但还是无法摆脱地球引力
obj2 = create_ejected_object(velocity=10, raduis=raduis, trail_color=(0, 255, 0)) obj2 = create_ejected_object(velocity=10, raduis=raduis, trail_color=(0, 255, 0), gravity_only_for=earth)
# 蓝色:velocity = 11.2,脱离地球引力直接飞出。速度11.2千米/秒为脱离地球引力的速度叫第二宇宙速度 # 蓝色:velocity = 11.2,脱离地球引力直接飞出。速度11.2千米/秒为脱离地球引力的速度叫第二宇宙速度
obj3 = create_ejected_object(velocity=11.2, raduis=raduis, trail_color=(0, 0, 255)) obj3 = create_ejected_object(velocity=11.2, raduis=raduis, trail_color=(0, 0, 255), gravity_only_for=earth)
bodies = [earth, obj0, obj1, obj2, obj3] bodies = [earth, obj0, obj1, obj2, obj3]
...@@ -64,10 +65,12 @@ if __name__ == '__main__': ...@@ -64,10 +65,12 @@ if __name__ == '__main__':
# 如果抛出物与地球相碰撞了,则静止不动(抛出物停止并忽略引力) # 如果抛出物与地球相碰撞了,则静止不动(抛出物停止并忽略引力)
obj.stop_and_ignore_gravity() obj.stop_and_ignore_gravity()
def on_reset(): def on_reset():
for obj in [obj0, obj1, obj2, obj3]: for obj in [obj0, obj1, obj2, obj3]:
obj.ignore_mass = False obj.ignore_mass = False
# 订阅计时器事件(定时触发) # 订阅计时器事件(定时触发)
UrsinaEvent.on_timer_changed_subscription(on_timer_changed) UrsinaEvent.on_timer_changed_subscription(on_timer_changed)
UrsinaEvent.on_reset_subscription(on_reset) UrsinaEvent.on_reset_subscription(on_reset)
......
...@@ -55,9 +55,12 @@ class Simulator(metaclass=ABCMeta): ...@@ -55,9 +55,12 @@ class Simulator(metaclass=ABCMeta):
view.acceleration = body.acceleration view.acceleration = body.acceleration
view.velocity = body.velocity view.velocity = body.velocity
# viewer.volume = body.volume # viewer.volume = body.volume
if hasattr(body, "raduis"):
view.raduis = body.raduis view.raduis = body.raduis
view.his_position = body.his_position() view.his_position = body.his_position()
if hasattr(body, "is_fixed_star"):
view.is_fixed_star = body.is_fixed_star view.is_fixed_star = body.is_fixed_star
if hasattr(body, "has_rings"):
view.has_rings = body.has_rings view.has_rings = body.has_rings
view.size_scale = body.size_scale view.size_scale = body.size_scale
view.distance_scale = body.distance_scale view.distance_scale = body.distance_scale
......
...@@ -33,12 +33,17 @@ class Planet(Entity): ...@@ -33,12 +33,17 @@ class Planet(Entity):
def __init__(self, body_view: BodyView): def __init__(self, body_view: BodyView):
self.body_view = body_view self.body_view = body_view
if hasattr(self.body, "rotation_speed"):
self.rotation_speed = self.body.rotation_speed self.rotation_speed = self.body.rotation_speed
self.rotMode = 'x' # random.choice(["x", "y", "z"]) self.rotMode = 'x' # random.choice(["x", "y", "z"])
self.name = body_view.name self.name = body_view.name
pos = body_view.position * body_view.body.distance_scale * UrsinaConfig.SCALE_FACTOR pos = body_view.position * self.body.distance_scale * UrsinaConfig.SCALE_FACTOR
scale = body_view.body.diameter * body_view.body.size_scale * UrsinaConfig.SCALE_FACTOR if hasattr(self.body, "diameter"):
scale = self.body.diameter * self.body.size_scale * UrsinaConfig.SCALE_FACTOR
else:
scale = self.body.size_scale * UrsinaConfig.SCALE_FACTOR
self.init_scale = scale self.init_scale = scale
if hasattr(body_view, "texture"): if hasattr(body_view, "texture"):
texture = load_texture(body_view.texture) texture = load_texture(body_view.texture)
...@@ -51,6 +56,8 @@ class Planet(Entity): ...@@ -51,6 +56,8 @@ class Planet(Entity):
b_color = (b_color[0], b_color[1], b_color[2], 1.0) b_color = (b_color[0], b_color[1], b_color[2], 1.0)
self.plant_color = color.rgba(*b_color) self.plant_color = color.rgba(*b_color)
collider = "sphere"
if hasattr(self.body, "torus_stars"): if hasattr(self.body, "torus_stars"):
# 创建一个星环小天体群(主要模拟小行星群,非一个天体) # 创建一个星环小天体群(主要模拟小行星群,非一个天体)
model = create_torus(0.83, 1.05, 64, 1) model = create_torus(0.83, 1.05, 64, 1)
...@@ -60,7 +67,15 @@ class Planet(Entity): ...@@ -60,7 +67,15 @@ class Planet(Entity):
subdivisions = 32 subdivisions = 32
if self.body.resolution is not None: if self.body.resolution is not None:
subdivisions = self.body.resolution subdivisions = self.body.resolution
if hasattr(self.body, "model"):
if self.body.model is None:
model = create_sphere(0.5, subdivisions)
elif isinstance(self.body.model, str):
model = self.body.model
else:
model = self.body.model
rotation = (0, 0, 0)
else:
model = create_sphere(0.5, subdivisions) model = create_sphere(0.5, subdivisions)
rotation = (0, 0, 0) rotation = (0, 0, 0)
...@@ -73,7 +88,7 @@ class Planet(Entity): ...@@ -73,7 +88,7 @@ class Planet(Entity):
scale=scale, scale=scale,
texture=texture, texture=texture,
color=self.plant_color, color=self.plant_color,
collider="sphere", collider=collider,
position=pos, position=pos,
rotation=rotation, rotation=rotation,
double_sided=True double_sided=True
...@@ -88,16 +103,21 @@ class Planet(Entity): ...@@ -88,16 +103,21 @@ class Planet(Entity):
# 拖尾球体的初始化 # 拖尾球体的初始化
trail_init(self) trail_init(self)
if hasattr(self.body, "is_fixed_star"):
if self.body.is_fixed_star: if self.body.is_fixed_star:
# 如果是恒星,开启恒星的发光的效果、并作为灯光源 # 如果是恒星,开启恒星的发光的效果、并作为灯光源
create_fixed_star_lights(self) create_fixed_star_lights(self)
elif self.body.light_disable: elif self.body.light_disable:
# 如果是非恒星,并且禁用灯光 # 如果是非恒星,并且禁用灯光
self.set_light_off() self.set_light_off()
elif self.body.light_disable:
# 如果是非恒星,并且禁用灯光
self.set_light_off()
if self.body.show_name: if self.body.show_name:
create_name_text(self) create_name_text(self)
if hasattr(self.body, "has_rings"):
if self.body.has_rings: if self.body.has_rings:
# 创建行星环(目前只有土星环) # 创建行星环(目前只有土星环)
create_rings(self) create_rings(self)
...@@ -126,6 +146,7 @@ class Planet(Entity): ...@@ -126,6 +146,7 @@ class Planet(Entity):
dt = 0 dt = 0
if hasattr(self.body, "dt"): if hasattr(self.body, "dt"):
dt = self.body.dt dt = self.body.dt
if hasattr(self, "rotation_speed"):
if self.rotation_speed is None or dt == 0: if self.rotation_speed is None or dt == 0:
self.rotspeed = 0 self.rotspeed = 0
# 旋转速度和大小成反比(未使用真实数据) # 旋转速度和大小成反比(未使用真实数据)
...@@ -139,6 +160,7 @@ class Planet(Entity): ...@@ -139,6 +160,7 @@ class Planet(Entity):
# if self.rotation_y < 0: # if self.rotation_y < 0:
# self.rotation_y += 360 # self.rotation_y += 360
try: try:
if hasattr(self, "rotspeed"):
# 天体旋转 # 天体旋转
self.rotation_y -= self.rotspeed self.rotation_y -= self.rotspeed
except Exception as e: except Exception as e:
......
...@@ -38,7 +38,10 @@ class BodyView(metaclass=ABCMeta): ...@@ -38,7 +38,10 @@ class BodyView(metaclass=ABCMeta):
self.position = body.position self.position = body.position
self.name = body.name self.name = body.name
self.mass = body.mass self.mass = body.mass
if hasattr(body, "raduis"):
self.raduis = body.raduis self.raduis = body.raduis
self.velocity = body.velocity self.velocity = body.velocity
self.appeared = True self.appeared = True
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册