Новое в программировании - неизвестная ошибка

Я в основном полностью знаком с программированием, занимался им около 3 дней, и я довольно быстро заинтересовался - в качестве упражнения, которое поможет мне учиться, я выбрал пробную версию, просто войдя прямо в систему и используя vPython, чтобы попробовать создать симулятор снукера.

Пока все идет хорошо, у меня есть все модели для стола, подушек, карманных челюстей и т. Д., И мне удалось заставить шарики отскочить от подушек и челюстей реалистичным способом. Я также заставляю шарики замедляться со скоростью, пропорциональной их скорости - все это довольно простые вещи, которые я знаю, но я здесь новичок, так что все это действительно захватывающе.

Во всяком случае - проблема. Я создаю функцию, в которую вводятся два шара, и она сначала определяет, находятся ли они в контакте, а затем заставляет их менять направление (ударяя друг друга). Пока у меня есть это:

def ballhit(ball1,ball2):

    v1 = ball1.velocity
    v2 = ball2.velocity
    btb = ball1.pos - ball2.pos # Ball To Ball
    nbtb = btb/abs(btb) # Normalised btb
    if abs(ball1.velocity) == 0:
        theta1 = 0
    else:
        theta1 = acos(abs(ball1.velocity.x)/abs(ball1.velocity))
    if abs(ball2.velocity) == 0:
        theta2 = 0
    else:
        theta2 = acos(abs(ball2.velocity.x)/abs(ball2.velocity))
    phi = acos(abs(vector(1,0,0))/abs(nbtb))

    ball1.velocity.x = ((2*bm*ball2.velocity*cos(theta2-phi)*cos(phi))/2*bm) + ball1.velocity*(sin(theta1-phi))*(cos(phi+(pi/2)))

    ball1.velocity.y = ((2*bm*ball2.velocity*cos(theta2-phi)*sin(phi))/2*bm) + ball1.velocity*(sin(theta1-phi))*(sin(phi+(pi/2)))

    ball2.velocity.x = ((2*bm*ball1.velocity*cos(theta1-phi)*cos(phi))/2*bm) + ball2.velocity*(sin(theta2-phi))*(cos(phi+(pi/2)))

    ball2.velocity.y = ((2*bm*ball1.velocity*cos(theta1-phi)*sin(phi))/2*bm) + ball2.velocity*(sin(theta2-phi))*(sin(phi+(pi/2)))

    return ball1.velocity
    return ball2.velocity

Два тэта-значения - это углы, которые шарики образуют с осью x, значение phi - это угол, который нормаль (которая также нормализована) в точке соприкосновения с осью x, затем мои вычисления для каждого из компонентов каждого шара. Насколько я могу судить, расчеты верны, но то, как я это написал, должно быть абсолютно ужасным (как я и ожидал).

Это ошибка, которую я получаю:

line 320, in <module>
ballhit(red1,blue)
line 302, in ballhit
ball1.velocity.x = ((2*bm*ball2.velocity*cos(theta2-phi)*cos(phi))/2*bm) +
ball1.velocity*(sin(theta1-phi))*(cos(phi+(pi/2))) ArgumentError:
Python argument types in
None.None(vector, vector) did not match C++ signature:
None(class cvisual::vector {lvalue}, double)

Я определил скорость для обоих шаров, и нет никаких других неназначенных переменных из того, что я вижу.

Если бы кто-то мог просто объяснить мне, что на самом деле означает ошибка, она будет оценена, и если бы кто-то мог показать мне, как ее исправить, это было бы двойной точкой.

Спасибо:)

0 ответов

Другие вопросы по тегам