永发信息网

求tc 下的多边形裁剪算法的源代码

答案:4  悬赏:10  手机版
解决时间 2021-02-24 16:51
求tc 下的多边形裁剪算法的源代码
最佳答案
#include

#include

union REGS i,o;

int xl=100,xr=540,yb=400,yt=200;

void init()

{

int driver=DETECT,gm;

initgraph(&driver,&gm,"");

printf("Instruction:\n");

printf("1.Press left mouse button to set the vertex;\n");

printf("2.Press right button to end drawing;\n");



outtextxy(450, 440, "Edit by lcf&hy!");

setwritemode(2);

line(0,70,639,70);

setcolor(YELLOW);

rectangle(xl,yt,xr,yb);

i.x.ax=0;

int86(0x33,&i,&o);

if(o.x.ax==0)

{

printf("Mouse is not available...");

getch();

exit();

}

i.x.ax=1;

int86(0x33,&i,&o);



i.x.ax=8;

i.x.cx=71;

i.x.dx=479;

int86(0x33,&i,&o);

}

int mousestatus(int *x,int *y)

{

i.x.ax=3;

int86(0x33,&i,&o);

*x=o.x.cx;

*y=o.x.dx;

return o.x.bx;

}

void endpro()

{

char s[50]="Press any key to exit...";

setcolor(WHITE);

outtextxy(200,120,s);

getch();

closegraph();

exit();

}

void code(int x,int y,int *c )

