📄 3dgraphics1_toushi.c
字号:
k = k - 100;
}
X = C1.x; Y = C1.y; Z = C1.z;
i = X; j = Y;
while(j<=C2.y)
{
while(i>=C4.x)
{
Point3D_2D_TouShi(&X,&Y,&Z,d,qx,qy,qz);
putpixel(X,Y,8);
i--;
X = i;Y = j;Z = C1.z;
}
j++;
X = C1.x; Y = j;Z = C1.z; i = X;
}
X = B1.x; Y = B1.y; Z = B1.z; /* 长方体 */
i = X; j = Y;
while(j <= B2.y)
{
while(i >= B4.x)
{
Point3D_2D_TouShi(&X,&Y,&Z,d,qx,qy,qz);
putpixel(X,Y,8);
i--;
X = i; Y = j; Z = B1.z;
}
j++;
X = B1.x; Y = j; Z = B1.z;i = X;
}
X = B1.x; Y = B1.y; Z = B1.z;
i = X; k = Z;
while(i>=B4.x)
{
while(k <= B5.z)
{
Point3D_2D_TouShi(&X,&Y,&Z,d,qx,qy,qz);
putpixel(X,Y,6);
k++;
X = i;Y = B1.y;Z = k;
}
i--;
X = i; Y = B1.y;Z = B1.z;k = Z;
}
X = B1.x; Y = B1.y; Z = B1.z;
j = Y; k = Z;
while(j <= B2.y)
{
while(k<=B5.z)
{
Point3D_2D_TouShi(&X,&Y,&Z,d,qx,qy,qz);
putpixel(X,Y,3);
k++;
X = B1.x;Y = j;Z = k;
}
j++;
X = B1.x; Y = j;Z = B1.z; k = Z;
}
X = B5.x; Y = (B5.y+B6.y)/2.0 + 30; Z = (B5.z + B1.z)/2.0 + 30;/* 画窗*/
j = Y; k = Z;
while(j>=((B5.y + B6.y)/2.0 - 30))
{
while(k >= (B5.z + B1.z)/2.0 - 30)
{
Point3D_2D_TouShi(&X,&Y,&Z,d,qx,qy,qz);
putpixel(X,Y,15);
k--;
X = B1.x;Y = j;Z = k;
}
j--;
X = B5.x; Y = j;Z = (B5.z + B1.z)/2.0 + 30;k = Z;
}
X = B5.x; Y = (B5.y+B6.y)/2.0+30; Z = (B5.z + B1.z)/2.0 + 30;/* 窗框 */
k = Z; /* 三条竖线*/
while(k>=(B5.z + B1.z)/2.0 - 30)
{
Point3D_2D_TouShi(&X,&Y,&Z,d,qx,qy,qz);
putpixel(X,Y,4);
k--;
X = B5.x; Y = (B5.y+B6.y)/2.0+30; Z = k;
}
X = B5.x; Y = (B5.y+B6.y)/2.0; Z = (B5.z + B1.z)/2.0 + 30;
k = Z;
while(k>=(B5.z + B1.z)/2.0 - 30)
{
Point3D_2D_TouShi(&X,&Y,&Z,d,qx,qy,qz);
putpixel(X,Y,4);
k--;
X = B5.x; Y = (B5.y+B6.y)/2.0; Z = k;
}
X = B5.x; Y = (B5.y+B6.y)/2.0-30; Z = (B5.z + B1.z)/2.0 + 30;
k = Z;
while(k>=(B5.z + B1.z)/2.0 - 30)
{
Point3D_2D_TouShi(&X,&Y,&Z,d,qx,qy,qz);
putpixel(X,Y,4);
k--;
X = B5.x; Y = (B5.y+B6.y)/2.0-30; Z = k;
}
X = B5.x; Y = (B5.y+B6.y)/2.0 + 30; Z = (B5.z + B1.z)/2.0+30; /* 框的两条横线*/
j = Y;
while(j>=(B5.y+B6.y)/2.0 - 30)
{
Point3D_2D_TouShi(&X,&Y,&Z,d,qx,qy,qz);
putpixel(X,Y,4);
j--;
X = B5.x; Y = j; Z = (B5.z + B1.z)/2.0+30;
}
X = B5.x; Y = (B5.y+B6.y)/2.0 + 30; Z = (B5.z + B1.z)/2.0-30;
j = Y;
while(j>=(B5.y+B6.y)/2.0 - 30)
{
Point3D_2D_TouShi(&X,&Y,&Z,d,qx,qy,qz);
putpixel(X,Y,4);
j--;
X = B5.x; Y = j; Z = (B5.z + B1.z)/2.0-30;
}
Cft1.A.x = B5.x+15; /* 窗的台板 */
Cft1.A.y = (B5.y+B6.y)/2.0;
Cft1.A.z = ((B5.z + B1.z)/2.0) + 30;
Cft1.a = 60;
Cft1.b = 30;
Cft1.h = 5;
Cft3D(Cft1.A,Cft1.a,Cft1.b,Cft1.h,d,qx,qy,qz);
X = (B5.x + B8.x)/2.0 + 50; Y = B5.y; Z = B5.z;/* 画门*/
i = X; k = Z;
while(i>=((B5.x + B8.x)/2.0 - 50))
{
while(k >= B5.z - 100)
{
Point3D_2D_TouShi(&X,&Y,&Z,d,qx,qy,qz);
putpixel(X,Y,15);
k--;
X = i;Y = B5.y;Z = k;
}
i--;
X = i; Y = B5.y;Z = B5.z;k = Z;
}
Cft1.A.x = (B5.x + B8.x)/2.0 + 50;
Cft1.A.y = B5.y-25;
Cft1.A.z = B5.z-50;
Cft1.a = 50;
Cft1.b = 5;
Cft1.h = 100;
Cft3D(Cft1.A,Cft1.a,Cft1.b,Cft1.h,d,qx,qy,qz);
Cft1.A.x = (B5.x + B8.x)/2.0 - 50;
Cft1.A.y = B5.y-25;
Cft1.A.z = B5.z-50;
Cft1.a = 50;
Cft1.b = 5;
Cft1.h = 100;
Cft3D(Cft1.A,Cft1.a,Cft1.b,Cft1.h,d,qx,qy,qz);
Cft1.A.x = B1.x-10; /* 柱子*/
Cft1.A.y = C1.y+20;
Cft1.A.z = C1.z - h/2.0;
Cft1.a = 25;
Cft1.b = 25;
Cft1.h = h;
Cft3D(Cft1.A,Cft1.a,Cft1.b,Cft1.h,d,qx,qy,qz);
Cft1.A.x = B4.x+10; /* 柱子*/
Cft1.A.y = C4.y+20;
Cft1.A.z = C4.z - h/2.0;
Cft1.a = 25;
Cft1.b = 25;
Cft1.h = h;
Cft3D(Cft1.A,Cft1.a,Cft1.b,Cft1.h,d,qx,qy,qz);
T1.x = A.x; T1.y = A.y; T1.z = A.z - h/2.0;
r = a +250;
SLZU3D(T1,r,b+100,d,qx,qy,qz); /* 房顶,三棱柱 */
Cft1.A.x = A.x; /* 屋脊 */
Cft1.A.y = A.y;
Cft1.A.z = A.z - h/2.0-r*(1.0/5.0);
Cft1.a = 10;
Cft1.b = b + 100;
Cft1.h = 10;
Cft3D(Cft1.A,Cft1.a,Cft1.b,Cft1.h,d,qx,qy,qz);
}
void My3DGraphics_B(Point3D A,int d,float qx,float qy,float qz)
{
int X,Y,Z;
CFT Cft1,Cft2,Cft3,Cft4,Cft5,Cft6;
Point3D D1,D2,T;
Point B1,B2;
int a,b,i,j,k;
setbkcolor(2);
a = 400; b = 800;
Rect_3D(A,a,b,15,d,qx,qy,qz);
Rect_3D(A,a - 5,b - 5,6,d,qx,qy,qz);
Rect_3D(A,a,5,15,d,qx,qy,qz); /* 中间的一条横线*/
k = 100;
while(k>=95) /* 中间的圆 */
{
Yuan_3D(A,k,15,d,qx,qy,qz);
k--;
}
D2.x = A.x + b/4.0; D2.y = A.y; D2.z = A.z; /* 篮筐1下的圆 */
k = 50;
while(k>=45)
{
Yuan_3D(D2,k,15,d,qx,qy,qz);
k--;
}
Rect_3D(D2,100,5,15,d,qx,qy,qz);
k = 0; /* 篮筐下的斜线11 */
while(k<=5)
{
X = D2.x; Y = D2.y - 50 + k;Z = D2.z;
Point3D_2D_TouShi(&X,&Y,&Z,d,qx,qy,qz);
B1.x = X; B1.y = Y;
X = A.x + b/2.0; Y = A.y - 150 + k; Z = A.z;
Point3D_2D_TouShi(&X,&Y,&Z,d,qx,qy,qz);
B2.x = X; B2.y = Y;
MidPointLine(B1,B2,15);
k++;
}
k = 0; /* 篮筐1下的斜线12 */
while(k<=5)
{
X = D2.x; Y = D2.y + 50 - k;Z = D2.z;
Point3D_2D_TouShi(&X,&Y,&Z,d,qx,qy,qz);
B1.x = X; B1.y = Y;
X = A.x + b/2.0; Y = A.y + 150 - k; Z = A.z;
Point3D_2D_TouShi(&X,&Y,&Z,d,qx,qy,qz);
B2.x = X; B2.y = Y;
MidPointLine(B1,B2,15);
k++;
}
D1.x = A.x + b/2.0 - 80; D1.y = A.y; D1.z = A.z - 200;
k = 20;
while(k>=17) /* 篮筐1 */
{
Yuan_3D(D1,k,14,d,qx,qy,qz);
k--;
}
Cft1.A.x = D1.x + 30; /* 篮框1处接柱1 */
Cft1.A.y = D1.y;
Cft1.A.z = D1.z-5;
Cft1.a = 10;
Cft1.b = 15;
Cft1.h = 10;
Cft3D(Cft1.A,Cft1.a,Cft1.b,Cft1.h,d,qx,qy,qz);
Cft2.A.x = D1.x + 40; /* 篮板1 */
Cft2.A.y = D1.y;
Cft2.A.z = D1.z;
Cft2.a = 80;
Cft2.b = 10;
Cft2.h = 80;
Cft3D(Cft2.A,Cft2.a,Cft2.b,Cft2.h,d,qx,qy,qz);
Cft3.A.x = D1.x + 50; /* 篮板1的支架 */
Cft3.A.y = D1.y;
Cft3.A.z = D1.z + 100;
Cft3.a = 10;
Cft3.b = 10;
Cft3.h = 200;
Cft3D(Cft3.A,Cft3.a,Cft3.b,Cft3.h,d,qx,qy,qz);
Cft4.A.x = A.x - b/2.0 + 30; /*篮板2的支架*/
Cft4.A.y = D1.y;
Cft4.A.z = D1.z + 100;
Cft4.a = 10;
Cft4.b = 10;
Cft4.h = 200;
Cft3D(Cft4.A,Cft4.a,Cft4.b,Cft4.h,d,qx,qy,qz);
Cft2.A.x = A.x - b/2.0 + 40; /* 篮板2 */
Cft2.A.y = D1.y;
Cft2.A.z = D1.z;
Cft2.a = 80;
Cft2.b = 10;
Cft2.h = 80;
Cft3D(Cft2.A,Cft2.a,Cft2.b,Cft2.h,d,qx,qy,qz);
Cft1.A.x = A.x - b/2.0 + 50; /* 篮框2处接柱1 */
Cft1.A.y = D1.y;
Cft1.A.z = D1.z-5;
Cft1.a = 10;
Cft1.b = 15;
Cft1.h = 10;
Cft3D(Cft1.A,Cft1.a,Cft1.b,Cft1.h,d,qx,qy,qz);
D1.x = A.x - b/2.0 + 80; D1.y = A.y; D1.z = A.z - 205; /* 篮筐2 */
k = 20;
while(k>=17)
{
Yuan_3D(D1,k,14,d,qx,qy,qz);
k--;
}
D2.x = A.x - b/4.0; D2.y = A.y; D2.z = A.z; /* 篮筐2下的圆 */
k = 50;
while(k>=45)
{
Yuan_3D(D2,k,15,d,qx,qy,qz);
k--;
}
Rect_3D(D2,100,5,15,d,qx,qy,qz);
k = 0; /* 篮筐2下的斜线1 */
while(k<=5)
{
X = D2.x; Y = D2.y - 50 + k;Z = D2.z;
Point3D_2D_TouShi(&X,&Y,&Z,d,qx,qy,qz);
B1.x = X; B1.y = Y;
X = A.x - b/2.0; Y = A.y - 150 + k; Z = A.z;
Point3D_2D_TouShi(&X,&Y,&Z,d,qx,qy,qz);
B2.x = X; B2.y = Y;
MidPointLine(B2,B1,15);
k++;
}
k = 0; /* 篮筐2下的斜线2 */
while(k<=5)
{
X = D2.x; Y = D2.y + 50 - k;Z = D2.z;
Point3D_2D_TouShi(&X,&Y,&Z,d,qx,qy,qz);
B1.x = X; B1.y = Y;
X = A.x - b/2.0; Y = A.y + 150 - k; Z = A.z;
Point3D_2D_TouShi(&X,&Y,&Z,d,qx,qy,qz);
B2.x = X; B2.y = Y;
MidPointLine(B2,B1,15);
k++;
}
QiuEC(B2,10,11); /* 篮球 */
}
/***************************/
/**** ****/
/**** 图形显示函数 ****/
/**** ****/
/***************************/
/** 显示一条直线 **/
void Show_L(Line L)
{
LineDDA(L.A,L.B,L.color);
}
/** 显示一个圆 **/
void Show_C(Yuan C)
{
MidPointCircle_3((C.o),C.r,C.color);
}
/** 显示一个椭圆 **/
void Show_E(TuoYuan E)
{
MidPointEllipse(E.o,E.a,E.b,E.color);
}
/** 显示一个球 **/
void Show_Q(Qiu Q)
{
QiuEC(Q.o,Q.r,Q.color);
}
/** 显示一个矩形 **/
void Show_R(Rect R)
{
Rectangle(R.LeftTop,R.RightDown,R.color);
}
/* 显示一个长方体*/
void Show3D_Cft(CFT C,int d,float qx,float qy,float qz)/* 观察方向为(qx,qy,qz) */
{
Cft3D(C.A,C.a,C.b,C.h,d,qx,qy,qz);
}
/** 显示一个四棱锥**/
void Show3D_S(SLZ S,int d,float qx,float qy,float qz)
{
Slz3D(S.A,S.h,S.r,d,qx,qy,qz);
}
/** 显示一个三棱柱**/
void Show3D_SLZU(SLZU Sz,int d,float qx,float qy,float qz)
{
SLZU3D(Sz.A,Sz.r,Sz.h,d,qx,qy,qz);
}
main()
{
int i;
float k,h;
Point PointA,PointB;
Point * P;
Line L1,L2;
Yuan C1,C2;
TuoYuan E1,E2,E3,E4;
Qiu Q1,Q2,Q3;
Rect R1,R2;
Point3D D1,D2,D3;
CFT Cft1,Cft2;
SLZ S1,S2;
SLZU Sz1,Sz2;
int graphdriver = DETECT,graphmode;
initgraph(&graphdriver,&graphmode,"");
PointA.x = 550,PointA.y = 100;PointB.x = 100,PointB.y = 100;
L1.A = PointA;
L1.B = PointB;
L1.color = 2;
/* Show_L(L1);
MidPointLine(L1.A,L1.B,15);*/
C1.o.x = 300;
C1.o.y = 300;
C1.r = 60;
C1.color = 11;
C1.color = 4;
/*Show_C(C1);*/
PointA.x = 300;
PointA.y = 240;
k = 0.001;
while(0)
{
C1.color = 0;
MidPointCircle_CuoQie(C1,PointA,k - 0.001,0);
C1.color = 4;
MidPointCircle_CuoQie(C1,PointA,k,0);
k = k + 0.001;
}
E1.o.x = 250;
E1.o.y = 250;
E1.a = 60; E1.b = 30;
E1.color = 11;
/* Show_E(E1);*/
E2.o.x = 380;
E2.o.y = 250;
E2.a = 60; E2.b = 30;
E2.color = 11;
/* Show_E(E2); */
E3.o.x = 315;
E3.o.y = 180;
E3.a = 30; E3.b = 60;
E3.color = 11;
/* Show_E(E3); */
E4.o.x = 315;
E4.o.y = 320;
E4.a = 30; E4.b = 60;
E4.color = 11;
/* Show_E(E4);
PointA.x = 315;
PointA.y = 248;
R1.LeftTop.x = 313;
R1.LeftTop.y = 248;
R1.RightDown.x = 319;
R1.RightDown.y = 450;
R1.color = 2;
Show_R(R1);*/
k = 1;
while(0)
{
E1.color = 0;
E2.color = 0;
E3.color = 0;
E4.color = 0;
MidPointEllipse_XuanZhuan(E1,PointA,k-1);
MidPointEllipse_XuanZhuan(E2,PointA,k-1);
MidPointEllipse_XuanZhuan(E3,PointA,k-1);
MidPointEllipse_XuanZhuan(E4,PointA,k-1);
Show_R(R1);
E1.color = 11;
E2.color = 11;
E3.color = 11;
E4.color = 11;
MidPointEllipse_XuanZhuan(E1,PointA,k);
MidPointEllipse_XuanZhuan(E2,PointA,k);
MidPointEllipse_XuanZhuan(E3,PointA,k);
MidPointEllipse_XuanZhuan(E4,PointA,k);
k = k + 1;
}
PointB.x =190 ;
PointB.y = 250;
E1.color = 4;
/* MidPointEllipse_FangSuo(E1,PointB,2,2);
MidPointEllipse_PinYi(E1,150,0);*/
Q1.o.x = 500;
Q1.o.y = 400;
Q1.r = 60;
Q1.color = 11;
/* Show_Q(Q1);
R1.LeftTop.x = 50;
R1.LeftTop.y = 150;
R1.RightDown.x = 300;
R1.RightDown.y = 200;
R1.color = 11;
Show_R(R1);
Rectangle_XuanZhuan(R1,32);
S1.A.x = 350;
S1.A.y = 250;
S1.A.z = 100;
S1.r = 400;
S1.h = 100;
Show3D_S(S1,500,45,45,60);*/
D1.x = 300;
D1.y = 100;
D1.z = 200;
/* */My3DGraphics_A(D1,-15,1000,35,55,65);
/* Cft3D(D1,200,200,200,500,45,45,80);*/
getch();
closegraph();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -