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