您的位置:首页 > 其它

计算几何中的线段相交判断问题

2015-06-14 12:13 531 查看




完整代码如下:

/*点的加减,标量乘除操作*/
struct Point
{
double x, y;
Point(double _x = 0, double _y = 0):x(_x), y(_y){}

Point operator + (Point& other)
{
Point p(this->x + other.x, this->y + other.y);
return p;
}

Point operator - (Point& other)
{
Point p(this->x - other.x, this->y - other.y);
return p;
}

Point operator * (int f)
{
Point p(this->x * f, this->y * f);
return p;
}

Point operator / (int f)
{
Point p(this->x / f, this->y / f);
return p;
}
};

/*点的叉乘*/
double cross(Point&a, Point &b)
{
return a.x * b.y - a.y * b.x;
}

/*判断两个线段是否相交,其中p1->p2为线段,p3->p4为线段*/
bool isIntersect(Point& p1, Point& p2, Point& p3, Point& p4)
{
Point p12 = p2 - p1;
Point p34 = p4 - p3;
Point p31 = p1 - p3;
Point p13 = p3 - p1;

double c1 = cross(p13, p34);
double c2 = cross(p12, p34);
double c3 = cross(p12, p31);

if (c2 < 0) {
c2 = -c2; c1 = -c1; c3 = -c3;
}

if (c2 != 0 && c1 >= 0 && c1 <= c2 && c3 >= 0 && c3 <= c2) return true;

return false;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: