多边形裁剪算法

                                                                                 

多边形的裁剪算法

 

     网上我看到有很多这样的算法,几乎是差不多,都是一些雷同的程序,没有什么新意,而且有很多的错误,现在我给大家介绍2种,可能有一些错误,希望大家帮我改一改,欢迎大家来提一点宝贵的意见。我的这个是原创如有雷同不胜荣幸,但我觉得是不可能的。我是首次发表文章,可能很多地方考虑不周,以后会不断的改正。

     多边形裁剪算法是由Sutherland和hodgman提出的多边形裁剪算法,此方法把被裁减的多边形依次与窗口的各边界

作比较,裁剪去除多余的部分,算法最后的输出是定义裁剪后区域的一组顶点,这些顶点连接起来用彩色或浓淡图案填充。一个多边形区域可用有序的一系列顶点定义。为了裁剪此多边形,可把各顶点依次与窗口边界作比较。在窗口边界内的顶点保留下来,窗口边界外的顶点则排除而不考虑,窗口边界内外两点连线与窗口边界的交点也应保留下来。设相对于某一边界处理的当前点为P,处理的前一点为S,此时有4种可能。

(1)如果S及P均在窗口边界之内,则p点保留。

(2)如果S在窗口内,P在窗口外,则应计算出SP与边界的交点I,并保留此交点。

(3)如果S及P均在窗口边界之外,则排除p点。

(4)如果S在窗口外,P在窗口内,则应计算出SP与边界的交点I,并保留此交点。

                                          

  第一种算法

 

#define LEN sizeof(struct node)
#include <math.h>
#include<stdio.h>
#include<graphics.h>
struct node {
int dx,dy;
struct node *next;
};
struct node *creat()
{ struct node *h,*q,*r;
int p[8][2]={100,120,160,50,180,100,200,80,240,160,210,220,170,160,140,190};
int i;
setcolor(12);
for (i=0;i<7;i++) line(p[i][0],p[i][1],p[i+1][0],p[i+1][1]);
line(p[0][0],p[0][1],p[7][0],p[7][1]);
rectangle(120,200,230,70);
h=NULL;
for (i=0;i<8;i++)
{ q=(struct node *)malloc(LEN);
q->dx=p[i][0]; q->dy=p[i][1];
if (h==NULL) h=q;
else r->next=q;
r=q;
}
r->next=NULL;
return(h);
}
struct node *builx(h,x)
struct node *h;
int x;
{int s[2],j[2];
struct node *hh,*p,*r,*q;
int max,min;
p=h; hh=NULL;
s[0]=p->dx; s[1]=p->dy;
p=p->next;
while (p!=NULL)
{ j[0]=x;
j[1]=s[1]+(p->dy-s[1])*(x-s[0])/(p-&g

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值