|
|
const
{正旋值-90_+90}zhengxuan1:array[-9..9]of single=(-1 ,-0.985,-0.966,-0.906,-0.819,-0.707,-0.574,-0.423,-0.2589,-0.087,0.087,0.259,0.423,0.574,0.707,0.819,0.906,0.966,0.996);
{余玄值-90_+90}yuxuan1 :array[-9..9]of single=(0 ,0.174 ,0.342,0.5,0.643,0.766,0.866,0.94,0.985,1,0.985,0.94,0.866,0.766,0.643,0.5,0.342,0.174,0);
{正旋值0_+360 }zhengxuan2:array[0..18]of single=(0.0001,0.3420,0.6428,0.8660,0.9848,0.9848,0.8660,0.6428,0.3420,0,-0.3420,-0.6428,-0.8660,-0.9848,-0.9848,-0.8660,-0.6428,-0.3420,0.0001);
{余玄值0_+360 }yuxuan2 :array[0..18]of single=(1 ,0.9397,0.7660,0.5,0.1736,-0.1736,-0.5,-0.7660,-0.9397,-1,-0.9397,-0.7660,-0.5,-0.1736,0.1736,0.5,0.7660,0.9397,1);
procedure tform1.yuanhuan(ox,oy,oz,s,r1,l1,l2,l3,l4:real;fangxiang:integer);
{//轮胎体//fangxiang=1面向z轴方向//fangxiang=2指向x轴方向//fangxiang=3指向y轴方向}
var
i,j:integer;
x1,y1,z1,x2,y2,z2,x3,y3,z3,x4,y4,z4,x12,y12,z12,x13,y13,z13,nx1,ny1,nz1,nx,ny,nz,n:real;
begin
for i:=0 to 17 do
begin
for j:=0 to 17 do
begin
glbegin(gl_quads);
case fangxiang of
1:begin
x1:=ox+(s+r1*yuxuan2[j])*yuxuan2 ;y1:=oy+sqrt(s*s+2*r1*s*yuxuan2[j]+r1*r1)*zhengxuan2 ;z1:=oz+r1*zhengxuan2[j] ;
x2:=ox+(s+r1*yuxuan2[j])*yuxuan2[i+1] ;y2:=oy+sqrt(s*s+2*r1*s*yuxuan2[j]+r1*r1)*zhengxuan2[i+1] ;z2:=oz+r1*zhengxuan2[j] ;
x3:=ox+(s+r1*yuxuan2[j+1])*yuxuan2[i+1];y3:=oy+sqrt(s*s+2*r1*s*yuxuan2[j+1]+r1*r1)*zhengxuan2[i+1];z3:=oz+r1*zhengxuan2[j+1];
x4:=ox+(s+r1*yuxuan2[j+1])*yuxuan2 ;y4:=oy+sqrt(s*s+2*r1*s*yuxuan2[j+1]+r1*r1)*zhengxuan2 ;z4:=oz+r1*zhengxuan2[j+1];
end;
2:begin
x1:=ox+r1*zhengxuan2[j] ;y1:=oy+(s+r1*yuxuan2[j])*yuxuan2 ;z1:=oz+sqrt(s*s+2*r1*s*yuxuan2[j]+r1*r1)*zhengxuan2 ;
x2:=ox+r1*zhengxuan2[j] ;y2:=oy+(s+r1*yuxuan2[j])*yuxuan2[i+1] ;z2:=oz+sqrt(s*s+2*r1*s*yuxuan2[j]+r1*r1)*zhengxuan2[i+1] ;
x3:=ox+r1*zhengxuan2[j+1];y3:=oy+(s+r1*yuxuan2[j+1])*yuxuan2[i+1];z3:=oz+sqrt(s*s+2*r1*s*yuxuan2[j+1]+r1*r1)*zhengxuan2[i+1];
x4:=ox+r1*zhengxuan2[j+1];y4:=oy+(s+r1*yuxuan2[j+1])*yuxuan2 ;z4:=oz+sqrt(s*s+2*r1*s*yuxuan2[j+1]+r1*r1)*zhengxuan2 ;
end;
3:begin
x1:=ox+(s+r1*yuxuan2[j])*yuxuan2 ;y1:=oy+r1*zhengxuan2[j] ;z1:=oz+sqrt(s*s+2*r1*s*yuxuan2[j]+r1*r1)*zhengxuan2 ;
x2:=ox+(s+r1*yuxuan2[j])*yuxuan2[i+1] ;y2:=oy+r1*zhengxuan2[j] ;z2:=oz+sqrt(s*s+2*r1*s*yuxuan2[j]+r1*r1)*zhengxuan2[i+1] ;
x3:=ox+(s+r1*yuxuan2[j+1])*yuxuan2[i+1];y3:=oy+r1*zhengxuan2[j+1];z3:=oz+sqrt(s*s+2*r1*s*yuxuan2[j+1]+r1*r1)*zhengxuan2[i+1];
x4:=ox+(s+r1*yuxuan2[j+1])*yuxuan2 ;y4:=oy+r1*zhengxuan2[j+1];z4:=oz+sqrt(s*s+2*r1*s*yuxuan2[j+1]+r1*r1)*zhengxuan2 ;
end;
end;
x12:=x2-x1 ;y12:=y2-y1 ;z12:=z2-z1;
x13:=x3-x1 ;y13:=y3-y1 ;z13:=z3-z1;
nx:=y12*z13-z12*y13 ;ny:=z12*x13-x12*z13 ;nz:=x12*y12-y12*x12;
n:=sqrt(nx*nx+ny*ny+nz*nz);
nx1:=nx/n;ny1:=ny/n;nz1:=nz/n;
gltexcoord2f(l1+j/18*(l3-l1) ,l2+i/18*(l4-l2) );glnormal3f(nx1,ny1,nz1);glvertex3f(x1,y1,z1);
gltexcoord2f(l1+j/18*(l3-l1) ,l2+(i+1)/18*(l4-l2));glvertex3f(x2,y2,z2);
gltexcoord2f(l1+(j+1)/18*(l3-l1),l2+(i+1)/18*(l4-l2));glvertex3f(x3,y3,z3);
gltexcoord2f(l1+(j+1)/18*(l3-l1),l2+i/18*(l4-l2) );glvertex3f(x4,y4,z4);
glend;
end;
end;
end;
|
|