从源自特定边的向量中找到三角形相交

时间:2010-02-05 20:53:47

标签: math trigonometry

我知道A,B和C的坐标..我也知道一个源自C的矢量V ..

我知道矢量与A和B相交,我只是不知道如何找到i。

有人能解释解决这个问题所涉及的步骤吗?

非常感谢。

http://img34.imageshack.us/img34/941/triangleprob.png

3 个答案:

答案 0 :(得分:3)

如果你知道A和B,你知道AB线的等式,你说你知道V,所以你可以形成线V的等式....我只是满足这两个方程的点。

AB线的公式:

  (bx-ax)(Y-ay) = (by-ay)(X-ax)

如果你编辑矢量的方向(或斜率= m),以及位于矢量上的任何点,那么矢量V的线的方程是

Y = mX = b

其中m是直线的斜率或方向,b是横穿垂直y =轴的y坐标(其中X = 0)

如果你知道线上的一个点(即C =(s,t),那么你通过以下方式解决b:

t = ms + b ==> b = t - ms

所以等式成为

Y = mX + t-ms

答案 1 :(得分:1)

i = C+kV
Lets call N the normal to the line A,B so N = [-(B-A).y, (B-A).x]
Also, for any point on the line:
(P-A)*N = 0       -- substitute from line 1 above:
(C+kV-A)*N = 0
(kV+C-A)*N = 0
kV*N + (C-A)*N = 0
kV*N = (A-C)*N
k = [(A-C)*N]/V*N
Now that we have k, plug it into line 1 above to get i.

这里我使用*表示点积,因此扩展到常规乘法:

k = ((A.x-C.x)*-(B.y-A.y) + (A.y-C.y)*(B.x-A.x)) / (V.x*-(B.y-A.y) + V.x*(B.x-A.x))
I.x = C.x + k*V.x
I.y = C.y + k*V.y

除非我搞砸了......

答案 2 :(得分:0)

简单代数。困难的部分通常只是写下基本的方程式,但一旦写下来,其余的很容易。

你能定义一条从C = [c_x,c_y]点发出的线,以及沿矢量V = [v_x,v_y]的点吗?表示这样一条线的一种好方法是使用参数化表示。因此,

V(t) = C + t*V

就矢量元素而言,我们将其作为

V(t) = [c_x + t*v_x, c_y + t*v_y]

看看它是如何工作的。当t = 0时,我们得到C点,但是对于t的任何其他值,我们得到了一些其他点。

通过A和B的线段怎么样?解决该问题的一种方法是以相同的方式参数化地定义第二条线。然后求解两个未知数的两个方程组来找到交点。

更简单的方法是查看线段AB的法线向量。该向量以

给出
N = [b_y - a_y , a_x - b_x]/sqrt((b_x - a_x)^2 + (b_y - a_y)^2)

请注意,N在此定义为具有单位规范。

所以现在,我们何时知道一个点是否恰好位于连接A和B的线上?这很容易。当下面定义的点积恰好为零时,就会发生这种情况。

dot(N,V(t) - A) = 0

展开它,并求解参数t。我们可以使用点积来写下来。

t = dot(N,A-C)/dot(N,V)

或者,如果您愿意,

t = (N_x*(a_x - c_x) + N_y*(a_y - c_y)) / (N_x*v_x + N_y*v_y))

一旦我们有了t,用上面的表达式代替V(t)。让我们在实践中看到所有这些工作。我会选择一些点A,B,C和矢量V。

A = [7, 3]
B = [2, 5]
C = [1, 0]

V = [1, 1]

归一化后,我们的法向量N看起来像

N = [0.371390676354104, 0.928476690885259]

然后,行参数t为

t = 3.85714285714286

我们发现交叉点为

C + t*V = [4.85714285714286, 3.85714285714286]

如果你在一张纸上绘制点,它们应该完全融合在一起,而且只用几个简单的表达式。