2011-10-22 49 views
4
  • 我有座標點A和另一點(如B,C或D)。
  • 我也有A和另一點之間的距離。
  • 我知道A和另一點之間的最大允許距離(用紫色線和虛圓表示)。
  • 問題:如何查找紅點(B1或C1或D1)的座標。
  • 示例:A =( - 1,1),E =(3,-8),最大允許距離= 4.點E1的座標是什麼?

這是問題的一個形象: problem查找2點之間的限制點

注: 我發現2個是非常相似或相同,但我無法與那些做出來的其他問題: Finding coordinates of a point between two points?

How can I find a point placed between 2 points forming a segment using only the partial length of the segment?

PS這不是我需要編程問題的作業,但我忘了我的數學...

+0

這真的是一個編程問題?它似乎更多是一個基數學問題 – xanatos

+0

所以,你需要一個長度MaxDistance的方向A - > B/C/D的向量? –

+0

Xanatos:是的,這是一個編程問題,因爲這是我在C#/ XNA中設置遊戲集結點的問題。 – Napoleon

回答

6

假設A是位置矢量,B是位置矢量,maxLength是允許的最大長度。

AB都是Vector2的(如您對此問題標記爲)。

// Create a vector that describes going from A to B 
var AtoB = (B - A); 
// Make a vector going from A to B, but only one unit in length 
var AtoBUnitLength = Vector2.Normalize(AtoB); 
// Make a vector in the direction of B from A, of length maxLength 
var AtoB1 = AtoBUnitLength * maxLength; 
// B1 is the starting point (A) + the direction vector of the 
// correct length we just created. 
var B1 = A + AtoB1; 

// One liner: 
var B1 = A + Vector2.Normalize(B - A) * maxLength; 
+0

+1,優雅的方式來做到這一點。 –

+0

是的座標確實是Vector2結構。而且這個解決方案完美地工作,似乎也沒有花費太多的性能。請注意,Normalize()返回無效,所以它仍然需要2-3行,但仍然有效。 – Napoleon

+0

@ user653160:更正爲使用靜態的「Normalize」方法。 –