如何确定一条直线是否被多边形所截?
Point * intersection2(Point * _line1, Point * _line2) {
Point p1,p2,p3,p4;
p1=_line1[0]; p3=_line2[0];
p2=_line1[1]; p4=_line2[1];
// Store the values for fast access and easy
// equations-to-code conversion
double x1 = p1.x, x2 = p2.x, x3 = p3.x, x4 = p4.x;
double y1 = p1.y, y2 = p2.y, y3 = p3.y, y4 = p4.y;
double A1 = y2-y1;
double B1 = x1-x2;
double C1 = (A1*x1)+(B1*y1);
double A2 = y4-y3;
double B2 = x3-x4;
double C2 = A2*x3+B2*y3;
double det = A1*B2 - A2*B1;
if (det==0){
return NULL;
}else{
// Return the point of intersection
Point * ret = new CvPoint2D64f ();
ret->x = (B2*C1 - B1*C2)/det;
ret->y = (A1*C2 - A2*C1)/det;
return ret;
}
参考文献。 C++示例:几何概念线段相交及其应用,2D绘图 作者:lbackstrom 来源:ucancode网站
根据你需要的具体内容(我将假设是线段,因为我上周刚写了那段代码),你可以分成两个部分来实现:
首先,我建议将线段编码为
a*X + b*Y - c = 0
因为该表单对于像X=5
,Y=4
或X=3*Y
之类的行没有任何特殊情况。