Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- struct Point{
- double x, y;
- Point(double a = 0, double b = 0){
- x = a;
- y = b;
- }
- Point(const Point &v){
- x = v.x;
- y = v.y;
- }
- friend istream &operator >> (istream &stream, Point &v){
- stream >> v.x >> v.y;
- return stream;
- }
- friend Point operator - (const Point &u, const Point &v){
- return Point(u.x - v.x, u.y - v.y);
- }
- friend double Cross(const Point &u, const Point &v){
- return u.x*v.y - u.y*v.x;
- }
- friend bool operator == (const Point &u, const Point &v){
- return abs(u.x-v.x) <= ESP && abs(u.y-v.y) <= ESP;
- }
- friend bool operator != (const Point &u, const Point &v){
- return abs(u.x-v.x) > ESP || abs(u.y-v.y) > ESP;
- }
- friend bool operator < (const Point &u, const Point &v){
- return u != v && mp(u.x, u.y) < mp(v.x, v.y);
- }
- friend ostream &operator << (ostream &stream, const Point &v){
- stream << "(" << v.x << ", " << v.y << ")";
- return stream;
- }
- };
- struct Line{
- Point x, y;
- Line(Point u = Point(0, 0), Point v = Point(0, 0)){
- x = u;
- y = v;
- }
- friend bool Intersect(const Line &u, const Line &v){
- return Cross(u.x-u.y, v.x-u.y) * Cross(u.x-u.y, v.y-u.y) <= 0
- && Cross(v.x-v.y, u.x-v.y) * Cross(v.x-v.y, u.y-v.y) <= 0;
- }
- friend Point GiaoDiem(const Line &u, const Line &v){
- Point nu = u.x - u.y;
- Point nv = v.x - v.y;
- //cout << nu.x << ' ' << nu.y << endl;
- //cout << nv.x << ' ' << nv.y << endl;
- double a1 = nu.y, b1 = -nu.x, c1 = u.x.x*nu.y - u.x.y*nu.x;
- //cout << a1 << ' ' << b1 << ' ' << c1 << endl;
- double a2 = nv.y, b2 = -nv.x, c2 = v.x.x*nv.y - v.x.y*nv.x;
- //cout << a2 << ' ' << b2 << ' ' << c2 << endl;
- if (a1 == 0){
- swap(a1, a2);
- swap(b1, b2);
- swap(c1, c2);
- }
- //a1*x+b1*y=c1
- //a2*x+b2*y=c2
- double y = (c2-(a2*c1)/a1)/(b2-a2*b1/a1);
- double x = (c1-b1*y)/a1;
- return Point(x, y);
- }
- };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement