2016-05-23 218 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