提交 151048bb 编写于 作者: 三月三net's avatar 三月三net

更改了坐标[x, y, z]->[-y, z, x],备份,后面将删除注释和清理代码

上级 11659848
...@@ -27,8 +27,10 @@ class Asteroid(Body): ...@@ -27,8 +27,10 @@ class Asteroid(Body):
""" """
def __init__(self, name="小行星", mass=4.1e10, def __init__(self, name="小行星", mass=4.1e10,
init_position=[1.6 * AU, 0, 0], # init_position=[1.6 * AU, 0, 0],
init_velocity=[0, 25.37, 0], # init_velocity=[0, 25.37, 0],
init_position=[0, 0, 1.6 * AU],
init_velocity=[-25.37, 0, 0],
texture="", size_scale=1.0, distance_scale=1.0): texture="", size_scale=1.0, distance_scale=1.0):
params = { params = {
"name": name, "name": name,
...@@ -43,6 +45,10 @@ class Asteroid(Body): ...@@ -43,6 +45,10 @@ class Asteroid(Body):
} }
super().__init__(**params) super().__init__(**params)
@property
def show_trail(self):
return False
def ignore_gravity(self, body): def ignore_gravity(self, body):
""" """
是否忽略引力 是否忽略引力
......
...@@ -403,6 +403,9 @@ class Body(metaclass=ABCMeta): ...@@ -403,6 +403,9 @@ class Body(metaclass=ABCMeta):
body = FixedStar(**body_data) body = FixedStar(**body_data)
else: else:
body = Body(**body_data) body = Body(**body_data)
# [x, y, z]->[-y, z, x]
# body.init_velocity = [-body.init_velocity[1],body.init_velocity[2],body.init_velocity[0]]
# body.init_position = [-body.init_position[1],body.init_position[2],body.init_position[0]]
bodies.append(body) bodies.append(body)
if "params" in json_data: if "params" in json_data:
params = json_data["params"] params = json_data["params"]
......
...@@ -22,10 +22,11 @@ class Earth(Body): ...@@ -22,10 +22,11 @@ class Earth(Body):
 天体质量: 5.97237✕10²⁴ kg  天体质量: 5.97237✕10²⁴ kg
 平均密度: 5507.85 kg/m³  平均密度: 5507.85 kg/m³
