📄 cad.c
字号:
/*新疆农业大学机械交通学院机制042班 李静 QQ409539576*/
#include"stdio.h"
#include"stdlib.h"
#include"dos.h"
#include"conio.h"
#include"process.h"
#include"math.h"
#include"graphics.h"
#define Key_DOWN 80 /*定义键盘扫描码*/
#define Key_UP 72
#define Key_ESC 1
#define Key_LEFT 75
#define Key_RIGHT 77
#define Key_ENTER 28
#define Key_ALT_F 33
#define Key_ALT_X 45
#define Key_ALT_C 46
#define Key_ALT_H 35
#define Key_ALT_S 31
#define Key_F1 59
void hk(); /*画框函数声明*/
float ax[6],ay[4],bx[6],by[4],dx[6],dy[4];
float xm,ym,max_x,max_y; /*屏幕中点坐标和最大坐标*/
int xz,yz; /*计算过程中的屏幕中点坐标*/
int key; /*记录键盘的输入*/
int i,j; /*全局的循环变量*/
float cx[4][6],cy[4][6]; /*旋转变换中变换后的坐标*/
float cx1[4][6],cy1[4][6]; /*旋转变换中原始坐标*/
float xd,yd,xd1,yd1; /*旋转变换中中心线的坐标*/
float xdc,ydc; /*对称变换中的中心坐标*/
float dx1[6],dy1[4]; /*对称变换中的原始坐标*/
void *wj,*wjgt,*bh,*bhgt,*bz,*bzgt,*bzsm; /*存放下拉菜单*/
int gths=0; /*变换菜单光条行数*/
int bzh=0; /*变换菜单执行光条所压菜单的标志*/
int flag; /*各个菜单之间相互调用标志*/
int gths1=0; /*文件菜单中的光条行数*/
int bzh1=0; /*文件菜单中执行光条所压菜单的标志*/
FILE *fp; /*定义文件指针打开汉字库*/
void hz(int x,int y,int a,int COL,int b,char *s) /*以图形方式输出汉字函数*/ {
int ROW;
char buffer[32];
register m,n,i,j,k;
unsigned char qh,wh;
unsigned long offset;
ROW=COL;
while(*s)
{
qh=*(s)-0xa0; /*计算汉字的区码*/
wh=*(s+1)-0xa0; /*计算汉字的位码*/
offset=(94*(qh-1)+(wh-1))*32L; /*计算汉字在汉字库中的位置*/
fseek(fp,offset,SEEK_SET);
fread(buffer,32,1,fp);
for (i=0;i<16;i++)
for(n=0;n<ROW;n++)
for(j=0;j<2;j++)
for(k=0;k<8;k++)
for(m=0;m<COL;m++)
if (((buffer[i*2+j]>>(7-k))&0x1)!=NULL)
putpixel(x+8*j*COL+k*COL+m,y+i*ROW+n,b);
s+=2;
x+=a;
}
}
void exit1() /*退出函数*/
{ setviewport(0,0,639,479,1);
cleardevice(); i=0;
while(!kbhit())
{
setcolor(random(15));
circle(random(640),random(480),random(60));
setfillstyle(SOLID_FILL,7);
bar(170,120,470,320);
hz(445,150,15,1,4,"不");
hz(445,170,15,1,4,"经");
hz(445,190,15,1,4,"一");
hz(445,210,15,1,4,"番");
hz(445,230,15,1,4,"寒");
hz(445,250,15,1,4,"彻");
hz(445,270,15,1,4,"骨");
hz(185,150,15,1,4,"怎");
hz(185,170,15,1,4,"得");
hz(185,190,15,1,4,"梅");
hz(185,210,15,1,4,"花");
hz(185,230,15,1,4,"扑");
hz(185,250,15,1,4,"鼻");
hz(185,270,15,1,4,"香");
hz(210,170,120,7,4,"奋斗");
}
closegraph(); /*关闭图形函数*/
close(fp);
clrscr();
exit(0);
}
void Box(int left,int top,int right,int bottom,int color) /*画中间灰色框的外边框*/
{
int old_color;
old_color=getcolor();
setcolor(color);
line(left,top,right,top);
line(left,top,left,bottom);
line(right,top,right,bottom);
line(left,bottom,right,bottom);
setcolor(old_color);
}
Button(int left,int top,int length,int b,int g) /*画中间的灰色框*/
{
int bottom,right;
bottom=top+b;
right=left+length;
setfillstyle(SOLID_FILL,WHITE);
bar(left,top,right,bottom);
setcolor(BLACK);
Box(left,top,right,bottom,BLACK);
setfillstyle(SOLID_FILL,g);
bar(left+2,top+2,right-1,bottom-1);
setcolor(DARKGRAY);
line(left+1,bottom-1,right,bottom-1);
line(right-1,top+1,right-1,bottom);
}
void gy() /*在屏幕上输出汉字*/
{int z;
clrscr();
Button(100,60,450,330,7);
hz(185,110,50,2,14,"图形变换系统");
hz(200,160,15,1,2,"(计算机辅助设计与制造课程小实验)");
hz(298,210,15,1,4,"版权所有");
hz(261,240,15,1,8,"机交机制042李静");
hz(240,350,15,1,8,"设计时间:2007年4月");
hz(253,275,15,1,6,"请稍侯程序加载中……");
for(z=0;z<1000;z++)
delay(1000);
rectangle(179,299,477,316);
for(z=182;z<478;z+=2 )
{
delay(1000000);
setfillstyle(SOLID_FILL,LIGHTBLUE);
bar(180,300,z,315); /*画滚动条*/
}
setfillstyle(SOLID_FILL,LIGHTGRAY);
bar(232,275,410,295);
hz(280,320,15,1,6,"按任意键继续");
getch();
}
int getkey() /*获取键盘扫描码*/
{ union REGS rg;
rg.h.ah=0;
int86(0x16,&rg,&rg);
return rg.h.ah;
}
void jisuan() /*计算中间显示的各点坐标*/
{
max_x=getmaxx();
max_y=getmaxy();
xm=max_x/2;
ym=max_y/2;
xz=xm;
yz=ym;
ax[0]=xm-16.5*2;
ax[1]=ax[0]+6.5*2;
ax[2]=ax[1]+2*2;
ax[3]=ax[2]+16*2;
ax[4]=ax[3]+2*2;
ax[5]=ax[4]+6.5*2;
ay[0]=ym-38.5*2;
ay[1]=ay[0]+12*2;
ay[2]=ay[1]+19*2;
ay[3]=ay[2]+46*2;
}
void ysh() /*在中间画图*/
{clearviewport();
moveto(xm,ay[0]-10);
setlinestyle(1,0,1);
setcolor(4);
linerel(0,(ay[3]-ay[0]+20));
moveto(ax[0],ay[0]);
setcolor(14);
setlinestyle(0,0,3);
rectangle(ax[0],ay[0],ax[5],ay[1]);
moveto(ax[1],ay[1]);
rectangle(ax[1],ay[1],ax[4],ay[3]);
line(ax[2],ay[0],ax[2],ay[1]);
line(ax[3],ay[0],ax[3],ay[1]);
line(ax[1],ay[2],ax[4],ay[2]);
setlinestyle(0,0,1);
line(ax[2],ay[2],ax[2],ay[3]);
line(ax[3],ay[2],ax[3],ay[3]);
}
void ysh1() /*变换以后画图*/
{moveto(xz,by[0]-10);
setlinestyle(1,0,1);
setcolor(4);
linerel(0,(by[3]-by[0]+20));
moveto(bx[0],by[0]);
setcolor(14);
setlinestyle(0,0,3);
rectangle(bx[0],by[0],bx[5],by[1]);
moveto(bx[1],by[1]);
rectangle(bx[1],by[1],bx[4],by[3]);
line(bx[2],by[0],bx[2],by[1]);
line(bx[3],by[0],bx[3],by[1]);
line(bx[1],by[2],bx[4],by[2]);
setlinestyle(0,0,1);
line(bx[2],by[2],bx[2],by[3]);
line(bx[3],by[2],bx[3],by[3]);
}
void xzh1() /*旋转变换以后画图*/
{moveto(xd,yd);
setlinestyle(1,0,1);
setcolor(4);
line(xd,yd,xd1,yd1);
setcolor(14);
setlinestyle(0,0,3);
line(cx[0][0],cy[0][0],cx[0][5],cy[0][5]);
line(cx[0][0],cy[0][0],cx[1][0],cy[1][0]);
line(cx[1][0],cy[1][0],cx[1][5],cy[1][5]);
line(cx[0][5],cy[0][5],cx[1][5],cy[1][5]);
moveto(cx[1][1],cy[1][1]);
line(cx[1][1],cy[1][1],cx[3][1],cy[3][1]);
line(cx[3][1],cy[3][1],cx[3][4],cy[3][4]);
line(cx[3][4],cy[3][4],cx[1][4],cy[1][4]);
line(cx[0][2],cy[0][2],cx[1][2],cy[1][2]);
line(cx[0][3],cy[0][3],cx[1][3],cy[1][3]);
line(cx[2][1],cy[2][1],cx[2][4],cy[2][4]);
setlinestyle(0,0,1);
line(cx[2][2],cy[2][2],cx[3][2],cy[3][2]);
line(cx[2][3],cy[2][3],cx[3][3],cy[3][3]);
}
void dc1() /*对Y轴对称变换后画图形*/
{moveto(xdc,dy[0]-10);
setlinestyle(1,0,1);
setcolor(4);
linerel(0,(dy[3]-dy[0]+20));
moveto(dx[0],dy[0]);
setcolor(14);
setlinestyle(0,0,3);
rectangle(dx[0],dy[0],dx[5],dy[1]);
moveto(dx[1],dy[1]);
rectangle(dx[1],dy[1],dx[4],dy[3]);
line(dx[2],dy[0],dx[2],dy[1]);
line(dx[3],dy[0],dx[3],dy[1]);
line(dx[1],dy[2],dx[4],dy[2]);
setlinestyle(0,0,1);
line(dx[2],dy[2],dx[2],dy[3]);
line(dx[3],dy[2],dx[3],dy[3]);
}
void dc2() /*对(X)和(原点)轴对称变换后画图形*/
{moveto(xdc,dy[0]+10);
setlinestyle(1,0,1);
setcolor(4);
linerel(0,(dy[3]-dy[0]-20));
moveto(dx[0],dy[0]);
setcolor(14);
setlinestyle(0,0,3);
rectangle(dx[0],dy[0],dx[5],dy[1]);
moveto(dx[1],dy[1]);
rectangle(dx[1],dy[1],dx[4],dy[3]);
line(dx[2],dy[0],dx[2],dy[1]);
line(dx[3],dy[0],dx[3],dy[1]);
line(dx[1],dy[2],dx[4],dy[2]);
setlinestyle(0,0,1);
line(dx[2],dy[2],dx[2],dy[3]);
line(dx[3],dy[2],dx[3],dy[3]);
}
void py() /*平移变化函数*/
{
for(j=0;j<6;j++)
bx[j]=ax[j];
for(j=0;j<4;j++)
by[j]=ay[j];
xz=xm;
yz=ym;
do
{key=getkey();
switch(key)
{case Key_RIGHT: {for(i=0;i<6;i++)
bx[i]+=1; xz+=1;
clearviewport();
ysh1(); break;}
case Key_DOWN: {for(i=0;i<4;i++)
by[i]+=1; yz+=1;
clearviewport();
ysh1(); break;}
case Key_LEFT: {for(i=0;i<6;i++)
bx[i]-=1; xz-=1;
clearviewport();
ysh1(); break;}
case Key_UP: {for(i=0;i<4;i++)
by[i]-=1; yz-=1;
clearviewport();
ysh1(); break;}
default: break;
}
if(key==Key_ALT_F) {flag=1;break;}
if(key==Key_ALT_C) {flag=2;break;}
if(key==Key_ALT_X) {flag=4;break;}
}while(1);
}
void bl() /*比例变化函数*/
{for(j=0;j<6;j++)
bx[j]=ax[j];
for(j=0;j<4;j++)
by[j]=ay[j];
xz=xm;
do
{key=getkey();
switch(key)
{
case Key_UP: {for(i=0;i<6;i++)
bx[i]=(bx[i]-320)*1.1+320;
for(j=0;j<4;j++)
by[j]=(by[j]-240)*1.1+240;
clearviewport();
ysh1();
break;
}
case Key_DOWN: {for(i=0;i<6;i++)
bx[i]=(bx[i]-320)*0.9+320;
for(j=0;j<4;j++)
by[j]=(by[j]-240)*0.9+240;
clearviewport();
ysh1();
break;
}
}
if(key==Key_ALT_F) {flag=1;break;}
if(key==Key_ALT_C) {flag=2;break;}
if(key==Key_ALT_X) {flag=4;break;}
}while(1);
}
void xzh() /*旋转变换函*/
{double o=0;
xd=xd1=xm;
yd=ay[0]-10;
yd1=ay[3]+10;
for(i=0;i<4;i++)
for(j=0;j<6;j++)
cx1[i][j]=ax[j];
for(i=0;i<4;i++)
for(j=0;j<6;j++)
cy1[i][j]=ay[i];
do
{key=getkey();
switch(key)
{
case Key_UP: { o+=0.1;
for(i=0;i<6;i++)
{cx[0][i]=(cx1[0][i]-320)*cos(o)-(cy1[0][i]-240)*sin(o)+320;
cx[1][i]=(cx1[1][i]-320)*cos(o)-(cy1[1][i]-240)*sin(o)+320;
cy[0][i]=(cy1[0][i]-240)*cos(o)+(cx1[0][i]-320)*sin(o)+240;
cy[1][i]=(cy1[1][i]-240)*cos(o)+(cx1[1][i]-320)*sin(o)+240;
}
for(i=1;i<5;i++)
{ cx[2][i]=(cx1[2][i]-320)*cos(o)-(cy1[2][i]-240)*sin(o)+320;
cx[3][i]=(cx1[3][i]-320)*cos(o)-(cy1[3][i]-240)*sin(o)+320;
cy[2][i]=(cy1[2][i]-240)*cos(o)+(cx1[2][i]-320)*sin(o)+240;
cy[3][i]=(cy1[3][i]-240)*cos(o)+(cx1[3][i]-320)*sin(o)+240;
}
xd=(xm-320)*cos(o)-(ay[0]-10-240)*sin(o)+320;
yd=(ay[0]-10-240)*cos(o)+(xm-320)*sin(o)+240;
xd1=(xm-320)*cos(o)-(ay[3]+10-240)*sin(o)+320;
yd1=(ay[3]+10-240)*cos(o)+(xm-320)*sin(o)+240;
xzh1();
break;
}
case Key_DOWN: { o-=0.1;
for(i=0;i<6;i++)
{cx[0][i]=(cx1[0][i]-320)*cos(-o)+(cy1[0][i]-240)*sin(-o)+320;
cx[1][i]=(cx1[1][i]-320)*cos(-o)+(cy1[1][i]-240)*sin(-o)+320;
cy[0][i]=(cy1[0][i]-240)*cos(-o)-(cx1[0][i]-320)*sin(-o)+240;
cy[1][i]=(cy1[1][i]-240)*cos(-o)-(cx1[1][i]-320)*sin(-o)+240;
}
for(i=1;i<5;i++)
{cx[2][i]=(cx1[2][i]-320)*cos(-o)+(cy1[2][i]-240)*sin(-o)+320;
cx[3][i]=(cx1[3][i]-320)*cos(-o)+(cy1[3][i]-240)*sin(-o)+320;
cy[2][i]=(cy1[2][i]-240)*cos(-o)-(cx1[2][i]-320)*sin(-o)+240;
cy[3][i]=(cy1[3][i]-240)*cos(-o)-(cx1[3][i]-320)*sin(-o)+240;
}
xd=(xm-320)*cos(o)-(ay[0]-10-240)*sin(o)+320;
yd=(ay[0]-10-240)*cos(o)+(xm-320)*sin(o)+240;
xd1=(xm-320)*cos(o)-(ay[3]+10-240)*sin(o)+320;
yd1=(ay[3]+10-240)*cos(o)+(xm-320)*sin(o)+240;
clearviewport();
xzh1();
break;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -