演算法嘗試(一)

2021-04-01 16:26:40 字數 572 閱讀 4982

一、判斷兩封閉單連通圖形a和b關係:

旋轉法:取圖形a內的任一點x,如果x是b內部的點,則說明a、b相交。否則,連線x和b的邊界上點p作線段xp。從x出發,考察從線段xp,作狀態(ia,ib),ia和ib非零與否分別表示在a和b的內部與否,初始時為(1, 0),經過a或b的邊界分別使ia或ib翻轉,如果出現(ia,ib)=(1,1)就說明a、b相交,否則說明a、b不相交。

二、判斷乙個點x是否在n邊形內部:

圓環染色法:以x為起點,多邊形各端點pi為終點得向量xpi(i=0,1,...,n-1)。此後順序考察各向量過程中,用到兩個運算:以內角為準,到對比向量va相對於vb是順時針還是逆時針的運算,返回1代表順時針,-1表示逆時針,該運算可用向量積實現;三向量中間向量是否在兩側向量所夾內角中的判斷,記作cr,可用解析法實現。記向量組xpi為v[i]。演算法如下(經初步驗證):   

bool inpvec(const vector *v, int n)

bool cr(const vector *v, int ic, int io, int &s)

bool check(const vector *v, int p, int s)

非遞迴演算法嘗試1!

苦思無果之餘,某群友發了個帖子給我,我一看,同樣是求2點間所有路徑的演算法,用的是c 和結點棧。想法非常獨特,引用了乙個線的定義。完美解決了遞迴改為迴圈中的路徑標記問題。於是本人辛辛苦苦弄了半天終於把遞迴改為了while迴圈 結點棧。測試後雷了 花的時間竟然比原來的遞迴還多一點!我這是何苦來哉 其實...

ThreeJs 一 簡單的嘗試

附webgl教程 webgl 自學網 就好比jquery對js進行封裝一樣。等我們有足夠的開發基礎之後,也可以深入去了解底層知識,不過目前這些知識並不是我們學習的重點。threejs是使用js語言編寫的,屬於webgl第三方庫,threejs提供了很多三維顯示的api,而利用這些api我們就能夠建立...

關於遮擋剔除的幾個演算法嘗試

之前在公司使用 dx9做端遊引擎,優化效能中涉及到乙個演算法,就是遮擋剔除。最經典的演算法就是使用 api中的遮擋查詢介面,gpu gem 上面有一篇文章專門講這個。實話說,這個演算法看過好幾次,直到今天都沒有徹底明白。後來看到有的人評價說這個演算法不一定能改進效能,甚至還會導致更低。看到這個我有點...