编程语言
首页 > 编程语言> > python – 试图让两个质量互相绕轨道……得到奇怪的错误

python – 试图让两个质量互相绕轨道……得到奇怪的错误

作者:互联网

基本上,我创造了质量,给了他们一些速度和动量,我试图利用重力的力量使它们相互绕轨道运行(围绕它们的质心).

from visual import *

earth = sphere(radius = 100000000)
newPlanet = sphere(pos = (3.84403*10**8, 0, 0), radius = 10000000)

earth.velocity = vector(0, 100, 0)
newPlanet.velocity = vector(0, 100, 0)

earth.mass = 2*10**30
newPlanet.mass = 1*10**30

earth.p = vector(0, earth.mass*earth.velocity, 0)
newPlanet.p = vector(0, newPlanet.mass*newPlanet.velocity, 0)

dt = 1000
r = newPlanet.pos.x
T = 1.296*10**6
G = 6.673*10**-11

while 1:
    Fnet = G*((earth.mass*newPlanet.mass)/r**2)

    earth.p += Fnet*dt
    newPlanet.p += Fnet*dt

    earth.velocity += (earth.p/earth.mass)*dt
    newPlanet.velocity += (newPlanet.p/newPlanet.mass)*dt

    earth.pos += earth.velocity*dt
    newPlanet.pos += newPlanet.velocity*dt

    t += 1

    rate(100)

这是我得到的错误:

Traceback (most recent call last):
  File "Untitled", line 12
    earth.p = vector(0, earth.mass*earth.velocity, 0)
Boost.Python.ArgumentError: Python argument types in
    vector.__init__(vector, int, vector, int)
did not match C++ signature:
    __init__(struct _object *, class cvisual::vector)
    __init__(struct _object *)
    __init__(struct _object *, double)
    __init__(struct _object *, double, double)
    __init__(struct _object *, double, double, double)

解决方法:

vector使用三个数字作为参数,如vpython文档here所示

在你的任务中,earth.p = vector(0,earth.mass * earth.velocity,0),earth.mass * earth.velocity是一个向量,因为typeof(earth.mass * earth.velocity)将指示而不是数字为预期.

因此错误信息,你确定你不是故意的

earth.p = vector(0,earth.mass * mag(earth.velocity),0)

或者earth.p = vector(0,earth.mass * earth.velocity.y,0).

标签:python,vpython
来源: https://codeday.me/bug/20190902/1791077.html