平面几何基本知识——学习笔记(2)
7.向量的旋轉(zhuǎn)
向量可以繞起點(diǎn)旋轉(zhuǎn),如果向量(x,y)逆時(shí)針旋轉(zhuǎn)a(a用弧制度表示),公式:
x0=xcosa-ysina
y0=xsina+ycosa
代碼:
data Rotate(data x,double rad) {return data(x.x*cos(rad)-x.y*sin(rad),x.x*sin(rad)+x.y*cos(rad)); }8.點(diǎn)在直線上的投影點(diǎn)
在平面幾何基本知識(shí)——學(xué)習(xí)筆記(1)中曾經(jīng)說(shuō)過(guò)關(guān)于點(diǎn)到線段的距離時(shí)提到過(guò)一個(gè)點(diǎn)q,但實(shí)際上這個(gè)點(diǎn)是有專名的,叫點(diǎn)在直線上的投影點(diǎn),怎么說(shuō)呢,投影點(diǎn)與直線外的點(diǎn)的連線的直線,剛好與原直線互相垂直。
給個(gè)例子,一切都明朗了,點(diǎn)Q就是點(diǎn)P關(guān)于直線AB所對(duì)應(yīng)的投影點(diǎn)。
盡管在求點(diǎn)到直線(線段)距離中巧妙的避開(kāi)了這個(gè)坑,但是某些作死題就是不放棄。所以為了求出點(diǎn)Q,要先把AB用參數(shù)方程A+tv表示,然后如果Q的參數(shù)為t0,那必有Q=A+t0*v,由于PQ垂直于AB,所以利用點(diǎn)積=向量A的長(zhǎng)度向量B的長(zhǎng)度兩個(gè)向量的夾角的cos值,cos90度=0,所以PQ和AB的點(diǎn)積等于0。即:
dot(v,P-(A+t0v))=0
然而根據(jù)藍(lán)書(shū)上的指引,點(diǎn)積竟然還滿足分配率!!!拆開(kāi)來(lái):
dot(v,P-A)-t0*dot(v,v)=0
問(wèn)題就成解有關(guān)t0的方程了,求出之后套參數(shù)方程即可求出投影點(diǎn)。
data getLm(data A,data B,data P) {data v=B-A;return A+v*(dot(v,P-A)/dot(v,v)); }9.凸多邊形
凸多邊形在數(shù)學(xué)上早已定義過(guò),所以這里只講如何判定,是zzkksunboy神犇教我的,主動(dòng)加粗手動(dòng)膜拜。Orz Matchperson。
用點(diǎn)積可以判斷兩個(gè)向量的夾角終邊的位置,如果點(diǎn)積為正,夾角的終邊在一,四象限,反之在二,三象限。那么由于在非凸多邊形中至少有一個(gè)角大于π,所以非凸多邊形的相鄰兩條邊對(duì)應(yīng)的向量的點(diǎn)積一定是負(fù)的,如果全程都沒(méi)有點(diǎn)積是負(fù)的,那么這個(gè)多邊形就是凸多邊形。
//有的題目需要根據(jù)給出的點(diǎn)順時(shí)針逆時(shí)針?lè)謩e判斷 bool check_Tu() {bool f=true;for (int i=1;i<=n;i++)if (fcmp(cross(a[i%n+1]-a[i],a[(i-2+n)%n+1]-a[i]),0)<0) {f=false; break;}if (f) return true;for (int i=1;i<=n;i++)if (fcmp(cross(a[(i+n-2)%n+1]-a[i],a[i%n+1]-a[i]),0)<0) return false;return true; }10.求多邊形面積
如果是個(gè)凸多邊形,可以從某一個(gè)頂點(diǎn)出發(fā),把凸多邊形分成n-2個(gè)三角形,然后累加面積。
但是面對(duì)于非凸多邊形,……或許有人已經(jīng)發(fā)現(xiàn),因?yàn)椴娣e是有正負(fù)的,事實(shí)上,因?yàn)槿切蚊娣e是有向的,在外面的部分可以正負(fù)抵消掉,所以這個(gè)方法可以推廣到所有多邊形。
還有一點(diǎn)建議,可以選擇一個(gè)多邊形上節(jié)點(diǎn)來(lái)劃分頂點(diǎn),可以減少計(jì)算量^_^
還有,點(diǎn)要按順序求……不然下場(chǎng)很慘……
總結(jié)
以上是生活随笔為你收集整理的平面几何基本知识——学习笔记(2)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 平面提取论文
- 下一篇: 11.0.高等数学3-平面与直线的位置关