計算幾何 POJ 1410

2021-07-02 16:47:42 字數 1291 閱讀 8696

題目大意:

給定乙個矩形和乙個線段,問矩形與線段是否存在公共點(矩形包括四條邊和四條邊所圍成的部分)。

乙個矩形與乙個線段相交當且僅當:

1.線段的乙個端點在矩形內或矩形上

2.線段與矩形的某條邊相交

兩部分分別判斷一下就可以了。

附上ac**:

#include 

#include

#include

#include

#include

using

namespace

std;

class point

};typedef point vector;

vector operator + (const vector &a, const vector &b)

vector operator - (const point &a, const point &b)

vector operator * (const vector &a, const

double &b)

vector operator / (const vector &a, const

double &b)

double dot(const vector &a, const vector &b)

double cross(const vector &a, const vector &b)

point lineintersection(point p, vector v, point q, vector w)

bool online(point a, point b, point p)

bool check(point a, point b, point c, point d)

bool inrectangle(double xl, double xr, double yl, double yr, point a, point b)

int main()

if (check(point(x1, y1), point(x1, y2), lp1, lp2))

if (check(point(x1, y1), point(x2, y1), lp1, lp2))

if (check(point(x1, y2), point(x2, y2), lp1, lp2))

if (check(point(x2, y1), point(x2, y2), lp1, lp2))

printf("f\n");

}return

0;}

POJ1410 線段矩形相交 坑多

判斷矩形和線段是否相交,線段在矩形內也算 前幾題一直以為判斷線段相交只需要跨步實驗就行了,這題是個例外,因為這題相交可以是端點相交所以叉乘那裡條件是 eps 注意這裡的等號 這就導致如果有兩條線段是在同一直線上的但是沒有重合部分,那麼通過跨立實驗返回的是相交,就錯了,必須再加上快速排斥 includ...

poj1410 判斷線段和矩形是否相交

題意 判斷線段和矩形是否相交。思路 注意這裡的相交包括線段在矩形內,因此先判斷線段與矩形的邊是否相交,再判斷線段的兩端點是否在矩形內 因為是矩形,即凸多邊形,直接用叉積判斷即可,如果是一般的多邊形,需要用射線法判斷。ac code include include include include us...

poj1696 計算幾何

運用叉積判斷是否是逆時針,因為同一直線上也行,所以有n個植物就可以吃掉n個植物 include include include include include define dist a,b sqrt 1.0 a.x b.x a.x b.x 1.0 a.y b.y a.y b.y define cr...