没有提供判断是否共线这种情况的处理代码,但这个代码做更改比较简单
#include <iostream> #include <iomanip> #include <limits> using namespace std; class POINT{ public: int x; int y; //int z; //POINT(int px,int py,int pz){ // x = px; // y = py; // z = pz; //} POINT(int px,int py){ x = px; y = py; } POINT(POINT &po){ x = po.x; y = po.y; } POINT& operator=(POINT &rp){ x = rp.x; y = rp.y; return *this; /* POINT pt; pt.x = rp.x; pt.y = rp.y; return pt;*/ } }; POINT& operator-(POINT &lp, POINT &rp){ POINT* pt = new POINT(0,0); pt->x = lp.x - rp.x; pt->y = lp.y - rp.y; return *pt; } class LINE{ public: POINT pt1; POINT pt2; LINE(POINT p1, POINT p2):pt1(p1),pt2(p2){} }; int crossproduct(POINT &pt, LINE &le){ POINT p1 = pt - le.pt1; POINT p2 = le.pt2 - le.pt1; return ((p2.x * p1.y) - (p2.y * p1.x)); } bool iscrossline(LINE &lea, LINE &leb){ if((crossproduct(lea.pt1, leb)*crossproduct(lea.pt2, leb) > 0) || (crossproduct(leb.pt1, lea)*crossproduct(leb.pt2, lea) > 0)){ return 0; }else{ return 1; } } int main(int argc, char** argv) { POINT leapt1(0,0); POINT leapt2(0,2); POINT lebpt1(2,2); POINT lebpt2(0,0); LINE lea(leapt1,leapt2); LINE leb(lebpt1,lebpt2); cout << iscrossline(lea,leb) << endl; return 0; }