我遇到了一个问题,我无法根据物体旋转和移动量来找出找出目标点的算法。我必须向我的旋转方向移动一定量,但我不知道如何计算我最终到达的目标点。例如:
Object location = (0, 0)
Object rotation = 45
Amount to move = 4
使用这些变量,目标点将是(2.5,2.5)
示例2:
Object location = (0, 0)
Object rotation = 0
Amount to move = 4
并且这些将是(0,4)
问题是,当我知道这些变量时,我不知道如何计算目标点。我需要一个计算目标点的算法,有人可以帮忙吗? :)
问候,Tuukka。
答案 0 :(得分:3)
如果这是一个严格的算法问题,你想要计算目标点(即没有游戏对象可以移动,但抽象数据),你可以这样做:
考虑笛卡尔坐标系中的二维平面(即标准x / y系统)。设O为点(0,0)
处的对象。从你的“目的地点”(2.5,2.5)我可以假设你想要以下东西:
因此45°
是角度,4
(amount to move
)是您想要移动的线段的长度。从(0,0)开始,通过使用点的极坐标表示公式,可以使用正弦和余弦计算此终点:
但实际上,该图像是错误的,我们将在下面的计算中看到。如果沿着45°倾斜角度的线移动,你会在其他地方降落一点。
无论如何,对于这个例子,alpha将是45°
,它是以弧度为单位的pi / 4(你通过除以180得到它并乘以pi),半径r将是4
(我们想要移动的金额),所以我们计算了目的地点:
如果该点位于会议室的任何位置(不是(0,0)
而是(x_0, y_0)
),那么您仍然可以将其添加为偏移量:
所以在代码中你会写:
public static Vector2 ComputeDestination(Vector2 origin, float amountToMove, float angle)
{
//convert degrees to radians
var rad = angle * Mathf.Deg2Rad;
//calculate end point
var end_point = origin + amountToMove * new Vector2(Mathf.Cos(rad), Mathf.Sin(rad));
return end_point;
}
答案 1 :(得分:2)
float homMuchToMove = 4f;
float angle = 45f;
float pointX = Mathf.Cos (ConvertToRadians (angle)) * homMuchToMove;
float pointY = Mathf.Sin (ConvertToRadians (angle)) * homMuchToMove;
public float ConvertToRadians(float angle)
{
return (Mathf.PI / 180f) * angle;
}
对于这些值,您将获得2.828427f