生活随笔
收集整理的這篇文章主要介紹了
球体模型建立
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
構建球體模型主要的數據結構是點表*pointList 和面表 *faceList,兩個數據結構都是指針,首先利用void createPointList()函數創建點表,球面的參數方程如下,可以通過構建很多離散點,最后用這些離散點構建三角形面片,生成球面。
void CSphere
::createPointList()
{int NBeta
= (int) (180 / this->beta
);int NTheta
= (int)(360 / this->theta
);this->point3DList
= new CPoint3D
[(NTheta
+1) * (NBeta
-1)+ 2];point3DList
[0].x
= 0;point3DList
[0].y
= 0;point3DList
[0].z
= this->R
;for(int NB
= 1;NB
< NBeta
;NB
++)for (int NT
= 1; NT
<= (NTheta
+1); NT
++) {point3DList
[(NB
- 1) * (NTheta
+ 1) + NT
].x
= (this->R
* sin(NB
* beta
*PI
/180)) * cos((NT
-1) * theta
* PI
/ 180);point3DList
[(NB
- 1) * (NTheta
+ 1) + NT
].y
= (this->R
* sin(NB
* beta
* PI
/ 180)) * sin((NT
-1) * theta
* PI
/ 180);point3DList
[(NB
- 1) * (NTheta
+ 1) + NT
].z
= this->R
* cos(NB
* beta
* PI
/ 180);}point3DList
[(NTheta
+ 1) * (NBeta
- 1) + 1].x
= 0;point3DList
[(NTheta
+ 1) * (NBeta
- 1) + 1].y
= 0;point3DList
[(NTheta
+ 1) * (NBeta
- 1) + 1].z
= -(this->R
);
}
接下來看看三角形面片是什么生成的?
生成三角形面片的思路如下:對每一個維度從七點開始以此選擇兩個點,然后依據右手定則旋轉,分別在上一個維度和下一個維度的同一條找到一個點,分別構成兩個三角形面片,依此原則可以構成鋪滿整個球體的三角形面片。
void CSphere
::creatFaceList()
{int NBeta
= (int)(180 / this->beta
);int NTheta
= (int)(360 / this->theta
);faceList
= new CFace
[(NBeta
- 1)* NTheta
* 2+1];for(int NB
= 1;NB
< NBeta
;NB
++)for (int NT
= 1; NT
<= NTheta
; NT
= NT
+ 1) {faceList
[(NB
-1) * NTheta
* 2 + 2*NT
- 1].SetNum(3);faceList
[(NB
-1) * NTheta
* 2 + 2 * NT
- 1].vI
[0] = ((NB
-1) * (NTheta
+1) + NT
);faceList
[(NB
- 1) * NTheta
* 2 + 2 * NT
- 1].vI
[1] = ((NB
- 1) * (NTheta
+1) + NT
+1);if (NB
== 1)faceList
[(NB
- 1) * NTheta
* 2 + 2 * NT
- 1].vI
[2] = 0;elsefaceList
[(NB
- 1) * NTheta
* 2 + 2 * NT
- 1].vI
[2] = ((NB
- 2) * (NTheta
+1) + NT
+ 1);faceList
[(NB
- 1) * NTheta
* 2 + 2 * NT
].SetNum(3);faceList
[(NB
- 1) * NTheta
* 2 + 2 * NT
].vI
[0] = ((NB
- 1) * (NTheta
+ 1) + NT
+ 1);faceList
[(NB
- 1) * NTheta
* 2 + 2 * NT
].vI
[1] = ((NB
- 1) * (NTheta
+ 1) + NT
);if (NB
== (NBeta
- 1))faceList
[(NB
- 1) * NTheta
* 2 + 2 * NT
].vI
[2] = (NTheta
+ 1) * (NBeta
- 1) + 1;elsefaceList
[(NB
- 1) * NTheta
* 2 + 2 * NT
].vI
[2] = (NB
* (NTheta
+ 1) + NT
);}
}
總結
以上是生活随笔為你收集整理的球体模型建立的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。