计算两线段交点
/*
求两直线交点,前提是两条直线必须有交点
在相交的情况下,可以应付各种情况(垂直、系数等)
*/
POINT GetCrossPoint(POINT p1, POINT p2, POINT q1, POINT q2)
{
//必须相交求出的才是线段的交点,但是下面的程序段是通用的
assert(IsLineSegmentCross(p1,p2,q1,q2));
/*根据两点式化为标准式,进而求线性方程组*/
POINT crossPoint;
long tempLeft,tempRight;
//求x坐标
tempLeft = (q2.x - q1.x) * (p1.y - p2.y) - (p2.x - p1.x) * (q1.y - q2.y);
tempRight = (p1.y - q1.y) * (p2.x - p1.x) * (q2.x - q1.x) + q1.x * (q2.y - q1.y) * (p2.x - p1.x) - p1.x * (p2.y - p1.y) * (q2.x - q1.x);
crossPoint.x =(int)( (double)tempRight / (double)tempLeft );
//求y坐标
tempLeft = (p1.x - p2.x) * (q2.y - q1.y) - (p2.y - p1.y) * (q1.x - q2.x);
tempRight = p2.y * (p1.x - p2.x) * (q2.y - q1.y) + (q2.x- p2.x) * (q2.y - q1.y) * (p1.y - p2.y) - q2.y * (q1.x - q2.x) * (p2.y - p1.y);
crossPoint.y =(int)( (double)tempRight / (double)tempLeft );
return crossPoint;
}
文章出处:飞诺网(www.diybl.com):http://www.diybl.com/course/3_program/c++/cppjs/200863/120912.html