在計算幾何中,判斷點是否內包於多邊形之中,就是點的內包問題。
解決的思路就是,對於給定點p,作一條沿x軸正方向的射線,然後計算這條射線與多邊形的邊相交的次數。
首先判斷點p是否在邊上,如果在邊上的話就直接return
如果相交的次數是奇數,那麼它就是內包的。否則,點處於多邊形的外部。
具體求相交次數的方法就是
遍歷多邊形上相鄰的兩點gi gi+1 ,設向量a = gi – p, b = gi+1– p
如果a的y座標大於b的y座標,那麼就交換a、b
這時,如果a、b的外積為正,且a、b的y座標一負一正,那麼射線與線段gigi+1相交。
題目:cgl_3_c
ac**:
#include using namespace std;
#define maxn 105
const double eps = (1e-8);
class point
point(double x, double y)
double operator^(const point &p) const //叉乘
double operator*(const point &p) const //點乘
point operator*(const double &d) const
point operator/(const double &d) const
point operator-(const point &p) const
point operator+(const point &p) const
double sqr()
double abs()
double distance(const point &p)
void print()
void read()
};class line
};point pp[maxn];
int n;
int contains(point p) //內包-》2,在邊上-》1,在外部-》0
計算幾何知識點
公式描述 公式中a,b,c分別為三角形三邊長,p為半周長,s為三角形的面積。3.三角形外接圓半徑公式 公式描述 公式中a,b,c分別為三角形的三邊,s為面積。4.正多邊形外角和為360度,各個外角相等且等於各邊所對應圓心角 5.正多變形面積 sin a r r n 2 a為圓心角,r為外接圓半徑,n...
計算幾何基礎 點 向量
附上乙個講極角排序還不錯的部落格 struct point point double x,double y x x y y point operator const point a const 叉積 0是指兩向量平行 重合 point operator const point a const dou...
計算幾何演算法概覽 演算法篇之求點
二。求點 23.計算點到線段的最近點 如果該線段平行於x軸 y軸 則過點point作該線段所在直線的垂線,垂足很容易 該線段不平行於x軸也不平行於y軸,則斜率存在且不為0。設線段的兩端點為pt1和pt2,斜率為 k pt2.y pt1.y pt2.x pt1.x 該直線方程為 y k x pt1.x...