求个C语言图形程序

求个C语言图形程序,第1张

多边形裁剪:

#include"graphics.h"启粗

#define LEFT 1

#define RIGHT 2

#define BOTTOM 4

#define TOP 8

#define XL 100.0

#define XR 200.0

#define YB 100.0

#define YT 200.0

encode(float x,float y,int *code)

{

int c

c=0

if(x<XL) c+=LEFT

else if(x>让缺XR) c+=RIGHT

if(y<YB) c+=BOTTOM

else if(y>坦旁辩YT) c+=TOP

*code=c

return

}

main()

{

int drive,mode

int color,i,j,k,m

int code,code1,code2

float sx,sy,px,py

float fx,fy,x,y

float bx[20],by[20]

float pointx[5]={60.0,130.0,150.0,260.0,180.0}

float pointy[5]={150.0,80.0,140.0,160.0,240.0}

printf("\nColor=\n")

scanf("%d",&color)

detectgraph(&drive,&mode)

initgraph(&drive,&mode,"c:\\")

setcolor(3)

line(XL,YB,XL,YT)

line(XL,YB,XR,YB)

line(XL,YT,XR,YT)

line(XR,YB,XR,YT)

setcolor(50)

line(XL+300,YB+200,XL+300,YT+200)

line(XL+300,YB+200,XR+300,YB+200)

line(XL+300,YT+200,XR+300,YT+200)

line(XR+300,YB+200,XR+300,YT+200)

setcolor(color)

line(pointx[4],pointy[4],pointx[0],pointy[0])

for(k=0k<4k++)

{

line(pointx[k],pointy[k],pointx[k+1],pointy[k+1])

}

sx=fx=pointx[0]

sy=fy=pointy[0]

j=0

for(i=1i<=5i++)

{

px=pointx[i]

py=pointy[i]

if(i==5)

{

px=fx

py=fy

}

encode(sx,sy,&code1)

encode(px,py,&code2)

while((code1!=0||code2!=0))

{

if((code1&code2)!=0) return

code=code1

if(code1==0) code=code2

if((LEFT&code)!=0)

{

x=XL

y=sy+(py-sy)*(XL-sx)/(px-sx)

}

else if((RIGHT&code)!=0)

{

x=XR

y=sy+(py-sy)*(XR-sx)/(px-sx)

}

else if((BOTTOM&code)!=0)

{

y=YB

x=sx+(px-sx)*(YB-sy)/(py-sy)

}

else if((TOP&code)!=0)

{

y=YT

x=sx+(px-sx)*(YT-sy)/(py-sy)

}

if(code==code1)

{

sx=xsy=y

encode(x,y,&code1)

}

else

{

px=xpy=y

encode(x,y,&code2)

}

}

if((j>0)&(bx[j-1]==sx)&(by[j-1]==sy))

{

bx[j]=pxby[j]=py

}

if((sx!=0)&(sy!=0))

{

bx[j]=sxby[j]=sy

bx[j+1]=pxby[j+1]=py

}

j++

sx=pointx[i]

sy=pointy[i]

}

setcolor(color)

line(bx[j-1]+300,by[j-1]+200,bx[0]+300,by[0]+200)

setcolor(color)

for(m=0m<j-1m++)

{

line(bx[m]+300,by[m]+200,bx[m+1]+300,by[m+1]+200)

}

getch()

closegraph()

}

举个例子:

//二分查找法//

#

include

void

main()

{

int

a[16],i,num,flag=0,top,bottom,mid

//定义一个一维数组a[16]用来存放供查找用的数据,但只用a[1]——a[15]//

//num用来放要查找并伏的数据,flag是表示是否找到的开关变量,top表示查找的起始位置,bottom表示查找的终止位置,mid表示top与bottom的中间位置//

char

goon

//变量goon为'y'或'Y'时表示继续下一轮查找,否则终止程序//

printf("请输入第1个数字:\n")

scanf("

%d",&a[1])

//依次输入第二到第十五个数,并要求输入的数递减//

for(i=2i<=15i++)

{

printf("请输入第%d个数字:\n",i)

scanf("

%d",&a[i])

if(a[i]>=a[i-1])

{

printf("请再次输入,它应该比上一个数小:\n")

scanf("

%d",&a[i])

}

}

//输出刚才输入的数//绝做携

printf("你刚才输入的数是:\n")

for(i=1i<=15i++)

printf("

%d",a[i])

printf("\n")

//查找循环开始//

do

{

printf("现在请输入你要查找的数:\n")//输入想要查找的数//

scanf("

%d",&num)

top=15

bottom=1

mid=15/2+1

if(num>a[1]

||

num

0)//如果在规定的范围内,开始二分法查找//

{

if(num==a[mid])//找到所需数据,退出本层循环//

{

printf("你所要查找的数字是第%d个。\n",mid)

flag=1

}

else

if(num>a[mid])//如果要查找的数据比a[mid]大,在前半数组查找//

{

top=mid+1

mid=(top+bottom)/2

}

else

//如果要查找的数据比a[mid]小,在后半数组查找//

{

bottom=mid-1

mid=(top+bottom)/2

}

}

if(flag==0)//如果未找到数据,输出找不到的信息//

printf("无法找到你要找的数字!\n")

printf("是否继续查找?(Y/N):\n")//询问是否胡简开始下一轮查找//

scanf("

%c",&goon)

}while(goon=='y'

||

goon=='Y')

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12397144.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存