我在圆上有两个点(x1,y1和x2,y2)和圆的中心(c1,c2)
并且需要JavaScript代码来计算通过点x1,y1和x2,y2的两条切线的交点。

我正在使用它从圆(实际上是由上述点定义的圆弧)转换为二次贝塞尔曲线。

最佳答案

切线的法线为:

n1x = x1 - c1
n1y = y1 - c2
n2x = x2 - c1
n2y = y2 - c2


使用以下参数:

d1 = n1x * x1 + n1y * y1
d2 = n2x * x2 + n2y * y2


切线方程可写为:

x * n1x + y * n1y = d1
x * n2x + y * n2y = d2


一般情况下,求解线性方程组可得出以下结果:

x = (d2 * n1y - d1 * n2y) / (n1y * n2x - n1x * n2y)
y = (d1 * n2x - d2 * n1x) / (n1y * n2x - n1x * n2y)


在javascript中:

var x1,y1,x2,y2,c1,c2; // inputs
var x, y;              // outputs

... get the parameters somehow

var n1x = x1 - c1;
var n1y = y1 - c2;
var n2x = x2 - c1;
var n2y = y2 - c2;
var d1 = n1x * x1 + n1y * y1;
var d2 = n2x * x2 + n2y * y2;

var det = n1y * n2x - n1x * n2y;
if (det === 0) {
    // The lines are parallel
} else {
    x = (d2 * n1y - d1 * n2y) / det;
    y = (d1 * n2x - d2 * n1x) / det;
}

08-19 19:14