计算一个圆上两条切线的交点?

时间:2011-06-26 15:50:03

标签: math geometry raycasting

我尝试使用光线投射式功能来完成但无法获得任何可维护的结果。我正在尝试计算一个圆上两个切线之间的交点。这张照片应该有助于解释:

enter image description here

我已经google搜索了有关此问题的stackoverflow,但找不到与此问题类似的任何内容。有什么帮助吗?

2 个答案:

答案 0 :(得分:3)

好吧,如果您的变量是:

C = (cx, cy) - Circle center
A = (x1, y1) - Tangent point 1
B = (x2, y2) - Tangent point 2

从圆心到AB两个点的线分别为CA = A - CCB = B - C

您知道切线垂直于中心线。在2D中,要获得垂直于向量(x, y)的线,您只需(y, -x)(或(-y, x)

所以你的两条(参数)切线是:

L1(u) = A + u * (CA.y, -CA.x)
      = (A.x + u * CA.y, A.y - u * CA.x)

L2(v) = B + v * (CB.y, -CB.x)
      = (B.x + v * CB.y, B.x - v * CB.x)

然后计算两条线的交集,您只需要使用standard intersection tests

答案 1 :(得分:1)

彼得亚历山大的答案假定你知道圆圈的中心,这在你的图http://oi54.tinypic.com/e6y62f.jpg中并不明显。 这是一个不了解中心的解决方案:

C(在您的图中)是A(x, y)处的切线与垂直于L的线AB的交点,将AB切割为半。线L的参数方程可以推导如下:

AB的中间点是M = ((x+x2)/2, (y+y2)/2),其中B(x2, y2)。垂直于AB的向量是N = (y2-y, x-x2)。因此,线L的矢量方程 L(t) = M + t N,其中t是实数。