求平面中两直线的交点,当两直线不平行时,必定只有一个交点。
/* 返回两直线的交点 */
Point LinesIntersection(Line m, Line n, int *flag)
{
double d = n.A * m.B - m.A * n.B;
if (d == 0)
{
*flag = 0;
return;
}
Point i;
i.x = (n.B * m.C - m.B * n.C) / d;
i.y = (m.A * n.C - n.A * m.C) / d;
*flag = 1;
return i;
}
这个函数美中不足的是多了一个参数flag,因为两条直线m和n可能平行,此时返回值为空。
如果把函数改成返回一个Point指针,当平行时返回NULL,也可以。
我为何没有选择这种方式,是因为:指针的话,必须在这个函数中使用malloc申请一块空间,而这个空间需要在函数外释放,容易忘记释放。
关于malloc:malloc是在程序运行时申请的空间,效率难免慢一点,而且还要考虑申请不成功的处理,及意外情况下的所有malloc变量的释放。我的个人原则是,在解决问题的前提下,尽量不使用malloc的变量。