2014-team6/计算几何
从 Trac 迁移的文章
这是从旧校内 Wiki 迁移的文章,可能存在一些样式问题,您可以向 memset0 反馈。
原文章内容如下:
{{{
两圆相交弦方程ax+by+c=0:
a = 2 * (x1 - x2);
b = 2 * (y1 - y2);
c = (r1*r1 - r2*r2) + (x2*x2 - x1*x1) + (y2*y2 - y1*y1);
设直线方程为ax+by+c=0,点坐标为(m,n),垂足:
x = (b*b*m-a*b*n-a*c) / (a*a+b*b)
y = (a*a*n-a*b*m-b*c) / (a*a+b*b)
直线ax+by+c=0与圆(x0,y0,r0)交点:
tmp = sqrt(a*a+b*b);
a /= tmp; b /= tmp; c /= tmp;
d = abs(a*x0+b*y0+c) / sqrt(a*a+b*b)
t = sqrt(r*r - d*d)
x = (b*b*x0-a*b*y0-a*c) / (a*a+b*b) ± b*t
y = (a*a*y0-a*b*x0-b*c) / (a*a+b*b) ± (-a)*t
}}}
两圆相交弦方程ax+by+c=0:
a = 2 * (x1 - x2);
b = 2 * (y1 - y2);
c = (r1*r1 - r2*r2) + (x2*x2 - x1*x1) + (y2*y2 - y1*y1);
设直线方程为ax+by+c=0,点坐标为(m,n),垂足:
x = (b*b*m-a*b*n-a*c) / (a*a+b*b)
y = (a*a*n-a*b*m-b*c) / (a*a+b*b)
直线ax+by+c=0与圆(x0,y0,r0)交点:
tmp = sqrt(a*a+b*b);
a /= tmp; b /= tmp; c /= tmp;
d = abs(a*x0+b*y0+c) / sqrt(a*a+b*b)
t = sqrt(r*r - d*d)
x = (b*b*x0-a*b*y0-a*c) / (a*a+b*b) ± b*t
y = (a*a*y0-a*b*x0-b*c) / (a*a+b*b) ± (-a)*t