找到距离目标位置最近的位置特定距离

时间:2016-05-23 17:16:23

标签: c#

我有两个位置,想要计算红星的位置。 (我想把B移到"红星位置"但我不知道坐标。)

desc

我有A和B的位置以及距离位置A的最小距离。所以我的问题是如何计算在指定距离内距离B最近的位置。

希望有人了解我想要完成的事情。

1 个答案:

答案 0 :(得分:0)

假设:

  • 您希望B与A之前的方向相同
  • 您想将B移动到距离A的特定距离
    • 如果B距离较远,请将其移近A以达到距离
    • 如果B比特定距离更近,请将其移离A以达到距离

然后就是这样做的方法:

  1. 计算从A到B的当前距离
  2. 计算A和B之间的位置差异(2维或3维)
  3. 将此差异除以"当前距离/所需距离" 例如,如果当前距离是您想要的距离A的2倍,您可以将位置差异除以2
  4. 将B的新位置设为A +新差异
  5. 以下是一些示例代码:

    var wantedDistance = 40.0;
    var distance = Math.Sqrt((A.x - B.x)*(A.x - B.x) + (A.y - B.y)*(A.y - B.y));
    var diffX = B.x - A.x;
    var diffY = B.y - A.y;
    
    var ratio = distance / wantedDistance;
    var newDiffX = diffX / ratio;
    var newDiffY = diffY / ratio;
    
    var newB = new PointF(A.x + newDiffX, A.y + newDiffY);
    

    在评论中你说如果B在半径范围内,那么它在范围内,所以不应该移动。您只需将distancewantedDistance进行比较就可以解决这个问题,如果更低,那么您就完成了。只需在var distance = ...行之后添加以下代码:

    if (distance < wantedDistance)
        return B; // or whatever you want to do when "done"
    

    如果您需要在3D空间中执行此操作,只需增加每个计算和diff来处理Z维度。