""" """
def __init__(self, name="地球", mass=5.97237e24,rotate_angle=0, def __init__(self, name="地球", mass=5.97237e24,rotate_angle=0,
init_position=[1.12 * AU, 0, 0], # init_position=[1.12 * AU, 0, 0],
init_velocity=[0, 29.79, 0], # init_velocity=[0, 29.79, 0],
init_position=[0, 0, 1.12 * AU],
init_velocity=[-29.79, 0, 0],
texture="earth1.jpg", size_scale=1.0, distance_scale=1.0, texture="earth1.jpg", size_scale=1.0, distance_scale=1.0,
rotation_speed=15, ignore_mass=False, trail_color=None, show_name=False): rotation_speed=15, ignore_mass=False, trail_color=None, show_name=False):
params = { params = {
......
...@@ -22,10 +22,11 @@ class Jupiter(Body): ...@@ -22,10 +22,11 @@ class Jupiter(Body):
 天体质量: 1.8982✕10²⁷ kg(317.8 M⊕)  天体质量: 1.8982✕10²⁷ kg(317.8 M⊕)
 平均密度: 1.326 g/cm³ -> -> 1.326✕10³ kg/m³  平均密度: 1.326 g/cm³ -> -> 1.326✕10³ kg/m³
""" """
def __init__(self, name="木星", mass=1.8982e27, def __init__(self, name="木星", mass=1.8982e27,
init_position=[5.2 * AU, 0, 0], # init_position=[5.2 * AU, 0, 0],
init_velocity=[0, 13.06, 0], # init_velocity=[0, 13.06, 0],
init_position=[0, 0, 5.2 * AU],
init_velocity=[-13.06, 0, 0],
texture="jupiter1.jpg", size_scale=1.0, distance_scale=1.0, texture="jupiter1.jpg", size_scale=1.0, distance_scale=1.0,
rotation_speed=36.2537, ignore_mass=False, trail_color=None, show_name=False): rotation_speed=36.2537, ignore_mass=False, trail_color=None, show_name=False):
params = { params = {
......
...@@ -23,8 +23,10 @@ class Mars(Body): ...@@ -23,8 +23,10 @@ class Mars(Body):
 平均密度: 3.9335 g/cm³ -> 3.9335✕10³ kg/m³  平均密度: 3.9335 g/cm³ -> 3.9335✕10³ kg/m³
""" """
def __init__(self, name="火星", mass=6.4171e23, def __init__(self, name="火星", mass=6.4171e23,
init_position=[1.5 * AU, 0, 0], # init_position=[1.5 * AU, 0, 0],
init_velocity=[0, 24.13, 0], # init_velocity=[0, 24.13, 0],
init_position=[0, 0, 1.5 * AU],
init_velocity=[-24.13, 0, 0],
texture="mars.jpg", size_scale=1.0, distance_scale=1.0, texture="mars.jpg", size_scale=1.0, distance_scale=1.0,
rotation_speed=14.6223, ignore_mass=False, trail_color=None, show_name=False): rotation_speed=14.6223, ignore_mass=False, trail_color=None, show_name=False):
params = { params = {
......
...@@ -24,8 +24,10 @@ class Mercury(Body): ...@@ -24,8 +24,10 @@ class Mercury(Body):
""" """
def __init__(self, name="水星", mass=3.3011e23, def __init__(self, name="水星", mass=3.3011e23,
init_position=[0.4 * AU, 0, 0], # init_position=[0.4 * AU, 0, 0],
init_velocity=[0, 47.87, 0], # init_velocity=[0, 47.87, 0],
init_position=[0, 0, 0.4 * AU],
init_velocity=[-47.87, 0, 0],
texture="mercury.jpg", size_scale=1.0, distance_scale=1.0, texture="mercury.jpg", size_scale=1.0, distance_scale=1.0,
rotation_speed=0.2558, ignore_mass=False, trail_color=None, show_name=False): rotation_speed=0.2558, ignore_mass=False, trail_color=None, show_name=False):
params = { params = {
......
...@@ -23,8 +23,10 @@ class Moon(Body): ...@@ -23,8 +23,10 @@ class Moon(Body):
""" """
def __init__(self, name="月球", mass=7.342e22, def __init__(self, name="月球", mass=7.342e22,
init_position=[363104 + 1.12 * AU, 0, 0], # init_position=[363104 + 1.12 * AU, 0, 0],
init_velocity=[0, 29.79 + 1.023, 0], # init_velocity=[0, 29.79 + 1.023, 0],
init_position=[0, 0, 363104 + 1.12 * AU],
init_velocity=[-(29.79 + 1.023), 0, 0],
texture="moon.jpg", size_scale=1.0, distance_scale=1.0, texture="moon.jpg", size_scale=1.0, distance_scale=1.0,
rotation_speed=0.5487, ignore_mass=False, trail_color=None, show_name=False): rotation_speed=0.5487, ignore_mass=False, trail_color=None, show_name=False):
params = { params = {
......
...@@ -24,8 +24,10 @@ class Neptune(Body): ...@@ -24,8 +24,10 @@ class Neptune(Body):
""" """
def __init__(self, name="海王星", mass=1.0241e26, def __init__(self, name="海王星", mass=1.0241e26,
init_position=[30 * AU, 0, 0], # init_position=[30 * AU, 0, 0],
init_velocity=[0, 5.43, 0], # init_velocity=[0, 5.43, 0],
init_position=[0, 0, 30 * AU],
init_velocity=[-5.43, 0, 0],
texture="neptune.png", size_scale=1.0, distance_scale=1.0, texture="neptune.png", size_scale=1.0, distance_scale=1.0,
rotation_speed=22.3463, ignore_mass=False, trail_color=None, show_name=False): rotation_speed=22.3463, ignore_mass=False, trail_color=None, show_name=False):
params = { params = {
......
...@@ -24,8 +24,10 @@ class Pluto(Body): ...@@ -24,8 +24,10 @@ class Pluto(Body):
""" """
def __init__(self, name="冥王星", mass=1.303e22, def __init__(self, name="冥王星", mass=1.303e22,
init_position=[40 * AU, 0, 0], # init_position=[40 * AU, 0, 0],
init_velocity=[0, 4.7, 0], # init_velocity=[0, 4.7, 0],
init_position=[0, 0, 40 * AU],
init_velocity=[-4.7, 0, 0],
texture="pluto.png", size_scale=1.0, distance_scale=1.0, texture="pluto.png", size_scale=1.0, distance_scale=1.0,
rotation_speed=-2.3474, ignore_mass=False, trail_color=None, show_name=False): rotation_speed=-2.3474, ignore_mass=False, trail_color=None, show_name=False):
params = { params = {
......
...@@ -24,8 +24,10 @@ class Saturn(Body): ...@@ -24,8 +24,10 @@ class Saturn(Body):
""" """
def __init__(self, name="土星", mass=5.6834e26, def __init__(self, name="土星", mass=5.6834e26,
init_position=[10 * AU, 0, 0], # init_position=[10 * AU, 0, 0],
init_velocity=[0, 9.64, 0], # init_velocity=[0, 9.64, 0],
init_position=[0, 0, 10 * AU],
init_velocity=[-9.64, 0, 0],
texture="saturn.jpg", size_scale=1.0, distance_scale=1.0, texture="saturn.jpg", size_scale=1.0, distance_scale=1.0,
rotation_speed=33.7711, ignore_mass=False, trail_color=None, show_name=False): rotation_speed=33.7711, ignore_mass=False, trail_color=None, show_name=False):
params = { params = {
......
...@@ -24,8 +24,10 @@ class Uranus(Body): ...@@ -24,8 +24,10 @@ class Uranus(Body):
""" """
def __init__(self, name="天王星", mass=8.681e25, def __init__(self, name="天王星", mass=8.681e25,
init_position=[19 * AU, 0, 0], # init_position=[19 * AU, 0, 0],
init_velocity=[0, 6.81, 0], # init_velocity=[0, 6.81, 0],
init_position=[0, 0, 19 * AU],
init_velocity=[-6.81, 0, 0],
texture="uranus.png", size_scale=1.0, distance_scale=1.0, texture="uranus.png", size_scale=1.0, distance_scale=1.0,
rotation_speed=-20.8816, ignore_mass=False, trail_color=None, show_name=False): rotation_speed=-20.8816, ignore_mass=False, trail_color=None, show_name=False):
params = { params = {
......
...@@ -24,8 +24,10 @@ class Venus(Body): ...@@ -24,8 +24,10 @@ class Venus(Body):
""" """
def __init__(self, name="金星", mass=4.8675e24, def __init__(self, name="金星", mass=4.8675e24,
init_position=[0.72 * AU, 0, 0], # init_position=[0.72 * AU, 0, 0],
init_velocity=[0, 35, 0], # init_velocity=[0, 35, 0],
init_position=[0, 0, 0.72 * AU],
init_velocity=[-35, 0, 0],
texture="venus.jpg", size_scale=1.0, distance_scale=1.0, texture="venus.jpg", size_scale=1.0, distance_scale=1.0,
rotation_speed=-0.0617, ignore_mass=False, trail_color=None, show_name=False): rotation_speed=-0.0617, ignore_mass=False, trail_color=None, show_name=False):
params = { params = {
......
...@@ -64,13 +64,13 @@ def get_positions_velocitys(angles, velocity=1, radius=1, radius_offset=None, ve ...@@ -64,13 +64,13 @@ def get_positions_velocitys(angles, velocity=1, radius=1, radius_offset=None, ve
velocity = velocity + np.random.rand(len(angles)) * velocity_offset velocity = velocity + np.random.rand(len(angles)) * velocity_offset
pxs = radius * np.cos(angles) pxs = radius * np.cos(angles)
pys = radius * np.sin(angles) pzs = radius * np.sin(angles)
vys = velocity * np.cos(angles) vzs = velocity * np.cos(angles)
vxs = velocity * np.sin(angles) vxs = velocity * np.sin(angles)
# return pxs, pys, fxs, fys # return pxs, pzs, vxs, vzs
return np.round(pxs, 2), np.round(pys, 2), -np.round(vxs, 2), np.round(vys, 2) return np.round(pxs, 2), np.round(pzs, 2), -np.round(vxs, 2), np.round(vzs, 2)
def find_file(file_path, default_val=None, find_deep=5): def find_file(file_path, default_val=None, find_deep=5):
......
...@@ -4,12 +4,12 @@ ...@@ -4,12 +4,12 @@
"name": "太阳", "name": "太阳",
"mass": 1.9891e+30, "mass": 1.9891e+30,
"init_position": [ "init_position": [
0.0, -0.0,
0.0, 0.0,
0.0 0.0
], ],
"init_velocity": [ "init_velocity": [
0.0, -0.0,
0.0, 0.0,
0.0 0.0
], ],
...@@ -35,14 +35,14 @@ ...@@ -35,14 +35,14 @@
"name": "地球", "name": "地球",
"mass": 5.97237e+24, "mass": 5.97237e+24,
"init_position": [ "init_position": [
448793600.0,
0.0, 0.0,
-448793600.0,
0.0 0.0
], ],
"init_velocity": [ "init_velocity": [
0.0, -38.0,
38.0, -1.0,
-1.0 0.0
], ],
"density": 5507.85, "density": 5507.85,
"color": [ "color": [
......
...@@ -4,12 +4,12 @@ ...@@ -4,12 +4,12 @@
"name": "太阳", "name": "太阳",
"mass": 1.9891e+30, "mass": 1.9891e+30,
"init_position": [ "init_position": [
0.0, -0.0,
0.0, 0.0,
0.0 0.0
], ],
"init_velocity": [ "init_velocity": [
0.0, -0.0,
0.0, 0.0,
0.0 0.0
], ],
...@@ -35,13 +35,13 @@ ...@@ -35,13 +35,13 @@
"name": "地球", "name": "地球",
"mass": 5.97237e+24, "mass": 5.97237e+24,
"init_position": [ "init_position": [
167549616.0, -0.0,
0.0, 0.0,
0.0 167549616.0
], ],
"init_velocity": [ "init_velocity": [
-29.790000915527344,
0.0, 0.0,
29.790000915527344,
0.0 0.0
], ],
"density": 5507.85, "density": 5507.85,
......
...@@ -4,12 +4,12 @@ ...@@ -4,12 +4,12 @@
"name": "太阳", "name": "太阳",
"mass": 1.9891e+30, "mass": 1.9891e+30,
"init_position": [ "init_position": [
149597872.0, -0.0,
0.0, 0.0,
0.0 149597872.0
], ],
"init_velocity": [ "init_velocity": [
0.0, -0.0,
0.0, 0.0,
0.0 0.0
], ],
...@@ -24,18 +24,23 @@ ...@@ -24,18 +24,23 @@
"distance_scale": 1.0, "distance_scale": 1.0,
"rotation_speed": 0.613, "rotation_speed": 0.613,
"ignore_mass": true, "ignore_mass": true,
"is_fixed_star": true "is_fixed_star": true,
"trail_color": [
170,
98,
25
]
}, },
{ {
"name": "地球", "name": "地球",
"mass": 5.97237e+24, "mass": 5.97237e+24,
"init_position": [ "init_position": [
0.0, -0.0,
0.0, 0.0,
0.0 0.0
], ],
"init_velocity": [ "init_velocity": [
0.0, -0.0,
0.0, 0.0,
0.0 0.0
], ],
...@@ -50,19 +55,24 @@ ...@@ -50,19 +55,24 @@
"distance_scale": 1.0, "distance_scale": 1.0,
"rotation_speed": 15, "rotation_speed": 15,
"ignore_mass": false, "ignore_mass": false,
"is_fixed_star": false "is_fixed_star": false,
"trail_color": [
1,
89,
162
]
}, },
{ {
"name": "月球", "name": "月球",
"mass": 7.342e+22, "mass": 7.342e+22,
"init_position": [ "init_position": [
384400.0, -0.0,
0.0, 0.0,
0.0 384400.0
], ],
"init_velocity": [ "init_velocity": [
-1.0230000019073486,
0.0, 0.0,
1.0230000019073486,
0.0 0.0
], ],
"density": 3344.0, "density": 3344.0,
...@@ -76,7 +86,12 @@ ...@@ -76,7 +86,12 @@
"distance_scale": 1.0, "distance_scale": 1.0,
"rotation_speed": 0.5487, "rotation_speed": 0.5487,
"ignore_mass": false, "ignore_mass": false,
"is_fixed_star": false "is_fixed_star": false,
"trail_color": [
162,
162,
162
]
} }
], ],
"params": { "params": {
...@@ -85,6 +100,8 @@ ...@@ -85,6 +100,8 @@
0, 0,
0, 0,
0 0
] ],
"show_trail": false,
"show_name": false
} }
} }
\ No newline at end of file
...@@ -4,14 +4,14 @@ ...@@ -4,14 +4,14 @@
"name": "红轨太阳A", "name": "红轨太阳A",
"mass": 2e+30, "mass": 2e+30,
"init_position": [ "init_position": [
-518222240.0,
0.0, 0.0,
518222240.0,
0.0 0.0
], ],
"init_velocity": [ "init_velocity": [
-14.890000343322754, -0.0,
0.0, 0.0,
0.0 -14.890000343322754
], ],
"density": 1408.0, "density": 1408.0,
"color": [ "color": [
...@@ -19,28 +19,30 @@ ...@@ -19,28 +19,30 @@
98, 98,
25 25
], ],
"texture": "sun2.jpg",
"size_scale": 50.0,
"distance_scale": 1.0,
"rotation_speed": 0.1,
"ignore_mass": false,
"is_fixed_star": true,
"trail_color": [ "trail_color": [
255, 255,
0, 0,
0 0
], ]
"texture": "sun2.jpg",
"size_scale": 50.0,
"distance_scale": 1.0,
"is_fixed_star": true
}, },
{ {
"name": "绿轨太阳B", "name": "绿轨太阳B",
"mass": 2e+30, "mass": 2e+30,
"init_position": [ "init_position": [
-299195744.0, -0.0,
0.0, 0.0,
0.0 -299195744.0
], ],
"init_velocity": [ "init_velocity": [
7.445000171661377, 12.895118713378906,
-12.895118713378906, 0.0,
0.0 7.445000171661377
], ],
"density": 1408.0, "density": 1408.0,
"color": [ "color": [
...@@ -48,28 +50,30 @@ ...@@ -48,28 +50,30 @@
98, 98,
25 25
], ],
"texture": "sun2.jpg",
"size_scale": 50.0,
"distance_scale": 1.0,
"rotation_speed": 0.1,
"ignore_mass": false,
"is_fixed_star": true,
"trail_color": [ "trail_color": [
0, 0,
255, 255,
0 0
], ]
"texture": "sun2.jpg",
"size_scale": 50.0,
"distance_scale": 1.0,
"is_fixed_star": true
}, },
{ {
"name": "蓝轨太阳C", "name": "蓝轨太阳C",
"mass": 2e+30, "mass": 2e+30,
"init_position": [ "init_position": [
299195744.0, -0.0,
0.0, 0.0,
0.0 299195744.0
], ],
"init_velocity": [ "init_velocity": [
7.445000171661377, -12.895118713378906,
12.895118713378906, 0.0,
0.0 7.445000171661377
], ],
"density": 1408.0, "density": 1408.0,
"color": [ "color": [
...@@ -77,28 +81,30 @@ ...@@ -77,28 +81,30 @@
98, 98,
25 25
], ],
"texture": "sun2.jpg",
"size_scale": 50.0,
"distance_scale": 1.0,
"rotation_speed": 0.1,
"ignore_mass": false,
"is_fixed_star": true,
"trail_color": [ "trail_color": [
0, 0,
0, 0,
255 255
], ]
"texture": "sun2.jpg",
"size_scale": 50.0,
"distance_scale": 1.0,
"is_fixed_star": true
}, },
{ {
"name": "流浪地球", "name": "流浪地球",
"mass": 5.97237e+24, "mass": 5.97237e+24,
"init_position": [ "init_position": [
0.0, -86370368.0,
86370368.0, 747989376.0,
747989376.0 0.0
], ],
"init_velocity": [ "init_velocity": [
0.0, -0.0,
0.0, -10.0,
-10.0 0.0
], ],
"density": 5507.85, "density": 5507.85,
"color": [ "color": [
...@@ -108,7 +114,15 @@ ...@@ -108,7 +114,15 @@
], ],
"texture": "earth1.jpg", "texture": "earth1.jpg",
"size_scale": 4000.0, "size_scale": 4000.0,
"distance_scale": 1 "distance_scale": 1,
"rotation_speed": null,
"ignore_mass": false,
"is_fixed_star": false,
"trail_color": [
1,
89,
162
]
} }
], ],
"params": { "params": {
......
...@@ -4,14 +4,14 @@ ...@@ -4,14 +4,14 @@
"name": "红轨太阳A", "name": "红轨太阳A",
"mass": 2e+30, "mass": 2e+30,
"init_position": [ "init_position": [
-518222240.0,
0.0, 0.0,
518222240.0,
0.0 0.0
], ],
"init_velocity": [ "init_velocity": [
-14.890000343322754, -0.0,
0.0, 0.0,
0.0 -14.890000343322754
], ],
"density": 1408.0, "density": 1408.0,
"color": [ "color": [
...@@ -19,28 +19,30 @@ ...@@ -19,28 +19,30 @@
98, 98,
25 25
], ],
"texture": "sun2.jpg",
"size_scale": 50.0,
"distance_scale": 1.0,
"rotation_speed": 0.1,
"ignore_mass": false,
"is_fixed_star": true,
"trail_color": [ "trail_color": [
255, 255,
0, 0,
0 0
], ]
"texture": "sun2.jpg",
"size_scale": 50.0,
"distance_scale": 1.0,
"is_fixed_star": true
}, },
{ {
"name": "绿轨太阳B", "name": "绿轨太阳B",
"mass": 2e+30, "mass": 2e+30,
"init_position": [ "init_position": [
-299195744.0, -0.0,
0.0, 0.0,
0.0 -299195744.0
], ],
"init_velocity": [ "init_velocity": [
7.445000171661377, 12.895118713378906,
-12.895118713378906, 0.0,
0.0 7.445000171661377
], ],
"density": 1408.0, "density": 1408.0,
"color": [ "color": [
...@@ -48,28 +50,30 @@ ...@@ -48,28 +50,30 @@
98, 98,
25 25
], ],
"texture": "sun2.jpg",
"size_scale": 50.0,
"distance_scale": 1.0,
"rotation_speed": 0.1,
"ignore_mass": false,
"is_fixed_star": true,
"trail_color": [ "trail_color": [
0, 0,
255, 255,
0 0
], ]
"texture": "sun2.jpg",
"size_scale": 50.0,
"distance_scale": 1.0,
"is_fixed_star": true
}, },
{ {
"name": "蓝轨太阳C", "name": "蓝轨太阳C",
"mass": 2e+30, "mass": 2e+30,
"init_position": [ "init_position": [
299195744.0, -0.0,
0.0, 0.0,
0.0 299195744.0
], ],
"init_velocity": [ "init_velocity": [
7.445000171661377, -12.895118713378906,
12.895118713378906, 0.0,
0.0 7.445000171661377
], ],
"density": 1408.0, "density": 1408.0,
"color": [ "color": [
...@@ -77,15 +81,17 @@ ...@@ -77,15 +81,17 @@
98, 98,
25 25
], ],
"texture": "sun2.jpg",
"size_scale": 50.0,
"distance_scale": 1.0,
"rotation_speed": 0.1,
"ignore_mass": false,
"is_fixed_star": true,
"trail_color": [ "trail_color": [
0, 0,
0, 0,
255 255
], ]
"texture": "sun2.jpg",
"size_scale": 50.0,
"distance_scale": 1.0,
"is_fixed_star": true
} }
], ],
"params": { "params": {
......
...@@ -4,14 +4,14 @@ ...@@ -4,14 +4,14 @@
"name": "红轨太阳A", "name": "红轨太阳A",
"mass": 2e+30, "mass": 2e+30,
"init_position": [ "init_position": [
-518222240.0,
0.0, 0.0,
"$exp:math.sqrt(3) * 2 * AU",
0.0 0.0
], ],
"init_velocity": [ "init_velocity": [
-14.89, -0.0,
0.0, 0.0,
0.0 -14.890000343322754
], ],
"density": 1408.0, "density": 1408.0,
"color": [ "color": [
...@@ -19,28 +19,30 @@ ...@@ -19,28 +19,30 @@
98, 98,
25 25
], ],
"texture": "sun2.jpg",
"size_scale": 50.0,
"distance_scale": 1.0,
"rotation_speed": 0.1,
"ignore_mass": false,
"is_fixed_star": true,
"trail_color": [ "trail_color": [
255, 255,
0, 0,
0 0
], ]
"texture": "sun2.jpg",
"size_scale": 50.0,
"distance_scale": 1.0,
"is_fixed_star": true
}, },
{ {
"name": "绿轨太阳B", "name": "绿轨太阳B",
"mass": 2e+30, "mass": 2e+30,
"init_position": [ "init_position": [
"$exp: -2 * AU", -0.0,
0.0, 0.0,
0.0 -299195744.0
], ],
"init_velocity": [ "init_velocity": [
"$exp: 1/2 * 14.88", 12.886458396911621,
"$exp:-math.sqrt(3) / 2 * 14.88", 0.0,
0.0 7.440000057220459
], ],
"density": 1408.0, "density": 1408.0,
"color": [ "color": [
...@@ -48,28 +50,30 @@ ...@@ -48,28 +50,30 @@
98, 98,
25 25
], ],
"texture": "sun2.jpg",
"size_scale": 50.0,
"distance_scale": 1.0,
"rotation_speed": 0.1,
"ignore_mass": false,
"is_fixed_star": true,
"trail_color": [ "trail_color": [
0, 0,
255, 255,
0 0
], ]
"texture": "sun2.jpg",
"size_scale": 50.0,
"distance_scale": 1.0,
"is_fixed_star": true
}, },
{ {
"name": "蓝轨太阳C", "name": "蓝轨太阳C",
"mass": 2e+30, "mass": 2e+30,
"init_position": [ "init_position": [
"$exp: 2 * AU", -0.0,
0.0, 0.0,
0.0 299195744.0
], ],
"init_velocity": [ "init_velocity": [
"$exp: 1/2 * 14.88", -12.886458396911621,
"$exp:math.sqrt(3) / 2 * 14.88", 0.0,
0.0 7.440000057220459
], ],
"density": 1408.0, "density": 1408.0,
"color": [ "color": [
...@@ -77,15 +81,17 @@ ...@@ -77,15 +81,17 @@
98, 98,
25 25
], ],
"texture": "sun2.jpg",
"size_scale": 50.0,
"distance_scale": 1.0,
"rotation_speed": 0.1,
"ignore_mass": false,
"is_fixed_star": true,
"trail_color": [ "trail_color": [
0, 0,
0, 0,
255 255
], ]
"texture": "sun2.jpg",
"size_scale": 50.0,
"distance_scale": 1.0,
"is_fixed_star": true
} }
], ],
"params": { "params": {
......
...@@ -4,14 +4,14 @@ ...@@ -4,14 +4,14 @@
"name": "红轨太阳A", "name": "红轨太阳A",
"mass": 2e+30, "mass": 2e+30,
"init_position": [ "init_position": [
-518222240.0,
0.0, 0.0,
518222240.0,
0.0 0.0
], ],
"init_velocity": [ "init_velocity": [
-12.0, -0.0,
0.0, 0.0,
0.0 -12.0
], ],
"density": 1408.0, "density": 1408.0,
"color": [ "color": [
...@@ -35,14 +35,14 @@ ...@@ -35,14 +35,14 @@
"name": "绿轨太阳B", "name": "绿轨太阳B",
"mass": 2e+30, "mass": 2e+30,
"init_position": [ "init_position": [
-299195744.0, -0.0,
0.0, 0.0,
0.0 -299195744.0
], ],
"init_velocity": [ "init_velocity": [
6.0, 10.392304420471191,
-10.392304420471191, 0.0,
0.0 6.0
], ],
"density": 1408.0, "density": 1408.0,
"color": [ "color": [
...@@ -66,14 +66,14 @@ ...@@ -66,14 +66,14 @@
"name": "蓝轨太阳C", "name": "蓝轨太阳C",
"mass": 2e+30, "mass": 2e+30,
"init_position": [ "init_position": [
299195744.0, -0.0,
0.0, 0.0,
0.0 299195744.0
], ],
"init_velocity": [ "init_velocity": [
6.0, -10.392304420471191,
10.392304420471191, 0.0,
0.0 6.0
], ],
"density": 1408.0, "density": 1408.0,
"color": [ "color": [
......
...@@ -4,14 +4,14 @@ ...@@ -4,14 +4,14 @@
"name": "红轨太阳A", "name": "红轨太阳A",
"mass": 2e+30, "mass": 2e+30,
"init_position": [ "init_position": [
-518222240.0,
0.0, 0.0,
518222240.0,
0.0 0.0
], ],
"init_velocity": [ "init_velocity": [
-19.0, -0.0,
0.0, 0.0,
0.0 -19.0
], ],
"density": 1408.0, "density": 1408.0,
"color": [ "color": [
...@@ -35,14 +35,14 @@ ...@@ -35,14 +35,14 @@
"name": "绿轨太阳B", "name": "绿轨太阳B",
"mass": 2e+30, "mass": 2e+30,
"init_position": [ "init_position": [
-299195744.0, -0.0,
0.0, 0.0,
0.0 -299195744.0
], ],
"init_velocity": [ "init_velocity": [
9.5, 16.454483032226562,
-16.454483032226562, 0.0,
0.0 9.5
], ],
"density": 1408.0, "density": 1408.0,
"color": [ "color": [
...@@ -66,14 +66,14 @@ ...@@ -66,14 +66,14 @@
"name": "蓝轨太阳C", "name": "蓝轨太阳C",
"mass": 2e+30, "mass": 2e+30,
"init_position": [ "init_position": [
299195744.0, -0.0,
0.0, 0.0,
0.0 299195744.0
], ],
"init_velocity": [ "init_velocity": [
9.5, -16.454483032226562,
16.454483032226562, 0.0,
0.0 9.5
], ],
"density": 1408.0, "density": 1408.0,
"color": [ "color": [
......
...@@ -48,7 +48,8 @@ if __name__ == '__main__': ...@@ -48,7 +48,8 @@ if __name__ == '__main__':
d = pow((body.raduis + bodies[idx - 1].raduis) * SIZE_SCALE, 1.0) * 1.1 d = pow((body.raduis + bodies[idx - 1].raduis) * SIZE_SCALE, 1.0) * 1.1
# d = (body.diameter + bodies[idx - 1].diameter) * SIZE_SCALE * 1.1 + D # d = (body.diameter + bodies[idx - 1].diameter) * SIZE_SCALE * 1.1 + D
body.init_velocity = [0, 0, 0] body.init_velocity = [0, 0, 0]
body.init_position = [body.raduis * SIZE_SCALE, (distance_sum + d), AU] # body.init_position = [body.raduis * SIZE_SCALE, (distance_sum + d), AU]
body.init_position = [-(distance_sum + d), AU, body.raduis * SIZE_SCALE]
distance_sum += d distance_sum += d
# 使用 ursina 查看的运行效果 # 使用 ursina 查看的运行效果
......
...@@ -15,7 +15,7 @@ if __name__ == '__main__': ...@@ -15,7 +15,7 @@ if __name__ == '__main__':
太阳、戴森球 太阳、戴森球
""" """
sun = Sun(size_scale=5e1, init_velocity=[0, 2, 0]) # 太阳放大 50 倍 sun = Sun(size_scale=5e1, init_velocity=[-2, 0, 0]) # 太阳放大 50 倍
bodies = [ bodies = [
sun, sun,
DysenSphere(size_scale=5e1, parent=sun), # 戴森球放大 50 倍 DysenSphere(size_scale=5e1, parent=sun), # 戴森球放大 50 倍
...@@ -28,4 +28,4 @@ if __name__ == '__main__': ...@@ -28,4 +28,4 @@ if __name__ == '__main__':
# 常用快捷键: P:运行和暂停 O:重新开始 I:显示天体轨迹 # 常用快捷键: P:运行和暂停 O:重新开始 I:显示天体轨迹
# position = 左-右+、上+下-、前+后- # position = 左-右+、上+下-、前+后-
ursina_run(bodies, SECONDS_PER_WEEK, position=(0, AU / 4, -3 * AU), ursina_run(bodies, SECONDS_PER_WEEK, position=(0, AU / 4, -3 * AU),
bg_music="sounds/universe_02.mp3") bg_music="sounds/interstellar.mp3")
...@@ -26,8 +26,10 @@ def show_text_bodies(): ...@@ -26,8 +26,10 @@ def show_text_bodies():
params={"camera_pos": camera_pos}) params={"camera_pos": camera_pos})
# 放一个恒星作为背景 # 放一个恒星作为背景
bg = FixedStar(name="bg", texture="fixed_star.png", mass=2e32, color=(0xff, 0xf8, 0xd4), bg = FixedStar(name="bg", texture="fixed_star.png", mass=2e32, color=(0xff, 0xf8, 0xd4),
init_position=[6000 * D, 450 * D, 100 * D], # [ 远+近- , 左+右- , 上+下-] # init_position=[6000 * D, 450 * D, 100 * D], # [ 远+近- , 左+右- , 上+下-]
init_position=[-450 * D, 100 * D, 6000 * D], # [ 远+近- , 左+右- , 上+下-]
ignore_mass=True) ignore_mass=True)
bodies.append(bg) bodies.append(bg)
# 使用 ursina 查看的运行效果 # 使用 ursina 查看的运行效果
......
...@@ -25,7 +25,8 @@ def show_eye_of_god(): ...@@ -25,7 +25,8 @@ def show_eye_of_god():
params={"camera_pos": camera_pos}) params={"camera_pos": camera_pos})
# 放一个恒星作为背景 # 放一个恒星作为背景
bg = FixedStar(name="bg", texture="fixed_star.png", mass=2e32, color=(0xff, 0xf8, 0xd4), bg = FixedStar(name="bg", texture="fixed_star.png", mass=2e32, color=(0xff, 0xf8, 0xd4),
init_position=[6000 * D, 400 * D, 100 * D], # [ 远+近- , 左+右- , 上+下-] # init_position=[6000 * D, 400 * D, 100 * D], # [ 远+近- , 左+右- , 上+下-]
init_position=[-400 * D, 100 * D, 6000 * D], # [ 远+近- , 左+右- , 上+下-]
ignore_mass=True) ignore_mass=True)
bodies.append(bg) bodies.append(bg)
......
...@@ -43,7 +43,11 @@ def gen_bodies_from_image(pixel_image, params, texture="color_body.png"): ...@@ -43,7 +43,11 @@ def gen_bodies_from_image(pixel_image, params, texture="color_body.png"):
def get_position(pos, scale): def get_position(pos, scale):
# return get_scaled_body_pos((camera_pos[2], camera_pos[0], camera_pos[1]), pos, scale) # return get_scaled_body_pos((camera_pos[2], camera_pos[0], camera_pos[1]), pos, scale)
return get_scaled_body_pos((camera_pos[2], camera_pos[1], camera_pos[0]), pos, scale) # return get_scaled_body_pos((camera_pos[2], camera_pos[1], camera_pos[0]), pos, scale)
return get_scaled_body_pos((camera_pos[0], camera_pos[1], camera_pos[2]), pos, scale)
# # body.init_position = [body.raduis * SIZE_SCALE, (distance_sum + d), AU]
# body.init_position = [-(distance_sum + d), AU, body.raduis * SIZE_SCALE]
# # [ 远+近- , 左+右- , 上+下-] # # [ 远+近- , 左+右- , 上+下-]
# return pos[0] + (scale - 1.0) * 300 * (random.randint(90, 110)) * D, pos[1], pos[2] # return pos[0] + (scale - 1.0) * 300 * (random.randint(90, 110)) * D, pos[1], pos[2]
...@@ -58,7 +62,7 @@ def gen_bodies_from_image(pixel_image, params, texture="color_body.png"): ...@@ -58,7 +62,7 @@ def gen_bodies_from_image(pixel_image, params, texture="color_body.png"):
width, height = img.size width, height = img.size
interval_factor = 20 # 星球间距因子 interval_factor = 20 # 星球间距因子
body_template = 'ColorBody(name="%s", mass=mass, color=(%d, %d, %d), size_scale=%.4f, ' \ body_template = 'ColorBody(name="%s", mass=mass, color=(%d, %d, %d), size_scale=%.4f, ' \
'init_position=get_position([0, %g * D, %g * D], %.4f), ' \ 'init_position=get_position([-%g * D, %g * D, 0], %.4f), ' \
f'init_velocity=[0, 0, 0], ignore_mass=True, texture="{texture}").set_light_disable(True)' f'init_velocity=[0, 0, 0], ignore_mass=True, texture="{texture}").set_light_disable(True)'
bodies_str = "[" bodies_str = "["
......
...@@ -18,10 +18,12 @@ if __name__ == '__main__': ...@@ -18,10 +18,12 @@ if __name__ == '__main__':
bodies = [ bodies = [
Sun(size_scale=2e1), # 太阳放大 20 倍 Sun(size_scale=2e1), # 太阳放大 20 倍
Earth(size_scale=1e3, # 地球放大 1000 倍 Earth(size_scale=1e3, # 地球放大 1000 倍
init_position=[0, -3 * AU, 0], # 地球距离太阳 3 个天文单位 # init_position=[0, -3 * AU, 0], # 地球距离太阳 3 个天文单位
init_position=[3 * AU, 0, 0], # 地球距离太阳 3 个天文单位
# TODO: 尝试调整朝向太阳的速度,取值 33、38、50 或者其他 # TODO: 尝试调整朝向太阳的速度,取值 33、38、50 或者其他
# init_velocity=[0, 33, -1], # init_velocity=[0, 33, -1],
init_velocity=[0, 38, -1], # 朝向太阳的速度为 38km/s,-1 km/s 是为了防止地球正面对着太阳冲去 # init_velocity=[0, 38, -1], # 朝向太阳的速度为 38km/s,-1 km/s 是为了防止地球正面对着太阳冲去
init_velocity=[-38, -1, 0], # 朝向太阳的速度为 38km/s,-1 km/s 是为了防止地球正面对着太阳冲去
# init_velocity=[0, 50, -1], # init_velocity=[0, 50, -1],
), ),
] ]
......
...@@ -16,12 +16,13 @@ if __name__ == '__main__': ...@@ -16,12 +16,13 @@ if __name__ == '__main__':
模拟流浪地球经过木星、土星加速 模拟流浪地球经过木星、土星加速
""" """
bodies = [ bodies = [
Jupiter(size_scale=1e2, init_position=[0, AU / 4, 0], init_velocity=[0, 0, 0]), # 木星放大 100 倍 Jupiter(size_scale=1e2, init_position=[-AU / 4, 0, 0], init_velocity=[0, 0, 0]), # 木星放大 100 倍
Saturn(size_scale=1e2, init_position=[AU/1.5, 1.5 * AU, 0], init_velocity=[0, 0, 0]), # 土星放大 100 倍 Saturn(size_scale=1e2, init_position=[-1.5 * AU, 0, AU / 1.5], init_velocity=[0, 0, 0]), # 土星放大 100 倍
Earth(size_scale=3e2, # 地球放大 300 倍 Earth(size_scale=3e2, # 地球放大 300 倍
init_position=[0, 0, 0], # init_position=[0, 0, 0], #
# init_velocity=[0, 33, -1], # init_velocity=[0, 33, -1],
init_velocity=[-1, 10, 0], # 朝向木星的速度为 38km/s,-1 km/s 是为了防止地球正面对着木星冲去 # init_velocity=[-1, 10, 0], # 朝向木星的速度为 38km/s,-1 km/s 是为了防止地球正面对着木星冲去
init_velocity=[-10, 0, -1], # 朝向木星的速度为 38km/s,-1 km/s 是为了防止地球正面对着木星冲去
# init_velocity=[0, 50, -1], # init_velocity=[0, 50, -1],
), ),
] ]
......
...@@ -17,13 +17,14 @@ if __name__ == '__main__': ...@@ -17,13 +17,14 @@ if __name__ == '__main__':
https://www.nasa.gov/mission_pages/NPP/news/earth-at-night.html https://www.nasa.gov/mission_pages/NPP/news/earth-at-night.html
https://www.nasa.gov/sites/default/files/images/712130main_8246931247_e60f3c09fb_o.jpg https://www.nasa.gov/sites/default/files/images/712130main_8246931247_e60f3c09fb_o.jpg
""" """
resolution = 500 resolution = 50
# resolution = 500
bodies = [ bodies = [
Earth(texture="earth_at_night_hd.jpg", Earth(texture="earth_at_night_hd.jpg",
init_position=[0, 0, 0], init_velocity=[0, 0, 0], init_position=[0, 0, 0], init_velocity=[0, 0, 0],
size_scale=100, ignore_mass=True).set_resolution(resolution), size_scale=100, ignore_mass=True).set_resolution(resolution),
Earth(texture="earth_hd.jpg", Earth(texture="earth_hd.jpg",
init_position=[0, 10, 0], init_velocity=[0, 0, 0], init_position=[-10, 0, 0], init_velocity=[0, 0, 0],
size_scale=100, ignore_mass=True).set_resolution(resolution) size_scale=100, ignore_mass=True).set_resolution(resolution)
] ]
# 使用 ursina 查看的运行效果 # 使用 ursina 查看的运行效果
......
...@@ -14,19 +14,23 @@ from bodies.body import AU ...@@ -14,19 +14,23 @@ from bodies.body import AU
if __name__ == '__main__': if __name__ == '__main__':
""" """
地球、月球 地球、月球
init_position=[x, y, z],
init_position=[-y, z, x],
init_velocity=[x, y, z],
init_velocity=[-y, z, x],
""" """
# 地球的Y方向初始速度 # 地球的Y方向初始速度
EARTH_INIT_VELOCITY = 0 EARTH_INIT_VELOCITY = 0
bodies = [ bodies = [
# sun, # sun,
Earth(init_position=[0, 0, 0], Earth(init_position=[0, 0, 0],
init_velocity=[0, EARTH_INIT_VELOCITY, 0], size_scale=0.5e1), # 地球放大 5 倍,距离保持不变 init_velocity=[-EARTH_INIT_VELOCITY, 0, 0], size_scale=0.5e1), # 地球放大 5 倍,距离保持不变
Moon(init_position=[363104, 0, 0], # 距地距离约: 363104 至 405696 km Moon(init_position=[0, 0, 363104], # 距地距离约: 363104 至 405696 km
init_velocity=[0, EARTH_INIT_VELOCITY + 1.023, 0], size_scale=1e1) # 月球放大 10 倍,距离保持不变 init_velocity=[-(EARTH_INIT_VELOCITY + 1.023), 0, 0], size_scale=1e1) # 月球放大 10 倍,距离保持不变
] ]
# mayavi_run(bodies, SECONDS_PER_HALF_DAY / 2, view_azimuth=-45) # mayavi_run(bodies, SECONDS_PER_HALF_DAY / 2, view_azimuth=-45)
# 使用 ursina 查看的运行效果 # 使用 ursina 查看的运行效果
# 常用快捷键: P:运行和暂停 O:重新开始 I:显示天体轨迹 # 常用快捷键: P:运行和暂停 O:重新开始 I:显示天体轨迹
# position = 左-右+、上+下-、前+后- # position = 左-右+、上+下-、前+后-
ursina_run(bodies, SECONDS_PER_MONTH, position=(-300000, 200000, -1300000), show_trail=True) ursina_run(bodies, SECONDS_PER_DAY, position=(-300000, 200000, -1300000), show_trail=True)
...@@ -32,4 +32,4 @@ if __name__ == '__main__': ...@@ -32,4 +32,4 @@ if __name__ == '__main__':
# 使用 ursina 查看的运行效果 # 使用 ursina 查看的运行效果
# 常用快捷键: P:运行和暂停 O:重新开始 I:显示天体轨迹 # 常用快捷键: P:运行和暂停 O:重新开始 I:显示天体轨迹
# position = 左-右+、上+下-、前+后- # position = 左-右+、上+下-、前+后-
ursina_run(bodies, 60, position=(0, 0, 0), show_trail=True, view_closely=0.001) ursina_run(bodies, 60, position=(0, 0, -4 * e.diameter), show_trail=True, view_closely=0.001)
...@@ -17,11 +17,11 @@ if __name__ == '__main__': ...@@ -17,11 +17,11 @@ if __name__ == '__main__':
bodies = [ bodies = [
Earth(texture="earth_hd.jpg", Earth(texture="earth_hd.jpg",
init_position=[0, 0, 0], init_velocity=[0, 0, 0], init_position=[0, 0, 0], init_velocity=[0, 0, 0],
size_scale=100, show_name=True) size_scale=1, show_name=True)
] ]
# 使用 ursina 查看的运行效果 # 使用 ursina 查看的运行效果
# 常用快捷键: P:运行和暂停 O:重新开始 I:显示天体轨迹 # 常用快捷键: P:运行和暂停 O:重新开始 I:显示天体轨迹
# position = 左-右+、上+下-、前+后- # position = 左-右+、上+下-、前+后-
ursina_run(bodies, SECONDS_PER_HOUR, position=(0, 30000, -2000000), ursina_run(bodies, SECONDS_PER_HOUR, position=(0, 0, -20000),
# cosmic_bg="textures/cosmic1.jpg", # cosmic_bg="textures/cosmic1.jpg",
view_closely=True) view_closely=0.001)
...@@ -17,11 +17,11 @@ if __name__ == '__main__': ...@@ -17,11 +17,11 @@ if __name__ == '__main__':
bodies = [ bodies = [
Mercury(texture="mercury_hd.tif", Mercury(texture="mercury_hd.tif",
init_position=[0, 0, 0], init_velocity=[0, 0, 0], init_position=[0, 0, 0], init_velocity=[0, 0, 0],
size_scale=100, show_name=True) size_scale=1, show_name=True)
] ]
# 使用 ursina 查看的运行效果 # 使用 ursina 查看的运行效果
# 常用快捷键: P:运行和暂停 O:重新开始 I:显示天体轨迹 # 常用快捷键: P:运行和暂停 O:重新开始 I:显示天体轨迹
# position = 左-右+、上+下-、前+后- # position = 左-右+、上+下-、前+后-
ursina_run(bodies, SECONDS_PER_DAY, position=(0, 30000, -800000), ursina_run(bodies, SECONDS_PER_DAY, position=(0, 0, -8000),
# cosmic_bg="textures/cosmic1.jpg", # cosmic_bg="textures/cosmic1.jpg",
view_closely=True) view_closely=0.001)
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
# python_version :3.8 # python_version :3.8
# ============================================================================== # ==============================================================================
from bodies import Pluto from bodies import Pluto
from common.consts import SECONDS_PER_WEEK, SECONDS_PER_DAY from common.consts import SECONDS_PER_HOUR, SECONDS_PER_DAY
from sim_scenes.func import ursina_run from sim_scenes.func import ursina_run
if __name__ == '__main__': if __name__ == '__main__':
...@@ -17,11 +17,11 @@ if __name__ == '__main__': ...@@ -17,11 +17,11 @@ if __name__ == '__main__':
bodies = [ bodies = [
Pluto(texture="pluto_hd.jpg", Pluto(texture="pluto_hd.jpg",
init_position=[0, 0, 0], init_velocity=[0, 0, 0], init_position=[0, 0, 0], init_velocity=[0, 0, 0],
size_scale=100, show_name=True) size_scale=2, show_name=True)
] ]
# 使用 ursina 查看的运行效果 # 使用 ursina 查看的运行效果
# 常用快捷键: P:运行和暂停 O:重新开始 I:显示天体轨迹 # 常用快捷键: P:运行和暂停 O:重新开始 I:显示天体轨迹
# position = 左-右+、上+下-、前+后- # position = 左-右+、上+下-、前+后-
ursina_run(bodies, SECONDS_PER_DAY, position=(0, 10000, -450000), ursina_run(bodies, SECONDS_PER_HOUR, position=(0, 0, -9000),
# cosmic_bg="textures/cosmic1.jpg", # cosmic_bg="textures/cosmic1.jpg",
view_closely=True) view_closely=0.001)
...@@ -17,11 +17,11 @@ if __name__ == '__main__': ...@@ -17,11 +17,11 @@ if __name__ == '__main__':
bodies = [ bodies = [
Venus(texture="venus_hd.jpg", Venus(texture="venus_hd.jpg",
init_position=[0, 0, 0], init_velocity=[0, 0, 0], init_position=[0, 0, 0], init_velocity=[0, 0, 0],
size_scale=100, show_name=True) size_scale=1, show_name=True)
] ]
# 使用 ursina 查看的运行效果 # 使用 ursina 查看的运行效果
# 常用快捷键: P:运行和暂停 O:重新开始 I:显示天体轨迹 # 常用快捷键: P:运行和暂停 O:重新开始 I:显示天体轨迹
# position = 左-右+、上+下-、前+后- # position = 左-右+、上+下-、前+后-
ursina_run(bodies, SECONDS_PER_DAY, position=(0, 30000, -1500000), ursina_run(bodies, SECONDS_PER_DAY, position=(0, 0, -20000),
# cosmic_bg="textures/cosmic1.jpg", # cosmic_bg="textures/cosmic1.jpg",
view_closely=True) view_closely=0.001)
...@@ -20,7 +20,7 @@ if __name__ == '__main__': ...@@ -20,7 +20,7 @@ if __name__ == '__main__':
# 以下展示的效果为太阳系真实的距离 # 以下展示的效果为太阳系真实的距离
# 由于宇宙空间尺度非常大,如果按照实际的天体大小,则无法看到天体,因此需要对天体的尺寸进行放大 # 由于宇宙空间尺度非常大,如果按照实际的天体大小,则无法看到天体,因此需要对天体的尺寸进行放大
sun = Sun(name="太阳", size_scale=0.8e2) # 太阳放大 80 倍,距离保持不变 sun = Sun(name="太阳", size_scale=0.8e2) # 太阳放大 80 倍,距离保持不变
# sun.init_velocity = [0, 0, 2] # 太阳带着其他行星一起跑 # sun.init_velocity = [0, 2, 0] # 太阳带着其他行星一起跑
bodies = [ bodies = [
sun, sun,
Mercury(name="水星", size_scale=4e3), # 水星放大 4000 倍,距离保持不变 Mercury(name="水星", size_scale=4e3), # 水星放大 4000 倍,距离保持不变
......
...@@ -49,16 +49,16 @@ if __name__ == '__main__': ...@@ -49,16 +49,16 @@ if __name__ == '__main__':
NUM_OF_ASTEROIDS = 10 NUM_OF_ASTEROIDS = 10
asteroids = [] asteroids = []
angles = np.linspace(0, 100 * np.pi, NUM_OF_ASTEROIDS) angles = np.linspace(0, 100 * np.pi, NUM_OF_ASTEROIDS)
pxs, pys, vxs, vys = get_positions_velocitys(angles, pxs, pzs, vxs, vzs = get_positions_velocitys(angles,
radius=1.60 * AU, radius=1.60 * AU,
velocity=23.37, velocity=23.37,
radius_offset=0.1 * AU, radius_offset=0.1 * AU,
velocity_offset=0.2) velocity_offset=0.2)
for i, px in enumerate(pxs): for i, px in enumerate(pxs):
py, fx, fy = pys[i], vxs[i], vys[i] pz, fx, fz = pzs[i], vxs[i], vzs[i]
asteroids.append(Asteroid(size_scale=3e9, # 小行星放大 5000000000 倍,距离放大 1.4 倍 asteroids.append(Asteroid(size_scale=3e9, # 小行星放大 5000000000 倍,距离放大 1.4 倍
init_position=[px, py, 0], init_position=[px, 0, pz],
init_velocity=[fx, fy, 0], init_velocity=[fx, 0, fz],
distance_scale=1.4)) distance_scale=1.4))
# endregion 2 # endregion 2
......
...@@ -17,18 +17,18 @@ if __name__ == '__main__': ...@@ -17,18 +17,18 @@ if __name__ == '__main__':
""" """
# 地球的Y方向初始速度 # 地球的Y方向初始速度
EARTH_INIT_VELOCITY = 0 # 0km/s EARTH_INIT_VELOCITY = 0 # 0km/s
sun = Sun(init_position=[AU, 0, 0], size_scale=2e1) # 太阳放大 20 倍 sun = Sun(init_position=[0, 0, AU], size_scale=2e1) # 太阳放大 20 倍
# 忽略质量的引力 # 忽略质量的引力 [x, y, z]->[-y, z, x]
sun.ignore_mass = True sun.ignore_mass = True
# 观看月相变化的过程:分别是 新月、蛾眉月、上弦月、盈凸、满月、亏凸、下弦月、残月 # 观看月相变化的过程:分别是 新月、蛾眉月、上弦月、盈凸、满月、亏凸、下弦月、残月
# 参考:images/moon/月相变化过程.jpeg # 参考:images/moon/月相变化过程.jpeg
# TODO: 月球在摄像机的前方(从 “新月” 开始) # TODO: 月球在摄像机的前方(从 “新月” 开始)
moon_pos, moon_vel = [384400, 0, 0], [0, EARTH_INIT_VELOCITY + 1.023, 0] # moon_pos, moon_vel = [0, 0, 384400], [-(EARTH_INIT_VELOCITY + 1.023), 0, 0]
# TODO: 月球在摄像机的右方(从 “下弦月” 开始),将会出现 # TODO: 月球在摄像机的右方(从 “下弦月” 开始),将会从右方出现
# moon_pos, moon_vel = [0, -384400, 0], [1.023, EARTH_INIT_VELOCITY, 0] # moon_pos, moon_vel = [384400, 0, 0], [-EARTH_INIT_VELOCITY, 0, 1.023]
# TODO: 月球在摄像机的左方(从 “上弦月” 开始) # TODO: 月球在摄像机的左方(从 “上弦月” 开始)
# moon_pos, moon_vel = [0, 384400, 0], [-1.023, EARTH_INIT_VELOCITY, 0] moon_pos, moon_vel = [-384400, 0, 0], [EARTH_INIT_VELOCITY, 0, -1.023]
bodies = [ bodies = [
sun, sun,
......
...@@ -27,6 +27,7 @@ if __name__ == '__main__': ...@@ -27,6 +27,7 @@ if __name__ == '__main__':
# p = 16 # TODO: 三体转圆形花 # p = 16 # TODO: 三体转圆形花
# p = 18 # TODO: 三体转圆形花 # p = 18 # TODO: 三体转圆形花
# p = 19 # TODO: 三体转圆形花 # p = 19 # TODO: 三体转圆形花
# [x, y, z]->[-y, z, x]
bodies = [ bodies = [
Sun(name="红轨太阳A", mass=mass, Sun(name="红轨太阳A", mass=mass,
init_position=[0, math.sqrt(3) * r, 0], init_position=[0, math.sqrt(3) * r, 0],
......
...@@ -19,9 +19,9 @@ if __name__ == '__main__': ...@@ -19,9 +19,9 @@ if __name__ == '__main__':
3、天体质量 mass 3、天体质量 mass
""" """
bodies = [ bodies = [
Sun(mass=1.5e30, init_position=[849597870.700, 0, 0], init_velocity=[0, 7.0, 0], Sun(mass=1.5e30, init_position=[849597870, 0, 0], init_velocity=[0, 7.0, 0],trail_color=(255,0,0),
size_scale=5e1, texture="sun1.jpg"), # 太阳放大 100 倍 size_scale=5e1, texture="sun1.jpg"), # 太阳放大 100 倍
Sun(mass=2e30, init_position=[0, 0, 0], init_velocity=[0, -8.0, 0], Sun(mass=1.5e30, init_position=[0, 0, 0], init_velocity=[0, -8.0, 0],
size_scale=5e1, texture="sun2.jpg"), # 太阳放大 100 倍 size_scale=5e1, texture="sun2.jpg"), # 太阳放大 100 倍
Earth(init_position=[0, 349597870.700, 0], init_velocity=[10.50, 0, 0], Earth(init_position=[0, 349597870.700, 0], init_velocity=[10.50, 0, 0],
size_scale=4e3, distance_scale=1), # 地球放大 4000 倍,距离保持不变 size_scale=4e3, distance_scale=1), # 地球放大 4000 倍,距离保持不变
...@@ -33,4 +33,4 @@ if __name__ == '__main__': ...@@ -33,4 +33,4 @@ if __name__ == '__main__':
# 使用 ursina 查看的运行效果 # 使用 ursina 查看的运行效果
# 常用快捷键: P:运行和暂停 O:重新开始 I:显示天体轨迹 # 常用快捷键: P:运行和暂停 O:重新开始 I:显示天体轨迹
# position = 左-右+、上+下-、前+后- # position = 左-右+、上+下-、前+后-
ursina_run(bodies, SECONDS_PER_YEAR, position=(AU, 2 * AU, -7 * AU), show_trail=True) ursina_run(bodies, SECONDS_PER_YEAR, position=(1.5 * AU, 0, -7 * AU), show_trail=True)
\ No newline at end of file \ No newline at end of file
...@@ -29,7 +29,7 @@ if __name__ == '__main__': ...@@ -29,7 +29,7 @@ if __name__ == '__main__':
# TODO: 去掉注释,完美数据的三体模型的演示05(画大花) # TODO: 去掉注释,完美数据的三体模型的演示05(画大花)
# bodies, params = Body.build_bodies_from_json('../data/tri_bodies_perfect_05.json') # bodies, params = Body.build_bodies_from_json('../data/tri_bodies_perfect_05.json')
# TODO: 去掉注释,引力弹弓的演示 # TODO: 去掉注释,引力弹弓的演示
# bodies, params = Body.build_bodies_from_json('../data/gravity_slingshot.json') bodies, params = Body.build_bodies_from_json('../data/gravity_slingshot.json')
dt = params["dt"] if "dt" in params else SECONDS_PER_YEAR dt = params["dt"] if "dt" in params else SECONDS_PER_YEAR
position = params["position"] if "position" in params else (0, 0, 0) position = params["position"] if "position" in params else (0, 0, 0)
......
...@@ -40,5 +40,14 @@ class BodyTrail(Entity): ...@@ -40,5 +40,14 @@ class BodyTrail(Entity):
v_arrow, v_line, v_text = create_arrow_line((0, 0, 0), tuple(vel_direction), parent=self, v_arrow, v_line, v_text = create_arrow_line((0, 0, 0), tuple(vel_direction), parent=self,
label=vel_info, color=color.red, alpha=0.8, arrow_scale=0.5) label=vel_info, color=color.red, alpha=0.8, arrow_scale=0.5)
if str(vel_info).startswith("0.00"):
v_text.parent = self
v_arrow.enabled = False
v_line.enabled = False
a_arrow, a_line, a_text = create_arrow_line((0, 0, 0), tuple(acc_direction), parent=self, a_arrow, a_line, a_text = create_arrow_line((0, 0, 0), tuple(acc_direction), parent=self,
label=acc_info, color=color.yellow, alpha=0.8, arrow_scale=0.5) label=acc_info, color=color.yellow, alpha=0.8, arrow_scale=0.5)
if str(acc_info).startswith("0.00"):
a_text.parent = self
a_arrow.enabled = False
a_line.enabled = False
...@@ -173,7 +173,7 @@ def clear_trails(self): ...@@ -173,7 +173,7 @@ def clear_trails(self):
self.trails.clear() self.trails.clear()
def create_fixed_star_lights(parent): def create_fixed_star_lights(fixed_star):
""" """
创建恒星的发光的效果、并作为灯光源 创建恒星的发光的效果、并作为灯光源
:param entity: :param entity:
...@@ -181,14 +181,14 @@ def create_fixed_star_lights(parent): ...@@ -181,14 +181,14 @@ def create_fixed_star_lights(parent):
""" """
# 如果是恒星(如:太阳),自身会发光,则需要关闭灯光 # 如果是恒星(如:太阳),自身会发光,则需要关闭灯光
parent.set_light_off() fixed_star.set_light_off()
# lights = [] # lights = []
# # 创建多个新的 Entity 对象,作为光晕的容器 # # 创建多个新的 Entity 对象,作为光晕的容器
# _color = color.rgba(1.0, 0.6, 0.2, 1) # _color = color.rgba(1.0, 0.6, 0.2, 1)
if hasattr(parent.body_view.body, "glows"): if hasattr(fixed_star.body_view.body, "glows"):
# glows = (glow_num:10, glow_scale:1.03 glow_alpha:0.1~1) # glows = (glow_num:10, glow_scale:1.03 glow_alpha:0.1~1)
glows = parent.body_view.body.glows glows = fixed_star.body_view.body.glows
if glows is not None: if glows is not None:
if isinstance(glows, tuple): if isinstance(glows, tuple):
if len(glows) == 3: if len(glows) == 3:
...@@ -210,16 +210,16 @@ def create_fixed_star_lights(parent): ...@@ -210,16 +210,16 @@ def create_fixed_star_lights(parent):
glow_alpha = glow_alphas[-1] glow_alpha = glow_alphas[-1]
# _color = color.white # _color = color.white
_color = parent.body_view.body.color _color = fixed_star.body_view.body.color
_color = color.rgba(_color[0] / 255, _color[1] / 255, _color[2] / 255, 1) _color = color.rgba(_color[0] / 255, _color[1] / 255, _color[2] / 255, 1)
for i in range(glow_num): for i in range(glow_num):
glow_entity = Entity(parent=parent, model='sphere', color=_color, glow_entity = Entity(parent=fixed_star, model='sphere', color=_color,
scale=math.pow(glow_scale, i + 1), alpha=glow_alpha) scale=math.pow(glow_scale, i + 1), alpha=glow_alpha)
if hasattr(parent.body_view.body, "light_on"): if hasattr(fixed_star.body_view.body, "light_on"):
if parent.body_view.body.light_on: if fixed_star.body_view.body.light_on:
for i in range(2): for i in range(2):
# 创建 PointLight 对象,作为恒星的灯光源 # 创建 PointLight 对象,作为恒星的灯光源
light = PointLight(parent=parent, intensity=10, range=10, color=color.white) light = PointLight(parent=fixed_star, intensity=10, range=10, color=color.white)
def merge_vectors(vectors): def merge_vectors(vectors):
...@@ -229,11 +229,11 @@ def merge_vectors(vectors): ...@@ -229,11 +229,11 @@ def merge_vectors(vectors):
# 计算速度的方向 # 计算速度的方向
direction = (x / value, y / value, z / value) direction = (x / value, y / value, z / value)
# 返回速度大小和速度方向 # 返回速度大小和速度方向
# return value, direction return value, direction
# return value, (direction[1], direction[0], direction[2]) # return value, (direction[1], direction[0], direction[2])
# return value, (direction[1], direction[2], direction[0]) # return value, (direction[1], direction[2], direction[0])
return value, (-direction[1], direction[2], direction[0]) # return value, (-direction[1], direction[2], direction[0])
def create_trail_info(body, trail): def create_trail_info(body, trail):
...@@ -256,10 +256,10 @@ def create_trail_info(body, trail): ...@@ -256,10 +256,10 @@ def create_trail_info(body, trail):
acc_direction = np.array(acc_direction) * 2 acc_direction = np.array(acc_direction) * 2
vel_position = vel_direction vel_position = vel_direction
vel_position = (vel_position[0], vel_position[1], vel_position[2]) # vel_position = (vel_position[0], vel_position[1], vel_position[2])
acc_position = acc_direction acc_position = acc_direction
acc_position = (acc_position[0], acc_position[1], acc_position[2]) # acc_position = (acc_position[0], acc_position[1], acc_position[2])
trail.entity_infos = {"velocity": [vel_info, vel_direction, vel_position], trail.entity_infos = {"velocity": [vel_info, vel_direction, vel_position],
"acceleration": [acc_info, acc_direction, acc_position]} "acceleration": [acc_info, acc_direction, acc_position]}
......
...@@ -100,7 +100,7 @@ class Planet(Entity): ...@@ -100,7 +100,7 @@ class Planet(Entity):
# 创建行星环(目前只有土星环) # 创建行星环(目前只有土星环)
create_rings(self) create_rings(self)
def turn(self): def update(self):
if hasattr(self.body, "torus_stars"): if hasattr(self.body, "torus_stars"):
# 星环小天体群(主要模拟小行星群,非一个天体)不受 body_size_factor 影响 # 星环小天体群(主要模拟小行星群,非一个天体)不受 body_size_factor 影响
self.scale = self.init_scale self.scale = self.init_scale
...@@ -110,9 +110,12 @@ class Planet(Entity): ...@@ -110,9 +110,12 @@ class Planet(Entity):
pos = self.body_view.position * UrsinaConfig.SCALE_FACTOR pos = self.body_view.position * UrsinaConfig.SCALE_FACTOR
if self.body.parent is None: if self.body.parent is None:
# TODO: ???????? # TODO: ????????
self.x = -pos[1] # self.x = -pos[1]
self.y = pos[2] # self.y = pos[2]
self.z = pos[0] # self.z = pos[0]
self.x = pos[0]
self.y = pos[1]
self.z = pos[2]
else: else:
self.follow_parent() self.follow_parent()
...@@ -146,12 +149,13 @@ class Planet(Entity): ...@@ -146,12 +149,13 @@ class Planet(Entity):
self.rotation_y, self.rotation_y,
self.rotation_z) self.rotation_z)
if UrsinaConfig.show_trail: if not hasattr(self.body, "show_trail") or self.body.show_trail:
# 有时候第一个位置不正确,所以判断一下有历史记录后在创建 if UrsinaConfig.show_trail:
if len(self.body.his_position()) > 1: # 有时候第一个位置不正确,所以判断一下有历史记录后在创建
create_trails(self) if len(self.body.his_position()) > 1:
else: create_trails(self)
clear_trails(self) else:
clear_trails(self)
if hasattr(self, "name_text"): if hasattr(self, "name_text"):
d = (camera.world_position - self.name_text.world_position).length() d = (camera.world_position - self.name_text.world_position).length()
...@@ -177,9 +181,12 @@ class Planet(Entity): ...@@ -177,9 +181,12 @@ class Planet(Entity):
break break
pos = self.f_parent.position * UrsinaConfig.SCALE_FACTOR pos = self.f_parent.position * UrsinaConfig.SCALE_FACTOR
# TODO: ???????? # TODO: ????????
self.x = -pos[1] # self.x = -pos[1]
self.y = pos[2] # self.y = pos[2]
self.z = pos[0] # self.z = pos[0]
self.x = pos[0]
self.y = pos[1]
self.z = pos[2]
def destroy_all(self): def destroy_all(self):
# 从天体系统中移除自己(TODO:暂时还不能移除) # 从天体系统中移除自己(TODO:暂时还不能移除)
......
...@@ -92,7 +92,7 @@ def create_arrow(height=0.5, width=0.1): ...@@ -92,7 +92,7 @@ def create_arrow(height=0.5, width=0.1):
def create_arrow_line(from_pos, to_pos, parent=None, label=None, def create_arrow_line(from_pos, to_pos, parent=None, label=None,
set_light_off=True, alpha=1.0, set_light_off=True, alpha=1.0, len_scale=0.5,
color=color.white, thickness=2, color=color.white, thickness=2,
arrow_scale=1, text_scale=50): arrow_scale=1, text_scale=50):
""" """
...@@ -103,6 +103,7 @@ def create_arrow_line(from_pos, to_pos, parent=None, label=None, ...@@ -103,6 +103,7 @@ def create_arrow_line(from_pos, to_pos, parent=None, label=None,
@param label: 箭头显示的文字 @param label: 箭头显示的文字
@param set_light_off: 是否设置为灯光关闭状态 @param set_light_off: 是否设置为灯光关闭状态
@param alpha: 透明度 @param alpha: 透明度
@param len_scale: 长度缩放
@param color: 箭头线颜色 @param color: 箭头线颜色
@param thickness: 线段粗细 @param thickness: 线段粗细
@param arrow_scale: 箭头缩放 @param arrow_scale: 箭头缩放
...@@ -111,12 +112,13 @@ def create_arrow_line(from_pos, to_pos, parent=None, label=None, ...@@ -111,12 +112,13 @@ def create_arrow_line(from_pos, to_pos, parent=None, label=None,
height = 0.5 * thickness height = 0.5 * thickness
width = 0.1 * thickness width = 0.1 * thickness
arrow_mesh = create_arrow(height, width) arrow_mesh = create_arrow(height, width)
verts = (Vec3(from_pos), Vec3(to_pos)) from_pos, to_pos = (Vec3(from_pos), Vec3(to_pos))
line = Entity(parent=parent, model=Mesh(vertices=verts, mode='line', thickness=thickness), line = Entity(parent=parent,
model=Mesh(vertices=(from_pos * len_scale, to_pos * len_scale), mode='line', thickness=thickness),
color=color, alpha=alpha) color=color, alpha=alpha)
arrow = Entity(parent=line, model=arrow_mesh, position=verts[1], arrow = Entity(parent=line, model=arrow_mesh, position=to_pos * len_scale,
scale=thickness * arrow_scale, color=color, alpha=alpha) scale=thickness * arrow_scale, color=color, alpha=alpha)
arrow.look_at(Vec3(to_pos) * 100) arrow.look_at(to_pos * 100)
if set_light_off: if set_light_off:
line.set_light_off() line.set_light_off()
......
...@@ -31,7 +31,7 @@ class UrsinaView(BodyView): ...@@ -31,7 +31,7 @@ class UrsinaView(BodyView):
:return: :return:
""" """
self.planet.turn() self.planet.update()
def appear(self): def appear(self):
pass pass
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册