Unity目标矢量基于旋转和移动量

时间:2016-02-03 17:07:52

标签: c# math unity3d

我遇到了一个问题,我无法根据物体旋转和移动量来找出找出目标点的算法。我必须向我的旋转方向移动一定量,但我不知道如何计算我最终到达的目标点。例如:

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。

2 个答案:

答案 0 :(得分:3)

如果这是一个严格的算法问题,你想要计算目标点(即没有游戏对象可以移动,但抽象数据),你可以这样做: 考虑笛卡尔坐标系中的二维平面(即标准x / y系统)。设O为点(0,0)处的对象。从你的“目的地点”(2.5,2.5)我可以假设你想要以下东西:

enter image description here

因此45°是角度,4amount to move)是您想要移动的线段的长度。从(0,0)开始,通过使用点的极坐标表示公式,可以使用正弦和余弦计算此终点:

formula2

但实际上,该图像是错误的,我们将在下面的计算中看到。如果沿着45°倾斜角度的线移动,你会在其他地方降落一点。

无论如何,对于这个例子,alpha将是45°,它是以弧度为单位的pi / 4(你通过除以180得到它并乘以pi),半径r将是4(我们想要移动的金额),所以我们计算了目的地点:

formula3

如果该点位于会议室的任何位置(不是(0,0)而是(x_0, y_0)),那么您仍然可以将其添加为偏移量:

formula4

所以在代码中你会写:

 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

处的两个点数