2011-07-08 47 views
5

这是基本的图形几何图形和/或触发器,我对它的问题感到哑巴,但我不记得这是怎么回事。所以:找到一条直线与已知直线相交,给定一个点

  1. 我有一个由两点(x1,y1)和(x2,y2)定义的直线。
  2. 我有第三个点(xp,yp)位于别的地方。

我想计算点(x“ y”)的该介于沿着线在#1,使得当与从#2的点接合,创建一个新的垂直线到所述第一线。 enter image description here

谢谢。

回答

5

您可以考虑先一般点(x, y)沿线从(x1, y1)(x2, y2)发现这一点:

x = x1 + t*(x2 - x1) 
y = y1 + t*(y2 - y1) 

和计算的(平方)距离这一点从(xp, yp)

E = (x - xp)**2 + (y - yp)**2 

代替xy的定义给出

E = (x1 + t*(x2 - x1) - xp)**2 + 
    (y1 + t*(y2 - y1) - yp)**2 

然后找到这个距离而变化t最低,我们对于获得Et

dE/dt = 2*(x1 + t*(x2 - x1) - xp)*(x2 - x1) + 
     2*(y1 + t*(y2 - y1) - yp)*(y2 - y1) 

,经过一些计算给出

dE/dt = 2*((x1 - xp)*(x2 - x1) + (y1 - yp)*(y2 - y1) + 
      t*((x2 - x1)**2 + (y1 - y2)**2)) 

寻找时,该导数为零,我们得到明确公式为t

t = ((xp - x1)*(x2 - x1) + (yp - y1)*(y2 - y1))/
    ((x2 - x1)**2 + (y2 - y1)**2) 

所以最后一点可以用的定义中t的值来计算。

使用矢量的符号,这正是通过加雷建议相同的公式...

t = <p - p1, p2 - p1>/<p2 - p1, p2 - p1> 

其中符号<a, b>表示点积操作ax*bx + ay*by

还要注意,同样的公式在n维空间中起作用。

+0

谢谢你。作为你的答案给予你的接受答案是唯一一个以我所知道的(笛卡尔坐标)并给了我一个实际的公式来插入它们。 (我喜欢矢量思想,但是提出的问题比给出几何记忆的答案要多。) –

+0

这是@ 6502的一个英雄努力,但是这个答案显示了为什么我有关于向量的经验法则! –

+0

@gareth:当我遇到一个几何问题时,我总是在向量中思考(这就是为什么我高举了你的答案),但是我知道大多数程序员对他们感觉不舒服。 – 6502

0

您可以解决连接(x1, y1)(x2, y2)的线的斜率。然后你知道垂直线的斜率是负的。

要找到y截距,请使用斜率来查看线条在yx=0x1的行进距离。

b + (x1 - x0) * m = y1 
b + (x1 - 0) * m = y1 
b + (x1 * m)  = y1 
b = y1 - x1 * m 

然后,您可以得到该行的公式的两个点,并从(xp, yp)上述坡线之间。对于给定的x,它们具有相等的y,所以你可以解决这个问题,然后将其插入到y的公式中。

m = slope_from_1_to_2 = (y2 - y1)/(x2 - x1) 
n = slopePerpendicular = (-1)/m 

b = intercept_for_1_to_2 = y1 - x1 * m 
c = intercept_for_p  = yp - xp * n 

因此,对于线路中的方程的形式是 y = mx + b

点1和2:

y(x) = mx + b

点P:

y(x) = nx + c

一套自己的等于找到X'y

mx' + b = nx' + c 
(m-n)x' = c - b 
    x' = (c - b)/(m - n) 

并因此请使用公式计算Y”

y' = mx' + b

+0

谢谢。在方程y(x)= mx + y2'中,为什么你用'y2'代替'b'? –

+0

好点,'b'应该是y轴截距,线在y轴上。 'y2'不一定是这样,让我看看我的数学。 –

+1

对于一个真正的二维问题,使用公式'y = m * x + q'意味着寻找麻烦。用这种方法你不能处理垂直线;改用参数方程'x = x(t),y = y(t)'代替。 – 6502

1

答案行是:

y=ax+b 
where a=(x1-x2)/(y2-y1) 
     b=yp-(x1-x2)*xp/(y2-y1) 

如何结果得到:

1) slope for the original line: (y2-y1)/(x2-x1) 

2) slope for the answer: -1/((y2-y1)/(x2-x1)) = (x1-x2)/(y2-y1) 

3) Plug this into (xp,yp) we can have the result line. 

只需计算出此后的答案(这太长了...我饿了)。

+0

这不适用于'y1 = y2'(除以零)。事实上,在处理真正的二维问题时,不应该使用基于“斜率”的公式。当你处理1.5维问题(即图形为y = y(x)')时,公式'y = mx + q'只能很好地工作。 – 6502

+0

@ 6502嗯。感谢您为我节省未来的错误,因为我不可能再次忘记它。 –

5

在这种计算几何中有用的经验法则是,只要可以,就应该使用向量,只能作为最后手段切换到笛卡尔坐标。所以让我们用矢量代数来解决这个问题。假设您的线路从pp + r,另一点是q。现在

,就行了,包括你正在努力寻找的任何点(称之为小号),可表现为小号 = p[R一个标量参数λ。

现在从q小号载体必须垂直于ř。因此

q - (př))·ř = 0

凡·是dot product operator。扩大产品:

q - p)·ř =λ(ř·ř

和除法:

λ =(q - p)·[R/[R·[R

当你来实现它,你需要检查是否[R·[R = 0,以避免被零除。

+0

感谢向导中的启发性思维。 –

相关问题