2016-05-23 217 views
-1

我有两个位置,并且想要计算红色星星的位置。 (我想将B移到“红星位置”,但我不知道坐标。)按特定距离查找距离目标位置最近的位置

desc

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

希望有人明白我想要完成什么。

+0

如果B位于外圈内,该怎么办? –

+0

是一个已知的半径? –

+0

这是2D还是3D空间? – Hill

回答

0

假设:

  • 你想要B到在从A相同的方向
  • 您想从一个
    • 将B移到一个特定距离。如果B是远离前,将其靠近A移至距离
    • 如果B比特定距离更近,则将其从A移开以达到距离

然后,这是做到这一点的方式:

  1. 计算从A的当前距离为B
  2. 计算(在2维或3维)在A和B之间的位置差
  3. 将该差值除以“当前距离/想要的距离”的比例 例如,如果当前距离是距离A很远的2倍,则可以将差值除以2
  4. 设置新的位置o为F b是A +的新差异

下面是一些示例代码:

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来处理这个问题,如果更低,那么你就完成了。如果你需要做到这一点在三维空间中,简单地增加每一个计算和DIFF处理Z尺寸以及

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

:在var distance = ...行后只需添加这行代码。

+0

工作就像一个魅力! :) 非常感谢! – w20svn