20201012day33 複習6 計算幾何

2022-05-20 09:16:22 字數 3261 閱讀 4884

向量表示

class cvector;
表示從0到\((x,y)\)的向量。對向量只關心方向和長度,不關心起點和終點

2.

cvector operator +(cvector p,cvector q)
用法:c=a+b

3.

cvector operator -(cvector p, cvector q)
用法:c=a-b

4.

cvector operator *(double k, cvector p)
\(\boldsymbol=f\boldsymbol\),f是double

5.向量的點積

double operator *(cvector p,cvector q)
功能:求同向還是異向;求投影;求投影後用勾股定理求點到直線距離

6.向量模長

double length(cvector p)
7.向量單位化

將向量除以自身的長度來得到同方向的單位向量

cvector unit(cvector p)
8.向量的投影長度

向量與該方向單位向量的點積

注意:負數表示反方向

double project(cvector p,cvector n)

double dot(cvector p,cvector q)

表示向量p在向量n上的投影p'

b在a上的投影的模是\(\dfrac \cdot \boldsymbol}|}\)

所以b在a上的投影即為\(\dfrac \cdot \boldsymbol}|} \dfrac}|}=\boldsymbol\dfrac \cdot \boldsymbol}^2}\)

9.向量的對稱

記b在a上的投影為\(\boldsymbol=\boldsymbol\dfrac \cdot \boldsymbol}^2}\)

則b關於a的對稱為\(\boldsymbol-b}\)

10.向量的叉乘

性質:在二維情況中,\(\boldsymbol\)

功能:求面積;求順時針方向還是逆時針方向;判斷是否在半平面上

double operator ^(cvector p,cvector q)

c=a^b;//a,b,c all is cvector type

\(\boldsymbol\)為有向面積,可正可負,若a逆時針旋轉小於180°可到b,則結果為正,否則結果為負

11.叉積排序

#include #include #include using namespace std;

struct vector

vector()

double operator ^ (const vector & v) const

};#define point vector

vector operator - (const point & p1, const point & p2)

bool operator < (const point & p1, const point & p2)

point ps[60];

int main()

12.向量圍成的三角形面積

叉積的一半

double area(cvector p, cvector q)
13.求多邊形的面積

基本思路是進行三角剖分。

指定逆時針方向,列舉\(\vec\),累加\(\dfrac\times\vec}\)

14.點、線的表示

#define cpoint cvector

class cpoint

class cline

15.常用函式與常數

double pi = acos(-1);

double inf = 1e20;

double eps = 1e-6; //精度不是越高

bool iszero(double x)

bool flarger(double a, double b)

bool fless(double a, double b)

16.點與向量

cvector operator -(cpoint b, cpoint a) 

// c = a – b;

cpoint operator +(cpoint a, cvector p) // p = p + v; p是點,v是向量

17.點與點距離

利用兩點之間模長

double dist(cpoint p, cpoint q)  //從a點指向b點的向量ab可用來

點與線距離

利用叉積求面積,然後除以底邊即為高

double dist(cpoint p, cline l)
19.點繞點旋轉(二維)

旋轉向量ab到ac注:

在xy平面上逆時針旋轉α角(弧度制)

cpoint rotate(cpoint b, cpoint a,double alpha)
20.點在直線左側還右側

直線用兩個點a,b表示,是有方向的,假設方向是a->b

int sideofline(point p, point a, point b)

21.過點作線的垂線(二維)

cline vertical(cpoint p, cline l)
22.點到線的垂足

利用點積求投影,進而求出垂足

應用:求對稱點

注:在平面上也可作垂線,利用線與線交點(後面會提到)

cpoint foot(cpoint p, cline l)
23.線與線夾角

利用投影(也可以利用叉積或餘弦定理)

應用:兩直線的位置關係,射線夾角(注意方向即可)

double angle(cline l, cline m)

day33 稀疏陣列

當乙個陣列中大部分元素為0,或者為同乙個值的陣列時,可以使用稀疏陣列來儲存該陣列。稀疏陣列的處理方法是 1 記錄陣列一共有 幾行幾列,有多少個不同的值 2 把具有不同值的元素的行列及值記錄在乙個小規模的陣列中,從而縮小程式的規模 1.遍歷原始的二維陣列,得到有效資料的個數sum 2.根據sum就可以...

day33 Pyhton logging 模組和包

一內容回顧 try except try except else try finally try except try except finally try except else finally 報錯的時候 1檢查程式邏輯是不是有問題 2.邏輯沒有問題,但是就是會報錯 找到具體錯誤的那一行 在這一...

day 3 9基礎複習

1.不要在模組之間相互呼叫,否則會出現麻繩現象,避免迴圈匯入。用來判斷值是否相等 分別指向兩個空間,但是空間裡面的內容相同 is 判斷指向是否相等。例 a 11,22,33 b 11,22,33 a b true a is b false id a 1398041200093640 id b 139...