{

int i;

for(i=1;i<=4;i++) c[i]=0;

if(x
if(x>xr) c[3]=1;

if(y
if(y>yb) c[2]=1;

}

void cut(int x1,int y1,int x2,int y2)

{

setcolor(BLACK);

setlinestyle(0, 0, 3);

line(x1,y1,x2,y2);

}

int logic_ride(int *c1,int *c2)

{

int i;

for(i=1;i<=4;i++)

{

if(c1[i]*c2[i]==1) return 1;

}

return 0;

}

int logic2_ride(int *c)

{

int m;

for(m=0;m<=4;m++)

if(c[m]==1) return 0;

return 1;

}

void clip(int *x,int *y,int k)



{



int c1[5],c2[5],c[5],p,x0,y0,ultra_x,ultra_y,t;

x[k+1]=x[1];y[k+1]=y[1];

for(p=1;p<=k;p++)

{

code(x[p],y[p],c1);

code(x[p+1],y[p+1],c2);

if(logic_ride(c1,c2)) cut(x[p],y[p],x[p+1],y[p+1]);

else if(logic2_ride(c1)==1&&logic2_ride(c2)==1) ;

else

{

if(logic2_ride(c1)!=1)

{

t=1;

while(t)

{

if(logic_ride(c,c2)) {cut(x[p],y[p],x[p+1],y[p+1]);break;}

else

{

if(c1[4]==1)

{

x0=xl;

y0=y[p]+(y[p+1]-y[p])*(xl-x[p])/(x[p+1]-x[p]);

}

else if(c1[3]==1)

{

x0=xr;

y0=y[p]+(y[p+1]-y[p])*(xr-x[p])/(x[p+1]-x[p]);

}

else if(c1[1]==1)

{

y0=yt;

x0=x[p]+(x[p+1]-x[p])*(yt-y[p])/(y[p+1]-y[p]);

}

else if(c1[2]==1)

{

y0=yb;

x0=x[p]+(x[p+1]-x[p])*(yb-y[p])/(y[p+1]-y[p]);

}

cut(x[p],y[p],x0,y0);

x[p]=x0;y[p]=y0; code(x0,y0,c);

if(logic2_ride(c)==1) t=0;

}

}

}

if(logic2_ride(c2)!=1)

{

t=1;

if(c2[4]==1)

{

x0=xl;

y0=y[p]+(y[p+1]-y[p])*(xl-x[p])/(x[p+1]-x[p]);

}

else if(c2[3]==1)

{

x0=xr;

y0=y[p]+(y[p+1]-y[p])*(xr-x[p])/(x[p+1]-x[p]);

}

else if(c2[1]==1)

{

y0=yt; x0=x[p]+(x[p+1]-x[p])*(yt-y[p])/(y[p+1]-y[p]);

}

else if(c2[2]==1)

{

y0=yb; x0=x[p]+(x[p+1]-x[p])*(yb-y[p])/(y[p+1]-y[p]);

}

cut(x0,y0,x[p+1],y[p+1]);

code(x0,y0,c);

if(logic2_ride(c)==0)

{

if(c[4]==1)

{

ultra_x=xl;

ultra_y=y0+(y[p+1]-y0)*(xl-x0)/(x[p+1]-x0);

}

else if(c[3]==1)

{

ultra_x=xr;

ultra_y=y0+(y[p+1]-0)*(xr-0)/(x[p+1]-x0);

}

else if(c[1]==1)

{

ultra_y=yt;

ultra_x=x0+(x[p+1]-x0)*(yt-y0)/(y[p+1]-y0);

}

else if(c[2]==1)

{

ultra_y=yb;

ultra_x=x0+(x[p+1]-x0)*(yb-y0)/(y[p+1]-y0);

}

cut(x0,y0,ultra_x,ultra_y);

}

}

}

}

endpro();

}

void draw(int *x,int *y)

{

int k=0,lx,ly,color,i;

int tempx,tempy;

while(1){



if(mousestatus(&tempx,&tempy)==1)

{

if(x[k]!=tempx||y[k]!=tempy) k++;

x[k]=tempx;

y[k]=tempy;

setcolor(WHITE);

circle(tempx,tempy,1);

if (k!=1)

{

setcolor(WHITE);

line(x[k-1],y[k-1],x[k],y[k]);

}

}

lx=tempx,ly=tempy;

if(mousestatus(&tempx,&tempy)==2)

{

line(x[1],y[1],x[k],y[k]);

clip(x,y,k);

}

putpixel(tempx,tempy,WHITE);

putpixel(lx,ly,BLACK);

}

}

void main()

{

int x[100],y[100];

init();

draw(x,y);

}参考资料:忘记
全部回答
明天给你
VC的以前做过
代码找不到了 不然可以发给你参考下
#include
#include
#include
#include
#include
main()
{
void *ptr;
int gd=DETECT;
int gm;
float i;
initgraph(&gd,&gm,"d:\\tc");
setactivepage(1);
setcolor(RED);
setfillstyle(1,14);
fillellipse(10,10,10,10);
ptr=malloc(imagesize(0,0,20,20));
getimage(0,0,20,20,ptr);
randomize();
setactivepage(0);
for (i=0;i<3000;i++)
putpixel(random(640),random(480),random(15));
for (i=0;i<6.28*4;i=i+0.005)
{
putimage(300+8*(cos(i)+i*sin(i)),240+6*(sin(i)-i*cos(i)),ptr,COPY_PUT);
putimage(300+8*(cos(i)+i*sin(i)),240+6*(sin(i)-i*cos(i)),ptr,COPY_PUT);
if (kbhit())
break;
delay(10);
}
getch();
closegraph();
}

我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
煮茶世家在哪里啊,我有事要去这个地方
【联合国宗旨】联合国的宗旨和原则是什么?
中国海洋大学无机化学专业的硕士研究生好考吗
2016年法国网球公开赛单打冠军多少奖金
如何用EDIUS处理音频末尾,把声音处理成像断
新津县金华镇南萍药店地址在哪,我要去那里办
歌词:太阳高天气真晴朗,微风里飘着野花香,
库木买里地址在哪,我要去那里办事
e调口琴音阶排列
同义词转换不再有效
张二姐服饰怎么去啊,有知道地址的么
1mol的CH4与足量的Cl2在光照条件下反应生成等
襄樊207国道 从哪里走?拜托各位了 3Q
汽车仪表有个小灯泡亮
农村分户怎么分?.
推荐资讯
山西面馆怎么去啊,有知道地址的么
中国老字号带内字的老字号谁知道啊 !!!!
家美橱柜黄石旗舰店我想知道这个在什么地方
利民药业韩场惠福店地址在什么地方,想过去办
只刑事拘留30天的话可以办理取保候审吗
七月流火是用来形容什么的?A、炎炎夏日 B、
余江红衣主教是曾公么
iPhone7P用什么手机壳好,硅胶
为什么调剂生的奖学金没有了?
如何消除音乐中的杂音
停车场管理系统v3.4密码忘记了
浩威纺织在哪里啊,我有事要去这个地方
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?