按特定距离查找距离目标位置最近的位置
问题描述:
我有两个位置,并且想要计算红色星星的位置。 (我想将B移到“红星位置”,但我不知道坐标。)按特定距离查找距离目标位置最近的位置
我有A的位置和B以及从位置A.所以最小距离我问题是我如何计算在指定距离内距离B最近的位置。
希望有人明白我想要完成什么。
答
假设:
- 你想要B到在从A相同的方向
- 您想从一个
- 将B移到一个特定距离。如果B是远离前,将其靠近A移至距离
- 如果B比特定距离更近,则将其从A移开以达到距离
然后,这是做到这一点的方式:
- 计算从A的当前距离为B
- 计算(在2维或3维)在A和B之间的位置差
- 将该差值除以“当前距离/想要的距离”的比例 例如,如果当前距离是距离A很远的2倍,则可以将差值除以2
- 设置新的位置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是半径内,那么它是在范围内,因此不应该移动。你只需通过比较distance
和wantedDistance
来处理这个问题,如果更低,那么你就完成了。如果你需要做到这一点在三维空间中,简单地增加每一个计算和DIFF处理Z尺寸以及
if (distance < wantedDistance)
return B; // or whatever you want to do when "done"
:在var distance = ...
行后只需添加这行代码。
+0
工作就像一个魅力! :) 非常感谢! – w20svn
如果B位于外圈内,该怎么办? –
是一个已知的半径? –
这是2D还是3D空间? – Hill