From 64e2ac9b284ae24b7933543fbdaa454842576533 Mon Sep 17 00:00:00 2001 From: march3 Date: Sat, 1 Jul 2023 12:26:51 +0800 Subject: [PATCH] =?UTF-8?q?Python=E8=B6=85=E4=BA=BA-=E5=AE=87=E5=AE=99?= =?UTF-8?q?=E6=A8=A1=E6=8B=9F=E5=99=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bodies/__init__.py | 1 + bodies/asteroids.py | 16 ++++++--- bodies/habitable_zone.py | 16 ++++++--- bodies/torus_zone.py | 75 ++++++++++++++++++++++++++++++++++++++++ 4 files changed, 98 insertions(+), 10 deletions(-) create mode 100644 bodies/torus_zone.py diff --git a/bodies/__init__.py b/bodies/__init__.py index 7786eb6..518ecbc 100644 --- a/bodies/__init__.py +++ b/bodies/__init__.py @@ -11,6 +11,7 @@ from bodies.uranus import Uranus from bodies.venus import Venus from bodies.moon import Moon from bodies.asteroid import Asteroid +from bodies.torus_zone import TorusZone from bodies.asteroids import Asteroids from bodies.habitable_zone import HabitableZone diff --git a/bodies/asteroids.py b/bodies/asteroids.py index 1baa317..41f2aeb 100644 --- a/bodies/asteroids.py +++ b/bodies/asteroids.py @@ -7,9 +7,10 @@ # python_version :3.8 # ============================================================================== from bodies.body import Body, AU +from bodies.torus_zone import TorusZone -class Asteroids(Body): +class Asteroids(TorusZone): """ 小行星群 质量 (kg):~4.1×1010 kg @@ -29,7 +30,11 @@ class Asteroids(Body): def __init__(self, name="小行星群", mass=1.9891e30, init_position=[0, 0, 0], init_velocity=[0, 0, 0], - texture="asteroids.png", size_scale=1.0, + texture="asteroids.png", + inner_radius=2.17, + outer_radius=3.64, + subdivisions=64, + size_scale=1.0, distance_scale=1.0, rotation_speed=0.002, # 小行星绕太阳转一圈的时间在数年到几十年之间不等。 parent=None): @@ -38,8 +43,9 @@ class Asteroids(Body): "mass": mass, "init_position": init_position, "init_velocity": init_velocity, - "density": 1.408e3, - "color": (179, 231, 255), + "inner_radius": inner_radius, + "outer_radius": outer_radius, + "subdivisions": subdivisions, "texture": texture, "size_scale": size_scale, "distance_scale": distance_scale, @@ -51,7 +57,7 @@ class Asteroids(Body): # self.torus_stars = True # 环状星群带(inner_radius, outer_radius, subdivisions) # inner_radius:内圆半径 outer_radius:外圆半径,subdivisions:细分数,控制圆环的细节和精度 - self.torus_zone = 2.17, 3.64, 64 + # self.torus_zone = 2.17, 3.64, 64 def ignore_gravity_with(self, body): """ diff --git a/bodies/habitable_zone.py b/bodies/habitable_zone.py index 1f8309f..f999ba8 100644 --- a/bodies/habitable_zone.py +++ b/bodies/habitable_zone.py @@ -7,9 +7,10 @@ # python_version :3.8 # ============================================================================== from bodies.body import Body, AU +from bodies.torus_zone import TorusZone -class HabitableZone(Body): +class HabitableZone(TorusZone): """ 模拟太阳系宜居带: 目前认为 太阳系 的宜居带范围是从距离太阳0.95个天文单位 (约1.42亿千米)到 2.4个天文单位(约3.59亿千米)的范围为宜居带, @@ -19,7 +20,11 @@ class HabitableZone(Body): def __init__(self, name="宜居带", mass=1.9891e30, init_position=[0, 0, 0], init_velocity=[0, 0, 0], - texture="green_alpha_1.png", size_scale=1.0, + texture="green_alpha_1.png", + inner_radius=0.95, + outer_radius=1.67, + subdivisions=64, + size_scale=1.0, distance_scale=1.0, rotation_speed=0, parent=None): @@ -28,8 +33,9 @@ class HabitableZone(Body): "mass": mass, "init_position": init_position, "init_velocity": init_velocity, - "density": 1.408e3, - "color": (179, 231, 255), + "inner_radius": inner_radius, + "outer_radius": outer_radius, + "subdivisions": subdivisions, "texture": texture, "size_scale": size_scale, "distance_scale": distance_scale, @@ -39,7 +45,7 @@ class HabitableZone(Body): super().__init__(**params) # 环状宜居带(inner_radius, outer_radius, subdivisions) # inner_radius:内圆半径 outer_radius:外圆半径,subdivisions:细分数,控制圆环的细节和精度 - self.torus_zone = 0.95, 1.67, 64 + # self.torus_zone = 0.95, 1.67, 64 # 使用 texture="red_green_blue.png", # self.torus_zone = 0.20, 6.00, 64 diff --git a/bodies/torus_zone.py b/bodies/torus_zone.py new file mode 100644 index 0000000..080ecb6 --- /dev/null +++ b/bodies/torus_zone.py @@ -0,0 +1,75 @@ +# -*- coding:utf-8 -*- +# title :小行星 +# description :小行星 +# author :Python超人 +# date :2023-07-01 +# link :https://gitcode.net/pythoncr/ +# python_version :3.8 +# ============================================================================== +from bodies.body import Body, AU + + +class TorusZone(Body): + """ + 模拟环形区域: + """ + + def __init__(self, name="宜居带", mass=1.9891e30, + init_position=[0, 0, 0], + init_velocity=[0, 0, 0], + texture="green_alpha_1.png", + inner_radius=0.95, + outer_radius=1.67, + subdivisions=64, + size_scale=1.0, + distance_scale=1.0, + rotation_speed=0, + parent=None): + """ + + @param name: 天体名称 + @param mass: 天体质量 (kg) + @param init_position: 初始位置 (km) + @param init_velocity: 初始速度 (km/s) + @param texture: 纹理图片 + @param inner_radius: 内圆半径 + @param outer_radius: 外圆半径 + @param subdivisions: 细分数,控制圆环的细节和精度 + @param size_scale: 尺寸缩放 + @param distance_scale: 距离缩放 + @param rotation_speed: 自旋速度(度/小时) + @param parent: 天体的父对象 + """ + params = { + "name": name, + "mass": mass, + "init_position": init_position, + "init_velocity": init_velocity, + "density": 1.408e3, + "color": (179, 231, 255), + "texture": texture, + "size_scale": size_scale, + "distance_scale": distance_scale, + "rotation_speed": rotation_speed, + "parent": parent + } + super().__init__(**params) + # 环状带(inner_radius, outer_radius, subdivisions) + self.torus_zone = inner_radius, outer_radius, subdivisions + + def ignore_gravity_with(self, body): + """ + 是否忽略指定天体的引力 + @param body: + @return: + """ + # 小行星只对恒星有引力,忽略其他行星的引力 + # if body.is_fixed_star: + return True + + # return True + + +if __name__ == '__main__': + habitable_zone = HabitableZone() + print(habitable_zone) -- GitLab