計算幾何基礎(學習中)

2022-08-20 23:15:14 字數 2655 閱讀 4425

(國服挺住啊q^q)

計算幾何基礎

基本運算

基礎類點積叉積線

直線與線段的表示

直線求交

線段判交

多邊形求多邊形的重心

判定點在多邊形內

求多邊形的面積

常用演算法

凸包半平面交

基礎類
struct vec

};vec operator+(const vec &a, const vec &b)

vec operator-(const vec &a, const vec &b)

vec operator*(double s, const vec &a)

vec operator/(const vec &a, double s)

點積

正負:正,夾角小於90° 負,夾角大於90°

double dot(const

vec &x, const

vec &s)

叉積

幾何意義:兩向量所形成的平行四邊形的面積

正負:正,→y在→x左邊 負,右邊

double cross(const

vec &x, const

vec &y)

點積與叉積結合起來,可以判斷兩向量的位置(指如圖)關係

|

|--------------

||

直線與線段的表示

直線:乙個其上的點p,及方向向量→u來表示

線段:1、兩個端點 2、乙個端點,乙個向量(準確指向另一端點)

直線求交

兩個直線(p,→u),(q,→v),可知交點s=p+t*→u。求出t可用等面積法

很直觀吧【滑稽

至於正負問題,討論一下就發現沒問題了。但是要千萬記得順序,可以用圖來輔助記憶

線段判交

跨立實驗

這裡主要運用了叉積判斷左右的性質。我們可以感性的理解到,若線段相交,自己的端點肯定在對方的兩側,不相交則至少有乙個不滿足。

求多邊形的重心

我們需要兩個基礎

1、三角形的重心求法(數學課上學過啦)

2、(∑→v * m0)/m (找乙個點為原點,則多邊形內每乙個點都有乙個向量和質量)

感性理解一下,我們可以通過分治的思想,發現已知圖形兩個部分的重心和質量(面積)→p1、s1和→p2、s2,則→p=(→p1 * s1 + →p2 * s2)/(s1+s2)

因為任意乙個多邊形可以拆分成若干個三角形,所以根據以上兩個基礎就可以進行兩兩合併知道求出重心為止。

判定點在多邊形內

如果乙個點在多邊形內,從這個點拉一條射線出去,必定會穿過邊。然而點不在多邊形內,也有可能穿過邊,但是它必定還會穿出去,所以經過的邊數必為偶數,在內部的必為奇數。

這裡把模型稍微改一下。我們給多邊形的每一條邊乙個方向,統一順時針或逆時針(存的時候就是有方向的啊)。向上+1,向下-1(反之也行)

看**理解一下

bool point_on_line (const point &p, const point &a, const point &b) 

bool in_polygon (const point &p, const

vector

&poly)

return counter != 0;

}

畫圖理解一下就記住了,畫圖現推也行

求多邊形的面積

主要利用了叉積的幾何意義及正負

很直觀吧

double area(const

vector

&poly)

return

fabs(rt / 2.0);

}

凸包

凸包的定義:將一堆點包括進去的最小的凸多邊形

求凸包:模擬繩子繞釘子的模型

void get_convex()

int tmp = top;

for(int i = cntp-1; i >= 1; i--)

if(cntp > 1) top--;

}

半平面交

(還在學習中。。。)

計算幾何基礎(學習中)

國服挺住啊q q 計算幾何基礎 基本運算 基礎類點積叉積線 直線與線段的表示 直線求交 線段判交 多邊形求多邊形的重心 判定點在多邊形內 求多邊形的面積 常用演算法 凸包半平面交 基礎類struct vec vec operator const vec a,const vec b vec opera...

計算幾何 幾何基礎

這章早在2017年寒假就在培訓的時候由來自清華的hta老師上過了 但是本蒟蒻那時候並不是懂的太多 所以這週ww老師又上了一遍 大概記錄一下 大概就跟高中必修4的平面向量差不多 有上過的應該都會 a x1,y1 b x2,y2 a b x1x2 y1y2 a b a b cos a,b 運用 若a與b...

計算幾何基礎

1 向量叉積 ab ac 0 ac在ab的 逆時針方向,否則順時針 0 a b c 共線 class point p q 為向量 a,b,c為點 p q x1 y2 x2 y1 p a b q c a 即 x1 x0 y2 y0 x2 x0 y1 y0 計算 ab ac 的叉積 double cor...