2014-12-13 61 views
0

編輯觀點:這不是一個重複,請閱讀問題的描述給定兩個點和兩個方向矢量,發現在它們交叉

只是要清楚,這些線段不具有終點。它們從一個點開始,根據方向矢量進入無窮大。我找到了有限線段的解決方案,但它們不適用於這種特殊情況(我認爲)。

所以,標題基本上是我整個的問題 - 我有

  1. 點P1
  2. 點P2
  3. 方向矢量N1(單位向量)
  4. 方向矢量N2(一歸一化的矢量)

第一條線段從p1開始並指向n1

第二線段開始於P2和對N2

點我需要兩個答案:

  1. 如果他們相交和
  2. 有什麼交集的

我點我找到了這兩個答案,但是我數學很差,以至於我無法適應他們以適應我的問題,但它可以幫助你們,我希望。

How do you detect where two line segments intersect?

Given two points and two vectors, find point of intersection

非常感謝!

編輯:(順便說一句,我在二維空間中工作,所以你不必擔心Z軸,感謝)

+0

[給定兩個點和兩個向量,找到交點]的可能重複(http://stackoverflow.com/questions/14256525/given-two-points-and-two-vectors-find-point-of-交集) - 那裏的答案告訴你如何做到這一點。 – 2014-12-13 13:08:15

+0

如果它們的漸變是不相等的,你將能夠告訴它們相交。爲了告訴_where_他們感興趣,您需要解決'm1 * x + c1 = m2 * x + c2',其中'm是您的線的梯度,'c's是與'y'軸的交點。然後,您可以將'x'值插回到'm1 * x + c1 = y'中以得到'y'交點。 – Rich 2014-12-13 13:08:46

+0

夥計們,這條線的原始方程式在這裏不起作用。我沒有雙向的無限線。只在一個方向。這不是一條線。這是一條線段。謝謝。 – 2014-12-13 15:18:18

回答

0

所以,我用的這個帖子提供的信息:

Determining if two rays intersect

和朋友提供的信息來解決這個問題。

第一柱表示,由於兩個點(P1和P2)和兩個方向矢量(n1和n2),以下公式適用:

bool DoesRaysIntersects(Point p1, Point p2, Point n1, Point n2) 
{ 
    float u = (p1.y * n2.x + n2.y * p2.x - p2.y * n2.x - n2.y * p1.x)/(n1.x * n2.y - n1.y * n2.x); 
    float v = (p1.x + n1.x * u - p2.x)/n.x; 

    return u > 0 && v > 0; 
} 

如果兩個u和v是大於0,這是因爲兩條射線相撞。

如果它們碰撞,我們可以使用線的方程來提供碰撞點。我不知道這是否是實現它的最好方法,但它對我有效:

首先,我們需要每條線的斜率。利用它們的斜率,我們可以計算每條線的y軸截距。通過這兩個數據,我們可以計算出碰撞點:

Point GetPointOfIntersection(Point p1, Point p2, Point n1, Point n2) 
{ 
    Point p1End = p1 + n1; // another point in line p1->n1 
    Point p2End = p2 + n2; // another point in line p2->n2 

    float m1 = (p1End.y - p1.y)/(p1End.x - p1.x); // slope of line p1->n1 
    float m2 = (p2End.y - p2.y)/(p2End.x - p2.x); // slope of line p2->n2 

    float b1 = p1.y - m1 * p1.x; // y-intercept of line p1->n1 
    float b2 = p2.y - m2 * p2.x; // y-intercept of line p2->n2 

    float px = (b2 - b1)/(m1 - m2); // collision x 
    float py = m1 * px + b1; // collision y 

    return new Point(px, py); // return statement 
} 

謝謝大家!

+0

它不適用於垂直和水平線,斜率= 0和斜率=無窮大 – uray 2018-01-29 04:31:28