我需要得到矩形和線的交點。 我有矩形內的點B(矩形的中心),並有點A在外面。我需要在矩形邊框上找到C點。 另外我得到矩形的寬度和高度。獲取矩形和線的交點
這一切都將是WPF應用,因此,如果在功能的任何構建我會很高興。
我需要得到矩形和線的交點。 我有矩形內的點B(矩形的中心),並有點A在外面。我需要在矩形邊框上找到C點。 另外我得到矩形的寬度和高度。獲取矩形和線的交點
這一切都將是WPF應用,因此,如果在功能的任何構建我會很高興。
解C#,WPF:
/// <summary>
/// Get Intersection point
/// </summary>
/// <param name="a1">a1 is line1 start</param>
/// <param name="a2">a2 is line1 end</param>
/// <param name="b1">b1 is line2 start</param>
/// <param name="b2">b2 is line2 end</param>
/// <returns></returns>
public static Vector? Intersects(Vector a1, Vector a2, Vector b1, Vector b2)
{
Vector b = a2 - a1;
Vector d = b2 - b1;
var bDotDPerp = b.X * d.Y - b.Y * d.X;
// if b dot d == 0, it means the lines are parallel so have infinite intersection points
if (bDotDPerp == 0)
return null;
Vector c = b1 - a1;
var t = (c.X * d.Y - c.Y * d.X)/bDotDPerp;
if (t < 0 || t > 1)
{
return null;
}
var u = (c.X * b.Y - c.Y * b.X)/bDotDPerp;
if (u < 0 || u > 1)
{
return null;
}
return a1 + t * b;
}
編輯 實測值Link到SO問題,其中上面的答案的來源。
這是基本的數學求解交線,檢查出TopCoder公司的tutorial:
交線一個最 常見的任務,你會發現幾何問題 是線的交點。儘管 這個事實非常普遍,很多編碼器仍然遇到問題。 第一個問題是,我們給出了哪些形式的 以及我們喜歡他們的 ?理想情況下,我們線路的每個 將採用 Ax + By = C的形式,其中A,B和C是定義線路的 數字。 但是,我們很少給出這種格式的 中的行,但是我們可以很容易地從 兩個 點產生這樣一個方程式。假設我們給出兩個不同的 點,(x1,y1)和(x2,y2)以及 想要找到上面的 等式的A,B和C.我們可以通過 這麼做設置A = Y2-Y1 B = X1-X2 C = A * X1 + B * Y1
這應該比我的方法快得多。 +1 – 2011-03-07 15:58:59
該公式毫無意義。 A,B和C應該都是點並且產生單個值。 – msarchet 2011-03-07 16:05:18
@msarchet:這只是算法的一部分,A,B和C在教程中的含義不同於問題中的含義。 – 2011-03-07 16:11:30
不知道WPF,或任何其功能,這是我會怎麼做:
如果你知道矩形的尺寸,我假設你做」
rX
矩形寬度rY
矩形高度Ay
A的Y位置Ax
A的X位置By
B的Y位置Bx
B的X位置Cy
C'S Y位置Cx
C'S X位置Cy = By + rY/2
C位置是在矩形的頂部,所以它是通過位置+一半的位置
然後我們只需要計算Cx
的位置。
Cx = (Bx + ((Ax - Bx)/(Ay - By)) * Cy)
您可以通過使用Point
用斧頭和y A的座標,BX,由B的座標,並假設得到X和Y Coordiantes A和B與寬度w和高度h的矩形的中心是在{0,0}的以下應根據用於四個線的交點構成的三角形
的解決方案的工作IntersectionRectangleLine[{ax_, ay_}, {bx_, by_}, h_, w_] :=
Module[{\[Mu]r, \[Mu]l, \[Mu]t, \[Mu]b},
{\[Mu]r, \[Mu]l, \[Mu]t, \[Mu]b} = {-((-2 ay bx + 2 ax by - ax w +
bx w)/((ay - by) h)), -((-2 ay bx + 2 ax by + ax w -
bx w)/((ay - by) h)), -((
2 ay bx - 2 ax by - ay h + by h)/((ax - bx) w)), -((
2 ay bx - 2 ax by + ay h - by h)/((ax - bx) w))};
Which[
-1 <= \[Mu]r <= 1, {0, w/2} + \[Mu]r {h/2, 0},
-1 <= \[Mu]l <= 1, {0, -w/2} + \[Mu]l {h/2, 0},
-1 <= \[Mu]t <= 1, {h/2, 0} + \[Mu]t {0, w/2},
-1 <= \[Mu]b <= 1, {-h/2, 0} + \[Mu]b {0, w/2}
]
]
這
In[114]:= Solve[Thread[\[Lambda] ({bx, by} - {ax, ay}) + {ax, ay} == {0, w/2} + \[Mu] {h/2, 0}], \[Mu], {\[Lambda]}]
Out[114]= {{\[Mu] -> -((-2 ay bx + 2 ax by - ax w + bx w)/((ay - by) h))}}
(頂行在此處爲示例)。
對於Evgeny來說,這是它在我的屏幕上的外觀。相當多的可讀性。
矩形只是4行。應用線/線相交測試4次。 – 2011-03-07 15:58:59
可能重複的[如何找到線和矩形之間的交點?](http://stackoverflow.com/questions/1585525/how-to-find-the-intersection-point-between-a-line-和 - 矩形) – Gajus 2015-08-19 18:18:43