完整代码如下:
/*点的加减,标量乘除操作*/
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;
}