📄 draw.c
字号:
temEndy=lineEndy;
/*旋转不能超过边界*/
if(lineStartx>=10 && lineStarty>=40 && lineEndx <=620 && lineEndy <=445)
{
/*清除原有的直线*/
setwritemode(XOR_PUT);
line(lineStartx,lineStarty,lineEndx,lineEndy);
/*计算旋转30度后的起点坐标*/
lineStartx=(temStartx-Centx)*cos(pi/6)-(temStarty-Centy)*sin(pi/6)+Centx;
lineEndx=(temEndx-Centx)*cos(pi/6)-(temEndy-Centy)*sin(pi/6)+Centx;
/*计算旋转30度后的终点坐标*/
lineStarty=(temStartx-Centx)*sin(pi/6)+(temStarty-Centy)*cos(pi/6)+Centy;
lineEndy=(temEndx-Centx)*sin(pi/6)+(temEndy-Centy)*cos(pi/6)+Centy;
temStartx=lineStartx;
temStarty=lineStarty;
temEndx=lineEndx;
temEndy=lineEndy;
/*绘制旋转后的直线*/
line(lineStartx,lineStarty,lineEndx,lineEndy);
}
}
/*左移直线*/
if(key==LEFT)
{
if(lineStartx>=10 && lineStarty>=40 && lineEndx <=620 && lineEndy <=445)
{
setwritemode(XOR_PUT);
line(lineStartx,lineStarty,lineEndx,lineEndy);
/*起始的横坐标减小*/
lineStartx-=5;
lineEndx-=5;
line(lineStartx,lineStarty,lineEndx,lineEndy);
}
}
/*右移直线*/
if(key==RIGHT)
{
if(lineStartx>=10 && lineStarty>=40 && lineEndx <=620 && lineEndy <=445)
{
setwritemode(XOR_PUT);
line(lineStartx,lineStarty,lineEndx,lineEndy);
/*起始的横坐标增加*/
lineStartx+=5;
lineEndx+=5;
line(lineStartx,lineStarty,lineEndx,lineEndy);
}
}
/*下移直线*/
if(key==DOWN)
{
if(lineStartx>=10 && lineStarty>=40 && lineEndx <=620 && lineEndy <=445)
{
setwritemode(XOR_PUT);
line(lineStartx,lineStarty,lineEndx,lineEndy);
/*起始的纵坐标增加*/
lineStarty+=5;
lineEndy+=5;
line(lineStartx,lineStarty,lineEndx,lineEndy);
}
}
/*上移直线*/
if(key==UP)
{
if(lineStartx>=10 && lineStarty>=40 && lineEndx <=620 && lineEndy <=445)
{
setwritemode(XOR_PUT);
line(lineStartx,lineStarty,lineEndx,lineEndy);
/*起始的纵坐标减小*/
lineStarty-=5;
lineEndy-=5;
line(lineStartx,lineStarty,lineEndx,lineEndy);
}
}
/*放大直线*/
if(key==PAGEUP)
{
if(lineStartx>=10 && lineStarty>=40 && lineEndx <=620 && lineEndy <=445)
{
setwritemode(XOR_PUT);
line(lineStartx,lineStarty,lineEndx,lineEndy);
/*如果直线是倾斜的*/
if((lineStarty!=lineEndy)&& (lineStartx!=lineEndx))
{
/*计算直线的倾角*/
angle=atan((fabs(lineEndy-lineStarty))/(fabs(lineEndx-lineStartx)));
/*计算水平增量*/
increment_x=cos(angle)*2;
/*计算垂直增量*/
increment_y=sin(angle)*2;
/*计算放大后的起始坐标*/
if(lineStartx<lineEndx)
{
lineStartx-=increment_x;
lineStarty-=increment_y;
lineEndx+=increment_x;
lineEndy+=increment_y;
}
if(lineStartx>lineEndx)
{
lineEndx-=increment_x;
lineEndy-=increment_y;
lineStartx+=increment_x;
lineStarty+=increment_y;
}
}
/*如果直线竖直的*/
if(lineStarty==lineEndy)
{
lineStartx-=5;
lineEndx+=5;
}
/*如果直线是水平的*/
if(lineStartx==lineEndx)
{
lineStarty-=5;
lineEndy+=5;
}
line(lineStartx,lineStarty,lineEndx,lineEndy);
}
}
/*缩小直线*/
if(key==PAGEDOWN)
{
if(lineStartx>=10 && lineStarty>=40 && lineEndx <=620 && lineEndy <=445)
{
setwritemode(XOR_PUT);
line(lineStartx,lineStarty,lineEndx,lineEndy);
/*如果直线是倾斜的*/
if((lineStarty!=lineEndy)&& (lineStartx!=lineEndx))
{
/*计算直线的倾角*/
angle=atan((fabs(lineEndy-lineStarty))/(fabs(lineEndx-lineStartx)));
/*计算水平减少量*/
increment_x=cos(angle)*2;
/*计算垂直减少量*/
increment_y=sin(angle)*2;
/*计算缩小后的起始坐标*/
if(lineStartx<lineEndx)
{
lineStartx+=increment_x;
lineStarty+=increment_y;
lineEndx-=increment_x;
lineEndy-=increment_y;
}
if(lineStartx>lineEndx)
{
lineEndx+=increment_x;
lineEndy+=increment_y;
lineStartx-=increment_x;
lineStarty-=increment_y;
}
}
/*如果直线竖直的*/
if(lineStarty==lineEndy)
{
lineStartx+=5;
lineEndx-=5;
}
/*如果直线是水平的*/
if(lineStartx==lineEndx)
{
lineStarty+=5;
lineEndy-=5;
}
line(lineStartx,lineStarty,lineEndx,lineEndy);
}
}
}
DrawMouse(x1,y1);
}
}
DrawMouse(last_x,last_y);
}
/*绘制矩形函数*/
void DrawRectangle()
{
int x0,y0,x1,y1;
int last_x=0,last_y=0;
int endFlag=0;
int key;
DrawMouse(last_x,last_y);
while(1)
{
/*单击右键,结束绘制矩形*/
while((mouseStatus(&x1,&y1)==RIGHT_PRESSED))
endFlag=1;
if(endFlag==1)
break;
/*移动鼠标,仅仅绘制鼠标即可*/
while(mouseStatus(&x1,&y1) == NO_PRESSED)
{
if(last_x!=x1||last_y!=y1)
{
DrawMouse(last_x,last_y);
DrawMouse(x1,y1);
last_x=x1;
last_y=y1;
}
}
/*单击左键开始绘制矩形*/
if(mouseStatus(&x0,&y0)==LEFT_PRESSED)
{
DrawMouse(last_x,last_y);
rectangle(x0,y0,x1,y1);
last_x=x1;
last_y=y1;
/*按着鼠标左键不动,绘制矩形*/
while(mouseStatus(&x1,&y1)==LEFT_PRESSED)
{
if(last_x!=x1||last_y!=y1)
{
rectangle(x0,y0,last_x,last_y);
rectangle(x0,y0,x1,y1);
last_x=x1;
last_y=y1;
}
}
/*绘制结束后,记录左上角和右下角的坐标*/
TOPx=x0;
TOPy=y0;
BOTTOMx=x1;
BOTTOMy=y1;
while(1)
{
key=bioskey(0);
if(key==ESC)
break;
/*放大矩形*/
if(key==PAGEUP)
{
if(TOPx>=10 && TOPy>=40 && BOTTOMx <=620 &&BOTTOMy <=445)
{
/*清除原有的直线*/
setwritemode(XOR_PUT);
rectangle(TOPx,TOPy,BOTTOMx,BOTTOMy);
/*左上角坐标减小*/
TOPx-=5;
TOPy-=5;
/*右下角坐标增加*/
BOTTOMx+=5;
BOTTOMy+=5;
/*绘制放大后的矩形*/
rectangle(TOPx,TOPy,BOTTOMx,BOTTOMy);
}
}
/*缩小矩形*/
if(key==PAGEDOWN)
{
if(TOPx>=10 && TOPy>=40 && BOTTOMx <=620 &&BOTTOMy <=445)
{
setwritemode(XOR_PUT);
rectangle(TOPx,TOPy,BOTTOMx,BOTTOMy);
/*左上角坐标增加*/
TOPx+=5;
TOPy+=5;
/*右下角坐标减小*/
BOTTOMx-=5;
BOTTOMy-=5;
/*绘制缩小后的矩形*/
rectangle(TOPx,TOPy,BOTTOMx,BOTTOMy);
}
}
/*左移矩形*/
if(key==LEFT)
{
if(TOPx>=10 && TOPy>=40 && BOTTOMx <=620 &&BOTTOMy <=445)
{
setwritemode(XOR_PUT);
rectangle(TOPx,TOPy,BOTTOMx,BOTTOMy);
/*横坐标减小*/
TOPx-=5;
BOTTOMx-=5;
rectangle(TOPx,TOPy,BOTTOMx,BOTTOMy);
}
}
/*右移矩形*/
if(key==RIGHT)
{
if(TOPx>=10 && TOPy>=40 && BOTTOMx <=620 &&BOTTOMy <=445)
{
setwritemode(XOR_PUT);
rectangle(TOPx,TOPy,BOTTOMx,BOTTOMy);
/*横坐标增加*/
TOPx+=5;
BOTTOMx+=5;
rectangle(TOPx,TOPy,BOTTOMx,BOTTOMy);
}
}
/*下移矩形*/
if(key==DOWN)
{
if(TOPx>=10 && TOPy>=40 && BOTTOMx <=620 &&BOTTOMy <=445)
{
setwritemode(XOR_PUT);
rectangle(TOPx,TOPy,BOTTOMx,BOTTOMy);
/*纵坐标增加*/
TOPy+=5;
BOTTOMy+=5;
rectangle(TOPx,TOPy,BOTTOMx,BOTTOMy);
}
}
/*上移矩形*/
if(key==UP)
{
if(TOPx>=10 && TOPy>=40 && BOTTOMx <=620 &&BOTTOMy <=445)
{
setwritemode(XOR_PUT);
rectangle(TOPx,TOPy,BOTTOMx,BOTTOMy);
/*纵坐标减小*/
TOPy-=5;
BOTTOMy-=5;
rectangle(TOPx,TOPy,BOTTOMx,BOTTOMy);
}
}
}
DrawMouse(x1,y1);
}
}
DrawMouse(last_x,last_y);
}
/*用直线法生成圆*/
void LineToCircle(int x0,int y0,int r)
{
int angle;
int x1,y1,x2,y2;
angle=0;
x1=r*cos(angle*pi/180);
y1=r*sin(angle*pi/180);
while(angle<45)
{
angle+=5;
x2=r*cos(angle*pi/180);
y2=r*sin(angle*pi/180);
while(x2==x1)
x2++;
while(y2==y1)
y2++;
line(x0+x1,y0+y1,x0+x2,y0+y2);
line(x0-x1,y0+y1,x0-x2,y0+y2);
line(x0+x1,y0-y1,x0+x2,y0-y2);
line(x0-x1,y0-y1,x0-x2,y0-y2);
line(x0+y1,y0-x1,x0+y2,y0-x2);
line(x0+y1,y0+x1,x0+y2,y0+x2);
line(x0-y1,y0-x1,x0-y2,y0-x2);
line(x0-y1,y0+x1,x0-y2,y0+x2);
x1=x2+1;
y1=y2+1;
}
}
/*绘制圆函数*/
void DrawCircle()
{
int x0,y0,x1,y1,r,oldr;
int last_x,last_y;
int endFlag;
int key;
last_x=0;
last_y=0;
endFlag=0;
DrawMouse(last_x,last_y);
while(1)
{
/*单击右键,绘制圆结束*/
while((mouseStatus(&x1,& y1)==RIGHT_PRESSED))
{
endFlag=1;
}
if(endFlag==1)
break;
/*移动鼠标,仅绘制鼠标即可*/
while(mouseStatus(&x1,&y1) == NO_PRESSED)
{
if(last_x!=x1||last_y!=y1)
{
DrawMouse(last_x,last_y);
DrawMouse(x1,y1);
last_x=x1;
last_y=y1;
}
}
/*单击左键,开始绘制圆*/
if(mouseStatus(&x0,&y0)==LEFT_PRESSED)
{
/*计算半径*/
r=sqrt((x0-x1)*(x0-x1)+(y0-y1)*(y0-y1));
DrawMouse(last_x,last_y);
LineToCircle(x0,y0,r);
last_x=x1;
last_y=y1;
oldr=r;
/*按住鼠标左键不动,拖动鼠标绘制圆*/
while(mouseStatus(&x1,&y1)==LEFT_PRESSED)
{
if(last_x!=x1||last_y!=y1)
{
r=sqrt((x0-x1)*(x0-x1)+(y0-y1)*(y0-y1));
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -