線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1716
推到 Plurk!
推到 Facebook!

平面方程式ax+by+cz+d=0於程式中遇到的問題

尚未結案
bigpipi999
一般會員


發表:4
回覆:4
積分:1
註冊:2004-08-04

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-08-21 02:16:10 IP:61.229.xxx.xxx 未訂閱
小弟是新手,且不是工程及數學背景出身的 目前在研究3D程式設計,在參考資料上遇到了下列的問題 struct Point{ float x,y,z; }; //頂點宣告 struct Plane{ float a,b,c,d; }; //平面方程式宣告 Point *v1; Point *v2; Point *v3; Plane Face; SetVertex(v1); //將X,Y,Z值填入V1 SetVertex(v2); //將X,Y,Z值填入V2 SetVertex(v3); //將X,Y,Z值填入V3 void CalculatePlane() { Face.a=v1.y*(v2.z-v3.z) v2.y*(v3.z-v1.z) v3.y*(v1.z-v2.z); Face.b=v1.z*(v2.x-v3.x) v2.z*(v3.x-v1.x) v3.z*(v1.x-v2.x); Face.c=v1.x*(v2.y-v3.y) v2.x*(v3.y-v1.y) v3.x*(v1.y-v2.y); Face.d=-(v1.x*(v2.y*v3.z-v3.y*v2.z) v2.x*(v3.y*v1.z-v1.y*v3.z) v3.x*(v1.y*v2.z-v2.y*v1.z)); } 小弟我看了很久也查了一些資料,但還是看不懂上面CalculatePlane()到底作用為何? 求出a,b,c,d值後各代表什麼?煩請各位幫忙,謝謝
malanlk
尊榮會員


發表:20
回覆:694
積分:577
註冊:2004-04-19

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-08-21 12:51:43 IP:61.219.xxx.xxx 未訂閱
空間中不在一直線上的相異三點可決定 ㄧ個平面(就是只有唯一的一個平面包含這三點) 這個函數 應該是給三點求出 ax by cz d=0 的 a,b,c,d 的值, a,b,c,d值求出後, 就等於求出平面了... 例如 a=1,b=0,c=0,d=0 就是 x=0 , 也就是 y,z 軸張開的那個平面 a=1,b=0,c=0,d=-1 就是 x=1 , 也就是平行於 y,z 軸張開的那個平面而且x=1 的平面.... 發表人 - malanlk 於 2005/08/21 12:52:37
bigpipi999
一般會員


發表:4
回覆:4
積分:1
註冊:2004-08-04

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-08-25 11:57:46 IP:220.130.xxx.xxx 未訂閱
謝謝malanlk 大大的說明 小弟大概了解了 只是公式一定要以上面的方式來計算嗎? 譬如我能否把 Face.b=v1.z*(v2.x-v3.x) v2.z*(v3.x-v1.x) v3.z*(v1.x-v2.x);這行改成 Face.b=v1.x*(v2.z-v3.z) v2.x*(v3.z-v1.z) v3.x*(v1.z-v2.z); 謝謝
malanlk
尊榮會員


發表:20
回覆:694
積分:577
註冊:2004-04-19

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-08-25 13:08:01 IP:203.69.xxx.xxx 未訂閱
恐怕不行, 因為你列出的兩行算式 剛好成正負值交換, 假設其他三個值 算出結果是 a=0,c=0,d=1 而 兩個算式算出來 b=1 ,b=-1 那麼 很明顯 y 1=0, -y 1=0 是兩個不同的平面吧....
系統時間:2024-04-30 13:43:52
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!