func.py 3.3 KB
Newer Older
M
march3 已提交
1
# -*- coding:utf-8 -*-
M
march3 已提交
2 3
# title           :场景用功能库
# description     :场景用功能库
M
march3 已提交
4
# author          :Python超人
M
march3 已提交
5 6
# date            :2023-02-11
# link            :https://gitcode.net/pythoncr/
M
march3 已提交
7 8 9 10 11 12 13 14 15 16 17 18
# python_version  :3.8
# ==============================================================================
from common.consts import SECONDS_PER_WEEK
from common.system import System


def mayavi_run(bodies, dt=SECONDS_PER_WEEK,
               view_azimuth=0, view_distance='auto', view_focalpoint='auto',
               bgcolor=(1 / 255, 1 / 255, 30 / 255)):
    """
    用 mayavi 查看运行效果
    :param bodies: 天体
M
march3 已提交
19
    :param dt: 单位:秒,按时间差进行演变,值越小越精确,但演变速度会慢。
M
march3 已提交
20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
    :param view_azimuth: 观测方位角,可选,float类型(以度为单位,0-360),用x轴投影到x-y平面上的球体上的位置矢量所对的角度。
    :param view_distance: 观测距离,可选,float类型 or 'auto',一个正浮点数,表示距放置相机的焦点的距离。
    :param view_focalpoint: 观测焦点,可选,类型为一个由3个浮点数组成的数组 or 'auto',,代表观测相机的焦点
    :param bgcolor:
    :return:
    """
    from mayavi import mlab
    from simulators.mayavi_simulator import MayaviSimulator
    # 宇宙背景色
    mlab.figure(bgcolor=bgcolor, size=(1440, 810))
    body_sys = System(bodies)
    simulator = MayaviSimulator(body_sys)
    simulator.run(dt)
    # azimuth:
    #    观测方位角,可选,float类型(以度为单位,0-360),用x轴投影到x-y平面上的球体上的位置矢量所对的角度。
    # elevation:
    #    观测天顶角,可选,float类型(以度为单位,0-180), 位置向量和z轴所对的角度。
    # distance:
    #    观测距离,可选,float类型 or 'auto',一个正浮点数,表示距放置相机的焦点的距离。
    #    Mayavi 3.4.0中的新功能:'auto' 使得距离为观察所有对象的最佳位置。
    # focalpoint:
    #    观测焦点,可选,类型为一个由3个浮点数组成的数组 or 'auto',,代表观测相机的焦点
    #    Mayavi 3.4.0中的新功能:'auto',则焦点位于场景中所有对象的中心。
    # roll:
    #    控制滚动,可选,float类型,即摄影机围绕其轴的旋转
    # reset_roll:
    #    布尔值,可选。如果为True,且未指定“滚动”,则重置相机的滚动方向。
    # figure:
    #    要操作的Mayavi图形。如果为 None,则使用当前图形。
    mlab.view(azimuth=view_azimuth, distance=view_distance, focalpoint=view_focalpoint)
    # mlab.view(azimuth=-45, elevation=45, distance=100e8 * 2 * 2 * 4 * 4, focalpoint=[5e10, 5e10, 5e9])
    mlab.show()
M
march3 已提交
52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77


def mpl_run(bodies, dt=SECONDS_PER_WEEK):
    """

    :param bodies: 天体
    :param dt: 单位:秒,按时间差进行演变,值越小越精确,但演变速度会慢。
    :return:
    """
    from simulators.mpl_simulator import MplSimulator
    body_sys = System(bodies)
    simulator = MplSimulator(body_sys)
    simulator.run(dt)


if __name__ == '__main__':
    from bodies import Sun, Earth

    """
    太阳、地球
    """
    bodies = [
        Sun(size_scale=1.2e2),  # 太阳放大 120 倍
        Earth(size_scale=4e3, distance_scale=1),  # 地球放大 4000 倍,距离保持不变
    ]
    mpl_run(bodies, SECONDS_PER_WEEK)