Новое в программировании - неизвестная ошибка
Я в основном полностью знаком с программированием, занимался им около 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)
Я определил скорость для обоих шаров, и нет никаких других неназначенных переменных из того, что я вижу.
Если бы кто-то мог просто объяснить мне, что на самом деле означает ошибка, она будет оценена, и если бы кто-то мог показать мне, как ее исправить, это было бы двойной точкой.
Спасибо:)