根据与该线相切的第3个点在线上查找点

时间:2016-08-01 16:57:04

标签: c# geometry euclidean-distance

从两点定义的直线找到一个点的距离得到很好的回答,Shortest distance between a point and a line segment。在该回答中http://paulbourke.net/geometry/pointlineplane/示出了线P1,P2,其中点P3与显示如何确定到该点的距离的线相切。这是一个GPS应用程序,所以线的标题已经确定,我不想使用点斜率公式或截距与其限制。

我想确定切线与P1 P2定义的P3相交的直线上的点。提前谢谢。

编辑:

我有一个解决方案,但它有点麻烦,但也许不是,它确实有效:

1) Calculate distance to point by 2 point line to P3 but don't take abs value 
2) If distance < 0 then side = 1 else side = -1 
3) dist = abs(distance) 
4) rad2 = heading + PI/2 * side //tangent is always 90 degrees to line
5) sin rad2*dist + P3.x = point Q.x 
6) cos rad2*dist + P3.y = point Q.y

似乎无论哪一方都在工作

sketch

1 个答案:

答案 0 :(得分:0)

如果等式A*x+B*y+C=0知道某一行,并且 P 点位于坐标为(P_x,P_y)的行之外,那么就行了 >最接近 P 的是

x = (A^2*P_y-A*B*P_x-B*C)/(A^2+B^2)
y = (B^2*P_x-A*B*P_y-A*C)/(A^2+B^2)

P 到线的最小距离是

d = ABS(A*P_x+B*P_y+C)/SQRT(A^2+B^2)

修改1

通过两个点(x_1,y_1)(x_2,y_2)的无限线的等式是

A*x+B*x+C=0
(y_1-y_2)*x + (x_2-x_1)*y + (x_1*y_2-x_2*y_1) = 0

修改2

如果从点(Q_x,Q_y)和方向(e_x,e_y)给出线,那么方程系数

A = -e_y
B =  e_x
C = Q_x*e_y - Q_y*e_x