鉴于该生物的位置及其目标的位置,我正在尝试计算要遵循的路径,受到移动和旋转速度的限制。
该生物具有外观方向,只能沿着该方向前进。它不能回避。
我可以使用以下代码计算生物的外观方向和目标位置之间的差异角度
def calculateAngleDifference(self):
deltaX = self.position_x - self.target[0]
deltaY = self.position_y - self.target[1]
try:
#atan is inverse tan
delta = degrees(atan(deltaY / deltaX)) - self.orientation
except:
delta = degrees(atan(deltaY / 1)) - self.orientation
return delta//1
这给了我一个正确的结果,当生物直接看目标时停止。
然而,我想在同一时间移动它,因此该生物应走一条曲线。不可能有超过45°的目标。
我使用的位置计算
def pointOnCircle(origin, distance=50, degree = 45, method=cos):
return origin + distance * method(radians(degree))
newX = pointOnCircle(self.position_x, distance=1, degree = 1, method=cos)
newY = pointOnCircle(self.position_y, distance=1, degree = 1, method=sin)
# input()
self.position_x = newX
self.position_y = newY
然而,这永远不会让我达到目标。