【问题标题】:VPython Object RevolutionVPython 对象革命
【发布时间】:2018-11-09 15:05:23
【问题描述】:

目前必须使用 VPython,我想制作一个太阳系的模型。

目前我拥有所有行星和轨道环,但是,我发现实际的轨道非常困难。

GlowScript 2.7 VPython
from visual import *



# Declaring Celestial Body Objects
Sun     = sphere(pos =     vec(0, 0, 0), radius =   10, color = color.yellow)
Mercury = sphere(pos =    vec(25, 0, 0), radius =    2, color =  color.green)
Venus   = sphere(pos =    vec(40, 0, 0), radius =  2.5, color =    color.red)
Earth   = sphere(pos =    vec(50, 0, 0), radius = 2.65, color =   color.blue)
Mars    = sphere(pos =    vec(70, 0, 0), radius =  2.3, color =    color.red)
Jupiter = sphere(pos =    vec(90, 0, 0), radius =    3, color = color.orange)
Saturn  = sphere(pos =   vec(105, 0, 0), radius =  2.9, color = color.orange)
Uranus  = sphere(pos = vec(117.5, 0, 0), radius =  2.9, color = color.orange)
Neptune = sphere(pos =   vec(135, 0, 0), radius =  2.8, color =   color.blue)
Pluto   = sphere(pos =   vec(165, 0, 0), radius =  1.5, color =  color.white)



# Declaring Orbital Rings of Celestial Body Objects
Mercury.ring = ring(pos = vec(0, 0, 0), axis = vec(0, 1, 0), size = vec(0.1, Mercury.pos.x * 2, Mercury.pos.x * 2))
Venus.ring   = ring(pos = vec(0, 0, 0), axis = vec(0, 1, 0), size = vec(0.1, Venus.pos.x * 2, Venus.pos.x * 2))
Earth.ring   = ring(pos = vec(0, 0, 0), axis = vec(0, 1, 0), size = vec(0.1, Earth.pos.x * 2, Earth.pos.x * 2))
Mars.ring    = ring(pos = vec(0, 0, 0), axis = vec(0, 1, 0), size = vec(0.1, Mars.pos.x * 2, Mars.pos.x * 2))
Jupiter.ring = ring(pos = vec(0, 0, 0), axis = vec(0, 1, 0), size = vec(0.1, Jupiter.pos.x * 2, Jupiter.pos.x * 2))
Saturn.ring  = ring(pos = vec(0, 0, 0), axis = vec(0, 1, 0), size = vec(0.1, Saturn.pos.x * 2, Saturn.pos.x * 2))
Uranus.ring  = ring(pos = vec(0, 0, 0), axis = vec(0, 1, 0), size = vec(0.1, Uranus.pos.x * 2, Uranus.pos.x * 2))
Neptune.ring = ring(pos = vec(0, 0, 0), axis = vec(0, 1, 0), size = vec(0.1, Neptune.pos.x * 2, Neptune.pos.x * 2))
Pluto.ring   = ring(pos = vec(0, 0, 0), axis = vec(0, 1, 0), size = vec(0.1, Pluto.pos.x * 2, Pluto.pos.x * 2))



# Infinite Loop
while 1 == 1:

    Mercury.rotate(angle = radians(360), axis = vec(Mercury.pos.y, Mercury.pos.x, 0), origin = vec(0, 0, 0))
    rate(50)

print("Error! Escaped While Loop!")

当我用Mercury.rotate(angle = 0.0174533, axis = vec(0, Mercury.pos.x, 0), origin = vec(0, 0, 0)) 切换rotate 方法时,它会正确旋转...但仅旋转四分之一。我已经阅读了与 this 相关的所有内容,但不适用。

在四分之一公转之后,当角度更大时,行星有时会决定猛烈地“夺取”。这似乎是某种障碍。

【问题讨论】:

    标签: rotation translate-animation vpython


    【解决方案1】:

    你应该写axis=vec(0,1,0)。旋转轴需要始终向上。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多