正二十面体&&正十二面体
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
展开图如下所示:
若以正二十面体的中心为原点,各顶点的坐标分别为Φ,0,±1)},在此Φ = (1+
正十二面体是正二十面体的对偶多面体。
建立模型的基本过程如下:
void CTestView::ReadPoint()//点表
{
double a=180;//长方形的宽
double b=a*(1+sqrt(5))/2;//黄金分割的矩形的长
double half=0.5;
//第一个长方形的各个顶点
P[0].x=half*a;P[0].y=0;P[0].z=half*b;
P[1].x=-half*a;P[1].y=0;P[1].z=half*b;
P[2].x=half*a;P[2].y=0;P[2].z=-1/2.0*b;
P[3].x=-1/2.0*a;P[3].y=0;P[3].z=-half*b;
//第二个长方形的各个顶点
P[4].x=half*b;P[4].y=-half*a;P[4].z=0;
P[5].x=half*b;P[5].y=half*a;P[5].z=0;
P[6].x=-half*b;P[6].y=half*a;P[6].z=0;
P[7].x=-half*b;P[7].y=-half*a;P[7].z=0;
//第三个长方形的各个顶点
P[8].x=0;P[8].y=-half*b;P[8].z=half*a;
P[9].x=0;P[9].y=-half*b;P[9].z=-half*a;
P[10].x=0;P[10].y=half*b;P[10].z=half*a;
P[11].x=0;P[11].y=half*b;P[11].z=-half*a;
}
void CTestView::ReadFace()//面表
{
//面的边数、面的顶点编号
F[0].SetEN(3) ;F[0].p[0]=0 ;F[0].p[1]=5 ;F[0].p[2]=10 ;
F[1].SetEN(3) ;F[1].p[0]=5 ;F[1].p[1]=2 ;F[1].p[2]=11 ;
F[2].SetEN(3) ;F[2].p[0]=11 ;F[2].p[1]=3 ;F[2].p[2]=6 ;
F[3].SetEN(3) ;F[3].p[0]=6 ;F[3].p[1]=1 ;F[3].p[2]=10 ;
F[4].SetEN(3) ;F[4].p[0]=7 ;F[4].p[1]=1 ;F[4].p[2]=6 ;
F[5].SetEN(3) ;F[5].p[0]=1 ;F[5].p[1]=0 ;F[5].p[2]=10 ;
F[6].SetEN(3) ;F[6].p[0]=8 ;F[6].p[1]=0 ;F[6].p[2]=1 ;
F[7].SetEN(3) ;F[7].p[0]=0 ;F[7].p[1]=4 ;F[7].p[2]=5 ;
F[8].SetEN(3) ;F[8].p[0]=4 ;F[8].p[1]=2 ;F[8].p[2]=5 ;
F[9].SetEN(3) ;F[9].p[0]=2 ;F[9].p[1]=3;F[9].p[2]=11 ;
F[10].SetEN(3);F[10].p[0]=2 ;F[10].p[1]=9;F[10].p[2]=3 ;
F[11].SetEN(3);F[11].p[0]=3 ;F[11].p[1]=7 ;F[11].p[2]=6;
F[12].SetEN(3);F[12].p[0]=4 ;F[12].p[1]=9;F[12].p[2]=2;
F[13].SetEN(3);F[13].p[0]=9;F[13].p[1]=7 ;F[13].p[2]=3 ;
F[14].SetEN(3);F[14].p[0]=7 ;F[14].p[1]=8;F[14].p[2]=1 ;
F[15].SetEN(3);F[15].p[0]=8;F[15].p[1]=4 ;F[15].p[2]=0;
F[16].SetEN(3);F[16].p[0]=10 ;F[16].p[1]=5 ;F[16].p[2]=11;
F[17].SetEN(3);F[17].p[0]=6;F[17].p[1]=10;F[17].p[2]=11;
F[18].SetEN(3);F[18].p[0]=4 ;F[18].p[1]=8;F[18].p[2]=9 ;
F[19].SetEN(3);F[19].p[0]=8 ;F[19].p[1]=7 ;F[19].p[2]=9;
}
正十二面体
正十二面体是五个柏拉图立体之一,共有二十个顶点、三十条边和十二个面,而每一个面皆是正五边形
正十二面体是由12 个正五边形所组成的正多面体。若以正十二面体的中心为(0,0,0),各顶点的坐标为{(0,±1/φ,±φ), (±1/φ,±φ,0), (±φ,0,±1/φ), (±1,±1,±1)},其中φ = (1+√5)/2,黄金分割数。
展开图
Ptemp[2].x=half*a;Ptemp[2].y=0;Ptemp[2].z=-1/2.0*b;
Ptemp[3].x=-1/2.0*a;Ptemp[3].y=0;Ptemp[3].z=-half*b;
//第二个长方形的各个顶点
Ptemp[4].x=half*b;Ptemp[4].y=-half*a;Ptemp[4].z=0;
Ptemp[5].x=half*b;Ptemp[5].y=half*a;Ptemp[5].z=0;
Ptemp[6].x=-half*b;Ptemp[6].y=half*a;Ptemp[6].z=0;
Ptemp[7].x=-half*b;Ptemp[7].y=-half*a;Ptemp[7].z=0;
//第三个长方形的各个顶点
Ptemp[8].x=0;Ptemp[8].y=-half*b;Ptemp[8].z=half*a;
Ptemp[9].x=0;Ptemp[9].y=-half*b;Ptemp[9].z=-half*a;
Ptemp[10].x=0;Ptemp[10].y=half*b;Ptemp[10].z=half*a;
Ptemp[11].x=0;Ptemp[11].y=half*b;Ptemp[11].z=-half*a;
//通过正二十面体计算正十二面体顶点坐标
CVector v1,v2,v3,vn;
v1=CVector(Ptemp[0]);v2=CVector(Ptemp[5]);v3=CVector(Ptemp[10]);//0,5,10 vn=((v1+v2+v3)/3).Unit();
P[0].x=r*vn.x;P[0].y=r*vn.y;P[0].z=r*vn.z;//把点放到球面坐标上
v1=CVector(Ptemp[5]);v2=CVector(Ptemp[2]);v3=CVector(Ptemp[11]);//5,2,11 vn=((v1+v2+v3)/3).Unit();
P[1].x=r*vn.x;P[1].y=r*vn.y;P[1].z=r*vn.z;