我有一个角色()试图从NPC(Bu
)“保存”另一个字符(Ho
)的2D游戏。二维弹丸弹道计算与半径
和Bu
具有恒定的速度(sally是静止的)。
我需要弄清楚如何在以阻止Bu
我能读this tutorial后设定该目标应哪一点计算。我转换一些pylab
代码来numpy
def interception(Al, Bu, Ho, Sa, Sb):
""" Returns ``(t_C, C)`` if A can catch B, before B
reaches H. Otherwise, returns ``None``. """
A = np.array((Al["x"],Al["y"]))
B = np.array((Bu["x"],Bu["y"]))
H = np.array((Ho["x"],Ho["y"]))
AB, AH, BH = np.linalg.norm(A-B), np.linalg.norm(A-H), np.linalg.norm(B-H)
#if Ho["id"] =="1":
# print("AB=%s BH=%s"%(AB,BH), file=sys.stderr)
if AB*BH == 0:
return None, None
sin_b = np.linalg.det(np.array((A-B,H-B)))/(AB*BH)
sin_a = (Sb/Sa) * sin_b
if abs(sin_a) > 1 :
print("B moves too fast to be ever caught !", file=sys.stderr)
return None, None
else:
sin_c = (sin_a * math.sqrt(1 - sin_b**2)
+ sin_b * math.sqrt(1 - sin_a**2))
BC = AB * (sin_a/sin_c)
#if Ho["id"] ==1:
#print(BC-BH, file=sys.stderr)
if BC > BH:
# print("B reaches H before interception by A !", BC,BH, file=sys.stderr)
return None, None
else:
#print("A intercepted B !")
t_C = BC/Sb
C = B + BC * (H-B)/ BH
return t_C, C
这工作得很好,但这里的问题,我想弄清楚。我想调整此interception
函数以具有另一个参数Al_radius
。你看,有枪而当Bu
是在Al_radius
范围,可以拍摄Bu
我敢肯定,这取决于的范围内,他的目标位置可能会改变(例如,它可能会更快而不是直接走向Bu
和Ho
之间的路径)。