點和向量的表示和基本計算 劉汝佳版

2021-07-25 19:02:46 字數 2499 閱讀 9462

#include #include #include #include #include using namespace std;

struct point

};typedef point vector;

//向量+向量=向量,點+向量=點

vector operator + (vector a, vector b)

//點-點=向量

vector operator - (vector a, vector b)

//向量*數=向量

vector operator * (vector a, double p)

//向量/數=向量

vector operator / (vector a, double p)

bool operator < (const point& a, const point& b)

//比較

const double eps = 1e-10;

int dcmp(double x)

bool operator == (const point& a,const point& b)

//基本計算

double dot(vector a, vector b)

double length(vector a)

double angle(vector a, vector b)

double cross(vector a, vector b) //叉積

double area2(point a, point b, point c) //有向面積

//a向量逆時針旋轉α rad

//x'=xcosα-ysinα;

//y'=xsinα+ycosα;

vector rotate(vector a, double rad)

//a的單位法線,也就是逆時針90°,長度變為1,注意a要非零向量

vector normal(vector a)

//利用複數,可以更加簡單的實現

#include typedef complexpoint;

typedef point vector;

bool cmp(const point& a, const point& b)

double dot(vector a, vector b)

double cross(vector a, vector b)

vector rotate(vector a, double rad)

模板一:

#include #include #include #include using namespace std;

const double eps = 1e-10;

struct point

};typedef point vector;

int dcmp(double x)

bool operator == (const point& a,const point& b)

bool operator < (const point& a, const point& b)

vector operator + (vector a, vector b)

vector operator - (vector a, vector b)

vector operator * (vector a, double p)

vector operator / (vector a, double p)

double dot(vector a, vector b)

double length(vector a)

double angle(vector a, vector b)

double cross(vector a, vector b) //叉積

double area2(point a, point b, point c) //有向面積

vector rotate(vector a, double rad)

vector normal(vector a)

模板二:

// 模板二:

#include #include #include #include #include #include using namespace std;

typedef complexpoint;

typedef point vector;

const double eps = 1e-10;

int dcmp(double x)

bool cmp(const point& a, const point& b)

double dot(vector a, vector b)

double cross(vector a, vector b)

vector rotate(vector a, double rad)

演算法競賽入門經典(劉汝佳) 習題2 4子串行的和

樣例輸入 2 465536 655360 0 0樣例輸出 case 1 0.42361 case 2 0.00001 分析 輸出保留5位小數 輸入包含多組資料 這意味著資料是成批的,是一堆放在一起的,需要自己確定那幾個資料是本次需要的 結束標記 n m 0,表示n和m中任意乙個都不為零 n6本題有陷...

演算法入門經典(劉汝佳)陣列和字串 上機練習

第一題 輸入一些學生的分數,哪個分數出現的次數最多。如有並列,從小到大輸出。思路 先排序,排好序後,相同數字間序號的差值就是分數個數。注意 1.題目沒有明確是不是任意輸入。如果不事先確認輸入分數個數的總數,後面會很不好處理資料。2.flag是用來控制空格的輸入的。保證第乙個資料前沒有空格,最後乙個資...

點和向量的數學基礎

計算機圖形學數學基礎譯自 scratchapixel 數學基礎部分共八篇,本篇為第一篇,感興趣的同學可以參考我的 gitbook 映象。向量可以被看作是乙個箭頭從乙個點出發到另外乙個點結束。向量不僅可以看作為從a點到b點的方向,還可以看作a點到b點的距離。下列是計算向量長度的公式 在幾何學中,復縱線...