我在圆上有两个点(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;
}