diff --git a/common/system.py b/common/system.py index f6a7f0d62e1b590da3c105fa63ce3c7257e5e488..bc10b68f51c36a1d5ab72ab780f5dfd38bfcc380 100644 --- a/common/system.py +++ b/common/system.py @@ -194,7 +194,8 @@ class System(object): # m/s² = kg * m / m**3 # km/s² = kg * m / m**3 / 1e9 # acceleration = G * body2.mass * dx / (d ** 3) - acceleration += (G * body2.mass * r / np.linalg.norm(r) ** 3) / 1e9 + if np.linalg.norm(r) > 0.0: + acceleration += (G * body2.mass * r / np.linalg.norm(r) ** 3) / 1e9 body1.acceleration = acceleration diff --git a/objs/__init__.py b/objs/__init__.py index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..21407c4fca00d439e21a2768069484738b1c0c1d 100644 --- a/objs/__init__.py +++ b/objs/__init__.py @@ -0,0 +1,3 @@ +from objs.diamond import Diamond +from objs.football import Football +from objs.satellite import Satellite diff --git a/objs/diamond.py b/objs/diamond.py index 5c06c1181756e69ac66b53441db18460f25ea4e4..d347d8e7e73729e85a0c4b4054f423595c78184f 100644 --- a/objs/diamond.py +++ b/objs/diamond.py @@ -12,29 +12,32 @@ from objs.obj import Obj class Diamond(Obj): """ 钻石 + 密度:3.51g/cm³ """ def __init__(self, name="钻石", mass=5.97237e24, init_position=[0, 0, 0], init_velocity=[0, 0, 0], - texture="earth1.jpg", size_scale=1.0, distance_scale=1.0, - ignore_mass=False, + texture=None, size_scale=1.0, distance_scale=1.0, + ignore_mass=False, density=3.51e3, color=(7, 0, 162), trail_color=None, show_name=False, - parent=None): + parent=None, gravity_only_for=[]): params = { "name": name, "mass": mass, "init_position": init_position, "init_velocity": init_velocity, - "density": 5507.85, - "color": (7, 0, 162), + "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 + "parent": parent, + "gravity_only_for": gravity_only_for, + "model": "diamond" } super().__init__(**params) diff --git a/objs/football.py b/objs/football.py new file mode 100644 index 0000000000000000000000000000000000000000..54b1d667480c3b344178b6f6d62e4cb68d82e680 --- /dev/null +++ b/objs/football.py @@ -0,0 +1,46 @@ +# -*- 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) diff --git a/objs/models/__init__.py b/objs/models/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/objs/models/satelite.obj b/objs/models/satelite.obj new file mode 100644 index 0000000000000000000000000000000000000000..09d6032649443aef2c00ea539363098b2b554721 --- /dev/null +++ b/objs/models/satelite.obj @@ -0,0 +1,1123 @@ +# 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 diff --git a/objs/obj.py b/objs/obj.py index d1cdb53481ad5fbc425b3852af42c315106a2372..8deb6c5d96e8bdca9968779a91805fa4f4967d6d 100644 --- a/objs/obj.py +++ b/objs/obj.py @@ -12,6 +12,7 @@ import numpy as np import math from common.consts import AU import copy +import os class Obj(metaclass=ABCMeta): @@ -23,7 +24,8 @@ class Obj(metaclass=ABCMeta): density=5e3, color=(125 / 255, 125 / 255, 125 / 255), texture=None, size_scale=1.0, distance_scale=1.0, parent=None, ignore_mass=False, - trail_color=None, show_name=False): + trail_color=None, show_name=False, + gravity_only_for=[], model=None): """ 对象类 @param name: 对象名称 @@ -45,6 +47,8 @@ class Obj(metaclass=ABCMeta): self.__his_vel = [] self.__his_acc = [] self.__his_reserved_num = 200 + self.gravity_only_for = gravity_only_for + self.model = self.find_model(model) if name is None: name = getattr(self.__class__, '__name__') @@ -90,6 +94,21 @@ class Obj(metaclass=ABCMeta): 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): """ 设置忽略质量,True为引力失效 @@ -198,7 +217,7 @@ class Obj(metaclass=ABCMeta): 停止运动,将加速度和速度置零 @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] def stop_and_ignore_gravity(self): @@ -305,6 +324,10 @@ class Obj(metaclass=ABCMeta): @param body: @return: """ + if len(self.gravity_only_for) > 0: + if body in self.gravity_only_for: + return False + return True # TODO: 注意:这里的算法是基于牛顿的万有引力(质量为0不受引力的影响在对象物理学中是不严谨) if self.ignore_mass: return True diff --git a/objs/satellite.py b/objs/satellite.py new file mode 100644 index 0000000000000000000000000000000000000000..311e758d8c35281c703f2a548223c7d80524f55a --- /dev/null +++ b/objs/satellite.py @@ -0,0 +1,47 @@ +# -*- 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) diff --git a/sim_scenes/demo.py b/sim_scenes/demo.py index 8814d5ec603090c662a3c9d3397a5955ed84aef9..0f9ad1b426032777ffd581ea5ca2d3df453584aa 100644 --- a/sim_scenes/demo.py +++ b/sim_scenes/demo.py @@ -26,7 +26,7 @@ if __name__ == '__main__': Sun(name="抖音", mass=1.9891e30, init_position=[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 # 初始位置 x=1.12天文单位, y=0, z=0 @@ -35,10 +35,10 @@ if __name__ == '__main__': # 放大倍数为 5000 倍 # 距离保持不变 Earth(name="超人", mass=5.97237e24, - init_position=[2 * AU, 0, 0], - init_velocity=[0, 29.79, 0], + init_position=[0, 0, AU], + init_velocity=[-29.79, 0, 0], 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_run(bodies, SECONDS_PER_DAY, view_azimuth=135) @@ -49,4 +49,4 @@ if __name__ == '__main__': # 使用 ursina 查看的运行效果 # 常用快捷键: P:运行和暂停 O:重新开始 I:显示天体轨迹 # position = 左-右+、上+下-、前+后- - ursina_run(bodies, SECONDS_PER_WEEK, position=(0, AU, -5 * AU)) + ursina_run(bodies, SECONDS_PER_WEEK * 2, position=(0, AU, -5 * AU)) diff --git a/sim_scenes/earth/earth_satellites.py b/sim_scenes/earth/earth_satellites.py index ed0116d565543c5bc31bf12b4de42746470d26b3..2e7dc9a212eb352bff1fd75b575611dfa61a491a 100644 --- a/sim_scenes/earth/earth_satellites.py +++ b/sim_scenes/earth/earth_satellites.py @@ -7,8 +7,9 @@ # python_version :3.8 # ============================================================================== 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 sim_scenes.func import mayavi_run, ursina_run +from sim_scenes.func import mayavi_run, ursina_run, camera_look_at import math import random @@ -36,6 +37,10 @@ import random import random 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): # 万有引力常数 @@ -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]) # 北斗卫星高度为2.13-2.15万千米。GPS卫星平均轨道高度2.02万千米。 bodies = [earth] - for i in range(10): - altitude = random.randint(4000, 10000) - position, velocity = get_satellite_position_velocity(earth.mass, earth.init_position, earth.raduis, altitude) - satellite = Body(name=f'卫星{i + 1}', mass=4.4e10, size_scale=1e3, color=(255, 200, 0), - init_position=position, - init_velocity=velocity) + satellite_infos = [ + {"position": [0, 0, 10000], "velocity": [-6.3, 0, 0]}, + {"position": [0, 0, -12000], "velocity": [5.75, 0, 0]}, + {"position": [0, 8000, 0], "velocity": [7.05, 0, 0]}, + {"position": [0, -12000, 0], "velocity": [-5.75, 0, 0]}, + {"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) + + 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 查看的运行效果 # 常用快捷键: P:运行和暂停 O:重新开始 I:显示天体轨迹 # 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) diff --git a/sim_scenes/science/parabolic_curve.py b/sim_scenes/science/parabolic_curve.py index 3c5a9b61bcfb3ee0e72ab861ccd06c45289d40c4..09a9f211946f2812cd232b02cc2f60dcd40a6273 100644 --- a/sim_scenes/science/parabolic_curve.py +++ b/sim_scenes/science/parabolic_curve.py @@ -7,13 +7,14 @@ # python_version :3.8 # ============================================================================== from bodies import Moon, Earth, Body +from objs import Football 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 simulators.ursina.entities.body_timer import TimeData 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: 抛出去的速度 @@ -24,10 +25,10 @@ def create_ejected_object(velocity, raduis, trail_color, angle=10): """ # 根据速度、角度获取矢量速度(vx、vy) -> vx² + vy² = velocity² vx, vy = get_vector2d_velocity(velocity, angle=angle) - moon = Moon(name=f'物体速度:{velocity}', mass=500, size_scale=2e6, trail_color=trail_color, - init_position=[0, raduis, 0], - init_velocity=[vx, vy, 0], gravity_only_for_earth=True) # 仅适用于地球的重力,物体之间重力不要受到影响 - return moon + football = Football(name=f'物体速度:{velocity}', mass=500, size_scale=1e3, trail_color=trail_color, + init_position=[0, raduis, 0], + init_velocity=[vx, vy, 0], gravity_only_for=[gravity_only_for]) # 仅适用于地球的重力,物体之间重力不要受到影响 + return football if __name__ == '__main__': @@ -39,13 +40,13 @@ if __name__ == '__main__': raduis = earth.raduis + 300 # TODO: 4个不同的抛出速度 7.5km/s、8.5km/s、10km/s、11.2km/s(第二宇宙速度) # 粉色: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,飞不出地球太远,就落地 - 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,能飞出地球很远,但还是无法摆脱地球引力 - 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千米/秒为脱离地球引力的速度叫第二宇宙速度 - 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] @@ -64,10 +65,12 @@ if __name__ == '__main__': # 如果抛出物与地球相碰撞了,则静止不动(抛出物停止并忽略引力) obj.stop_and_ignore_gravity() + def on_reset(): for obj in [obj0, obj1, obj2, obj3]: obj.ignore_mass = False + # 订阅计时器事件(定时触发) UrsinaEvent.on_timer_changed_subscription(on_timer_changed) UrsinaEvent.on_reset_subscription(on_reset) diff --git a/simulators/simulator.py b/simulators/simulator.py index 61eb463bc38f8d32f252a7d0a28d5d5b868a776e..13f3f845cd689da96bdb1d800132440e3a1adb41 100644 --- a/simulators/simulator.py +++ b/simulators/simulator.py @@ -55,10 +55,13 @@ class Simulator(metaclass=ABCMeta): view.acceleration = body.acceleration view.velocity = body.velocity # viewer.volume = body.volume - view.raduis = body.raduis + if hasattr(body, "raduis"): + view.raduis = body.raduis view.his_position = body.his_position() - view.is_fixed_star = body.is_fixed_star - view.has_rings = body.has_rings + if hasattr(body, "is_fixed_star"): + view.is_fixed_star = body.is_fixed_star + if hasattr(body, "has_rings"): + view.has_rings = body.has_rings view.size_scale = body.size_scale view.distance_scale = body.distance_scale diff --git a/simulators/ursina/entities/planet.py b/simulators/ursina/entities/planet.py index d971d59f37733bee8ec934cfe6ec3ef64f0b4367..b41313eb78a66588fe8e919722c1eb4680cc8d02 100644 --- a/simulators/ursina/entities/planet.py +++ b/simulators/ursina/entities/planet.py @@ -33,12 +33,17 @@ class Planet(Entity): def __init__(self, body_view: BodyView): self.body_view = body_view - self.rotation_speed = self.body.rotation_speed + if hasattr(self.body, "rotation_speed"): + self.rotation_speed = self.body.rotation_speed self.rotMode = 'x' # random.choice(["x", "y", "z"]) self.name = body_view.name - pos = body_view.position * body_view.body.distance_scale * UrsinaConfig.SCALE_FACTOR - scale = body_view.body.diameter * body_view.body.size_scale * UrsinaConfig.SCALE_FACTOR + pos = body_view.position * self.body.distance_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 if hasattr(body_view, "texture"): texture = load_texture(body_view.texture) @@ -51,6 +56,8 @@ class Planet(Entity): b_color = (b_color[0], b_color[1], b_color[2], 1.0) self.plant_color = color.rgba(*b_color) + collider = "sphere" + if hasattr(self.body, "torus_stars"): # 创建一个星环小天体群(主要模拟小行星群,非一个天体) model = create_torus(0.83, 1.05, 64, 1) @@ -60,9 +67,17 @@ class Planet(Entity): subdivisions = 32 if self.body.resolution is not None: subdivisions = self.body.resolution - - model = create_sphere(0.5, subdivisions) - rotation = (0, 0, 0) + 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) + rotation = (0, 0, 0) UrsinaEvent.on_reset_subscription(self.on_reset) UrsinaEvent.on_body_size_changed_subscription(self.change_body_scale) @@ -73,7 +88,7 @@ class Planet(Entity): scale=scale, texture=texture, color=self.plant_color, - collider="sphere", + collider=collider, position=pos, rotation=rotation, double_sided=True @@ -88,9 +103,13 @@ class Planet(Entity): # 拖尾球体的初始化 trail_init(self) - if self.body.is_fixed_star: - # 如果是恒星,开启恒星的发光的效果、并作为灯光源 - create_fixed_star_lights(self) + if hasattr(self.body, "is_fixed_star"): + if self.body.is_fixed_star: + # 如果是恒星,开启恒星的发光的效果、并作为灯光源 + create_fixed_star_lights(self) + elif self.body.light_disable: + # 如果是非恒星,并且禁用灯光 + self.set_light_off() elif self.body.light_disable: # 如果是非恒星,并且禁用灯光 self.set_light_off() @@ -98,9 +117,10 @@ class Planet(Entity): if self.body.show_name: create_name_text(self) - if self.body.has_rings: - # 创建行星环(目前只有土星环) - create_rings(self) + if hasattr(self.body, "has_rings"): + if self.body.has_rings: + # 创建行星环(目前只有土星环) + create_rings(self) def change_body_scale(self): if hasattr(self.body, "torus_stars"): @@ -126,21 +146,23 @@ class Planet(Entity): dt = 0 if hasattr(self.body, "dt"): dt = self.body.dt - if self.rotation_speed is None or dt == 0: - self.rotspeed = 0 - # 旋转速度和大小成反比(未使用真实数据) - # self.rotspeed = 30000 / self.body_view.raduis # random.uniform(1.0, 2.0) - else: - # 是通过月球保持一面面对地球,调整得到 - self.rotspeed = self.rotation_speed * (dt / 3600) / 2.4 * \ - UrsinaConfig.ROTATION_SPEED_FACTOR * UrsinaConfig.body_spin_factor - # rotation_speed 度/小时 dt 秒 = (dt / 3600)小时 + if hasattr(self, "rotation_speed"): + if self.rotation_speed is None or dt == 0: + self.rotspeed = 0 + # 旋转速度和大小成反比(未使用真实数据) + # self.rotspeed = 30000 / self.body_view.raduis # random.uniform(1.0, 2.0) + else: + # 是通过月球保持一面面对地球,调整得到 + self.rotspeed = self.rotation_speed * (dt / 3600) / 2.4 * \ + UrsinaConfig.ROTATION_SPEED_FACTOR * UrsinaConfig.body_spin_factor + # rotation_speed 度/小时 dt 秒 = (dt / 3600)小时 # if self.rotation_y < 0: # self.rotation_y += 360 try: - # 天体旋转 - self.rotation_y -= self.rotspeed + if hasattr(self, "rotspeed"): + # 天体旋转 + self.rotation_y -= self.rotspeed except Exception as e: print(self.body) self.destroy_all() diff --git a/simulators/views/body_view.py b/simulators/views/body_view.py index 44d3d17a59d2d4801ec40a358931791479b8a743..21ee055170e5ee17240f9f01e9a09de2caa255f7 100644 --- a/simulators/views/body_view.py +++ b/simulators/views/body_view.py @@ -38,7 +38,10 @@ class BodyView(metaclass=ABCMeta): self.position = body.position self.name = body.name self.mass = body.mass - self.raduis = body.raduis + + if hasattr(body, "raduis"): + self.raduis = body.raduis + self.velocity = body.velocity self.appeared = True diff --git a/textures/football.jpg b/textures/football.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3daff87d62f8b3c33617842a352d6a852c73e508 Binary files /dev/null and b/textures/football.jpg differ diff --git a/textures/satelite.png b/textures/satelite.png new file mode 100644 index 0000000000000000000000000000000000000000..cbae374ac1ff5feb9748196b16e01488c3492a89 Binary files /dev/null and b/textures/satelite.png differ