2024年4月10日发(作者:)

怎样在VC环境下实现 #include 库函数

#include

#include

#include

#include

#define Scale 1.35

void DrawFace(int F,int Fc[30][11],float St[50][3],float Rol,float DE,

float Aux1,float Aux2,float Aux3,float Aux4,float Aux5,float Aux6,

float Aux7,float Aux8)

{

float XObs,YObs,ZObs,XProj,YProj;

int XScreen,YScreen;

int S,NS,No;

float X,Y,Z,X0,Y0,Z0;

int MaxX=getmaxx();

int MaxY=getmaxy();

NS=Fc[F][0];

for(S=1;S<=NS;S++)

{

No=Fc[F][S];X=St[No][1];Y=St[No][2];Z=St[No][3];

XObs=-X*Aux1+Y*Aux3;YObs=-X*Aux5-Y*Aux6+Z*Aux4;

ZObs=-X*Aux7-Y*Aux8-Z*Aux2+Rol;

XProj=DE*XObs/ZObs;YProj=DE*YObs/ZObs;

XScreen=floor(0.5+XProj*Scale+MaxX/2);YScreen=floor(0.5+MaxY/2-YProj);

if(S==1)

{

moveto(XScreen,YScreen);

X0=XScreen;Y0=YScreen;

}

else

lineto(XScreen,YScreen);

}

lineto(X0,Y0);

}

void DrawObject(int Fc[30][11],float St[50][3],int NF,float Rol,float

Theta,

float Phi,float DE,int Dot)

{

float Th,Ph,Aux1,Aux2,Aux3,Aux4,Aux5,Aux6,Aux7,Aux8;

int F,St1,St2,St3;

float P1,P2,P3,Q1,Q2,Q3;

float v1,v2,v3,n1,n2,n3;

float O1,O2,O3,SProduct;

Th=3.1415926*Theta/180;Ph=3.1415926*Phi/180;

Aux1=sin(Th);Aux2=sin(Ph);Aux3=cos(Th);Aux4=cos(Ph);Aux5=Aux3*Aux2;

Aux6=Aux1*Aux2;Aux7=Aux3*Aux4;Aux8=Aux1*Aux4;

O1=Rol*Aux7;O2=Rol*Aux8;O3=Rol*Aux2;

for(F=1;F<=NF;F++)

{

St1=Fc[F][1];St2=Fc[F][2]; St3=Fc[F][3];

v1=O1-St[St1][1];v2=O2-St[St1][2];v3=O3-St[St1][3];

P1=St[St2][1]-St[St1][1];P2=St[St2][2]-St[St1][2];P3=St[St2][3]-St[St

1][3];

Q1=St[St3][1]-St[St1][1];Q2=St[St3][2]-St[St1][2];Q3=St[St3][3]-St[St

1][3];

n1=P2*Q3-Q2*P3;n2=P3*Q1-Q3*P1;n3=P1*Q2-Q1*P2;

SProduct=v1*n1+v2*n2+v3*n3;

if(SProduct>0.0)

{

setlinestyle(SOLID_LINE,0,NORM_WIDTH);

DrawFace(F,Fc,St,Rol,DE,Aux1,Aux2,Aux3,Aux4,Aux5,Aux6,Aux7,Aux8);

}

问题补充 2009-01-05 16:59

else if(Dot==1)

{

setlinestyle(DOTTED_LINE,0,NORM_WIDTH);

DrawFace(F,Fc,St,Rol,DE,Aux1,Aux2,Aux3,Aux4,Aux5,Aux6,Aux7,Aux8);

}

}

}

void Polyhedron(int pColor)

{

int NF,Fc[30][11],MaxX,MaxY;

float St[50][3];

MaxX=getmaxx();MaxY=getmaxy();

setcolor(pColor);

setviewport(0,0,MaxX,MaxY,1);

St[1][1]=40;St[1][2]=54;St[1][3]=-40;

St[2][1]=40;St[2][2]=54;St[2][3]=0;

St[3][1]=40;St[3][2]=-54;St[3][3]=0;

St[4][1]=40;St[4][2]=-54;St[4][3]=-40;

St[5][1]=-40;St[5][2]=-54;St[5][3]=-40;

St[6][1]=-40;St[6][2]=54;St[6][3]=-40;

St[7][1]=-40;St[7][2]=54;St[7][3]=0;

St[8][1]=0;St[8][2]=34;St[8][3]=40;

St[9][1]=0;St[9][2]=-34;St[9][3]=40;

St[10][1]=-40;St[10][2]=-54;St[10][3]=0;

NF=9;

Fc[1][0]=4;Fc[1][1]=1;Fc[1][2]=2;Fc[1][3]=3;Fc[1][4]=4;

Fc[2][0]=4;Fc[2][1]=1;Fc[2][2]=6;Fc[2][3]=7;Fc[2][4]=2;

Fc[3][0]=3;Fc[3][1]=2;Fc[3][2]=7;Fc[3][3]=8;

Fc[4][0]=4;Fc[4][1]=2;Fc[4][2]=8;Fc[4][3]=9;Fc[4][4]=3;

Fc[5][0]=4;Fc[5][1]=1;Fc[5][2]=4;Fc[5][3]=5;Fc[5][4]=6;

Fc[6][0]=4;Fc[6][1]=7;Fc[6][2]=10;Fc[6][3]=9;Fc[6][4]=8;

Fc[7][0]=3;Fc[7][1]=3;Fc[7][2]=9;Fc[7][3]=10;

Fc[8][0]=4;Fc[8][1]=10;Fc[8][2]=5;Fc[8][3]=4;Fc[8][4]=3;

Fc[9][0]=4;Fc[9][1]=5;Fc[9][2]=10;Fc[9][3]=7;Fc[9][4]=6;

DrawObject(Fc,St,NF,800.0,330,30,1000,1);

}

void main()

{

int ErrorCode,GraphDriver,GraphMode;

GraphDriver=0;

initgraph(&GraphDriver,&GraphMode,"");

Polyhedron(1);

getch();closegraph();

}