盒子測試還可以優化,在一定程度上,僅僅只有測試它的頂點,叫做「正頂點」和「負頂點」(叫做最大頂點和最小頂點)。
盒子在(視景體)之外在足夠的情況下測試乙個單獨的頂點,其中的第二個頂點,僅僅在需要區分盒子完全在視景體之內還是部分在視景體之內的情況下做測試。
因此什麼是這些點呢?找到這些點有多高的難度?
假設乙個平面和它的法線,乙個正頂點是從盒子沿著法線方向延伸,負頂點剛好是相反。
如果頂點p是在平面錯誤的邊,盒子可以直接被丟棄,它完全是在視景體之外。另一方面,如果頂點p是在平面正確的邊,那麼還要測試頂點n的情況,來確定盒子是完全在平面的正確邊還是盒子跟平面相交。
那麼我們如何找到這些點的難度,讓我們考慮兩種情況:軸對齊盒(aab),面向盒(ob)。在第一種情況中,aab,是非常簡單和低廉的計算代價來找到它們。
假設aab
包含x, y, z
元素並且在
xmin
和xmax
;ymin
和ymax
;和zmin
和zmax
。正點p
的成分如下所示:
p = (xmin,ymin,zmin)
if (normal.x >= 0)
p.x = xmax;
if (normal.y >=0))
p.y = ymax;
if (normal.z >= 0)
p.z = zmax:
負點n應用相反的規則:
n = (xmax,ymax,zmax)
if (normal.x >= 0)
n.x = xmin;
if (normal.y >=0))
n.y = ymin;
if (normal.z >= 0)
n.z = zmin:
如果盒子沒有軸對齊,比如,乙個ob
,但是這相對較高代價來計算這兩個點,由
moller and haines
所提出的方法是變換到盒子空間中的法線。因此假設盒子的三個軸,bx,by,
bz。為了將法線轉換到法線,僅僅只需要在這些軸投影法線。
nb = (bx . n, by . n, bz . n)
在盒子空間中的法線,nb
,經常用來計算頂點
p和頂點
n。對於
ob,測試實現是用三個
點乘,然後加上用來計算1
個或者2
個距離計算的測試。如果盒子在視景體之外它應該比測試盒子的八個頂點的速度。
給以頂點p
和頂點n
,下面的**用來尋找在視景體中找到位置的如下:
int frustumg::boxinfrustum(aabox &b) {
int result = inside;
//for each plane do ...
for(int i=0; i
// is the positive vertex outside?
if (pl[i].distance(b.getvertexp(pl[i].normal))
return outside;
// is the negative vertex outside?
else if (pl[i].distance(b.getvertexn(pl[i].normal))
result = intersect;
return(result);
第一講 ODE幾何方法
一,oed是常微分方程的英文縮寫,一般形式是 二,四,如何做向量場 電腦方法 等距取點 計算各個點的斜率,並畫出斜率向量 人腦方法 將微分方程化成標準型 根據固定的斜率 在等值線上,用實線畫出斜率為c的向量 根據斜率向量畫出積分曲線 五,原理1 兩條積分曲線不會相交,因為任一點上不能同時存在兩個斜率...
CTS測試方法二
1.準備一台測試機器a,一張可以打 發簡訊的sim卡,一張16g的高速tf卡 推薦閃迪class10等級,讀寫速度95m s 還需要能夠連線youtube 的網路 推薦使用2m的香港專線 2.首先把a恢復出廠設定,然後連線電腦在terminal下進入到media資料夾輸入一下命令拷貝檔案到a的記憶體...
常見的測試型別及其測試方法 二
功能測試方法,即對產品功能進行測試的方法。通用方法包括 單執行正常值輸入法 單執行邊界值輸入法 多執行順序執行法 多執行相互作用法 執行 軟體測試中,模擬使用者的 操作 或 行為 執行應能夠為使用者提供完整 有意義的行為 單執行 軟體測試中,模擬使用者的 乙個操作 或 乙個行為 多執行 軟體測試中,...