# -*- coding:utf-8 -*-
# title           :木卫一Io
# description     :木卫一Io
# author          :Python超人
# date            :2023-02-11
# link            :https://gitcode.net/pythoncr/
# python_version  :3.8
# ==============================================================================
from bodies.body import Body, AU
from bodies import Jupiter


class Ganymede(Body):
    """
    木卫三（盖尼米得，Ganymede，Γανυμήδης）是围绕木星运转的一颗卫星，公转周期约为7天。
    按距离木星从近到远排序，在木星的所有卫星中排第七，在伽利略卫星中排第三。它与木卫二及木卫一保持着1:2:4的轨道共振关系。
    ------------------------

中文名木卫三外文名Ganymede，Γανυμήδης别    名盖尼米得分    类卫星发现时间1610年

平均密度1.936 g/cm³
直    径5262 km表
面温度-160 ℃
逃逸速度4 km/s反照率0.43视星等4.6 等自转周期7天离心率0.003
公转周期7天轨道倾角0.20 度表面积87000000km²
体    积7.6×10¹⁰ km³
表面引力1.428 m/s²
平均半径2632.1km大气成分氧气，原子氧，臭氧

轨道参数：
所属行星：木星
平均半径：1,070,400km（0.007155 AU）
离心率：0.003
近拱点：1,069,200km（0.007147 AU）
远拱点：1,071,600km（0.007163 AU）
公转周期：约7天
公转速度：平均10.880km/s
轨道倾角：2.21（黄道夹角）0.20（木星赤道夹角）
物理性质：
平均半径：2,631.2km（地球的0.413倍）
表面积：87.000,000平方千米（地球的0.12倍）
体积：7.6×10¹⁰（地球的0.0705倍）
质量：1.4819×10²³（地球的0.025倍）
平均密度：1.936g/cm
表面引力：1.428m/s
逃逸速度：3km/s
自转周期：7天
转轴倾角：0-0.33
反照率：0.43±0.02
表面温度：最高122K 平均99K 最低：22k
视星等∶5（oppositition）
大气压：极小
大气成份：氧气，原子氧，臭氧

    　逃逸速度: 3 km/s
    　天体质量: 1.4819×10²³ kg
    　平均密度: 1.936 g/cm³ -> 1.936✕10³ kg/m³
    """

    def __init__(self, name="木卫三", mass=1.4819e23,
                 init_position=[0, 0, 1069200],
                 init_velocity=[-10.880, 0, 0],
                 texture="jupiter_ganymede.jpg", size_scale=1.0, distance_scale=1.0,
                 rotation_speed=0.25, ignore_mass=False,
                 trail_color=None, show_name=False,
                 gravity_only_for_jupiter=False):
        """
        @param name: 木卫名称
        @param mass: 木卫质量 (kg)
        @param init_position: 初始位置 (km)
        @param init_velocity: 初始速度 (km/s)
        @param texture: 纹理图片
        @param size_scale: 尺寸缩放
        @param distance_scale: 距离缩放
        @param rotation_speed: 自旋速度（度/小时）
        @param ignore_mass: 是否忽略质量（如果为True，则不计算引力）
                            TODO: 注意：这里的算法是基于牛顿的万有引力（质量为0不受引力的影响在天体物理学中是不严谨）
        @param trail_color:木卫拖尾颜色（默认天体颜色）
        @param show_name: 是否显示木卫名称
        @param gravity_only_for_jupiter: 如果为True，则仅适用于木星的重力，与其他天体之间的重力不会受到影响
        """
        params = {
            "name": name,
            "mass": mass,
            "init_position": init_position,
            "init_velocity": init_velocity,
            "density": 1.936e3,
            "color": (162, 162, 162),
            "texture": texture,
            "size_scale": size_scale,
            "distance_scale": distance_scale,
            "rotation_speed": rotation_speed,
            "ignore_mass": ignore_mass,
            "trail_color": trail_color,
            "show_name": show_name
        }
        super().__init__(**params)
        self.gravity_only_for_jupiter = gravity_only_for_jupiter

    def ignore_gravity_with(self, body):
        """
        是否忽略指定天体的引力
        @param body:
        @return:
        """
        if self.ignore_mass:
            return True

        if self.gravity_only_for_jupiter:
            # 只对木星有引力，忽略其他的引力
            if isinstance(body, Jupiter):
                return False
        else:
            return False

        return True


if __name__ == '__main__':
    ganymede = Ganymede()
    print(ganymede)
