• 大小: 9.3MB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2023-10-06
  • 语言: 其他
  • 标签: 裁剪  

资源简介

Weiler-Athenton裁剪算法的实现,按enter键对图形进行裁剪

资源截图

代码片段和文件信息


#include “stdlib.h“
#include 
#include “windows.h“
#include  // Header File For The OpenGL32 Library
#include  // Header File For The GLu32 Library
#include  // Header File For The Glaux Library
#include  // Header File For The OpenGL32 tools Library
#include 

using namespace std;

#define SCREEN_POINT 4
#define POLYGON_POINT 6

struct point
{
double x;
double y;
int flag;  //0为顶点,1为入点,-1为出点
};

struct node
{
point p;
int flag;   //是否已被跟踪
node* next;
node* same;  //指向另一个多边形定点表中的相同交点

};



int if_cut=0;
point polygon[6];
point screen[4];

void insert(node* &hpoint p)
{

node* n=(node*)malloc(sizeof(node));
n->p=p;
n->same=NULL;
n->next=NULL;
if(h==NULL)
{
h=n;
}
else
{
node *q=h;
while(q->next!=NULL)
{
q=q->next;
}
q->next=n;
}
}

void insert_list(node* &screenlistnode* &polygonlistpoint ppoint p1point p2point q1point q2)
{

node* n_polygon=(node*)malloc(sizeof(node));
n_polygon->p=p;
n_polygon->next=NULL;
n_polygon->flag=0;
node* n_screen=(node*)malloc(sizeof(node));
n_screen->p=p;
n_screen->next=NULL;
n_screen->flag=0;

//双向指针
n_polygon->same=n_screen;
n_screen->same=n_polygon;

//插入主多边形顶点表

node *n_p1;   //主多边形顶点
node *n_p2;   
for(n_p1=polygonlist;n_p1!=NULL;n_p1=n_p1->next)
{
if(n_p1->p.x==p1.x && n_p1->p.y==p1.y && n_p1->p.flag==p1.flag)
{

break;
}
}

for(n_p2=n_p1;n_p2!=NULL;n_p2=n_p2->next)
{
if(n_p2->p.x==p2.x && n_p2->p.y==p2.y && n_p2->p.flag==p2.flag)   
break;
}

if(n_p1->next == n_p2)
{
n_polygon->next=n_p2;
n_p1->next=n_polygon;
}
else
{
int flag;
if(p1.x {
flag=1;
}
else
{
flag=0;
}

node *q=n_p1;
while(q->next!=n_p2)
{
if(flag==1)
{
if(q->next->p.x>p.x)
{
n_polygon->next=q->next;
q->next=n_polygon;
break;
}
}
else
{
if(q->next->p.x {
n_polygon->next=q->next;
q->next=n_polygon;
break;
}
}
q=q->next;
}
if(q->next==n_p2)
{
n_polygon->next=q->next;
q->next=n_polygon;
}
}


//插入裁剪多边形顶点表
node* n_q1;
node* n_q2;
for(n_q1=screenlist;n_q1!=NULL;n_q1=n_q1->next)
{
if(n_q1->p.x==q1.x && n_q1->p.y==q1.y && n_q1->p.flag==q1.flag)   
break;
}

for(n_q2=n_q1;n_q2!=NULL;n_q2=n_q2->next)
{
if(n_q2->p.x==q2.x && n_q2->p.y==q2.y && n_q2->p.flag==q2.flag)   
break;
}

if(n_q1->next == n_q2)
{
n_screen->next=n_q2;
n_q1->next=n_screen;
}

else
{
int flag;
if(q1.x==q2.x)
{
if(q1.y flag=1;      //左
else 
flag=2;      //右
}
else
{
if(q1.x flag=3;      //上
else
flag=4;      //下
}

node *q=n_q1;
while(q->next!=n_q2)
{
if(flag==1)
{
if(q->next->p.y>p.y)
{
n_screen->next=q->next;
q->next=n_s

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2015-05-21 13:58  lab4\
     目录           0  2015-05-13 22:32  lab4\Debug\
     文件       43008  2015-05-13 22:58  lab4\Debug\lab4.exe
     文件      311556  2015-05-13 22:58  lab4\Debug\lab4.ilk
     文件      568320  2015-05-13 22:58  lab4\Debug\lab4.pdb
     目录           0  2015-05-07 13:13  lab4\lab4\
     文件        3210  2015-05-07 18:23  lab4\lab4.psess
     文件    28901376  2015-05-13 23:12  lab4\lab4.sdf
     文件         974  2015-05-07 18:05  lab4\lab4.sln
     文件       20480  2015-05-13 23:12  lab4\lab4.v11.suo
     目录           0  2015-05-13 22:58  lab4\lab4\Debug\
     文件         526  2015-05-13 22:58  lab4\lab4\Debug\cl.command.1.tlog
     文件       18428  2015-05-13 22:58  lab4\lab4\Debug\CL.read.1.tlog
     文件         210  2015-05-13 22:58  lab4\lab4\Debug\CL.write.1.tlog
     文件          58  2015-05-13 22:58  lab4\lab4\Debug\lab4.lastbuildstate
     文件        1220  2015-05-13 22:58  lab4\lab4\Debug\lab4.log
     文件       53026  2015-05-13 22:58  lab4\lab4\Debug\lab4.obj
     文件           2  2015-05-13 22:58  lab4\lab4\Debug\link-cvtres.read.1.tlog
     文件           2  2015-05-13 22:58  lab4\lab4\Debug\link-cvtres.write.1.tlog
     文件           2  2015-05-13 22:58  lab4\lab4\Debug\link-rc.read.1.tlog
     文件           2  2015-05-13 22:58  lab4\lab4\Debug\link-rc.write.1.tlog
     文件           2  2015-05-13 22:58  lab4\lab4\Debug\link.1668-cvtres.read.1.tlog
     文件           2  2015-05-13 22:58  lab4\lab4\Debug\link.1668-cvtres.write.1.tlog
     文件           2  2015-05-13 22:58  lab4\lab4\Debug\link.1668-rc.read.1.tlog
     文件           2  2015-05-13 22:58  lab4\lab4\Debug\link.1668-rc.write.1.tlog
     文件           2  2015-05-13 22:58  lab4\lab4\Debug\link.1668.read.1.tlog
     文件           2  2015-05-13 22:58  lab4\lab4\Debug\link.1668.write.1.tlog
     文件           2  2015-05-13 22:58  lab4\lab4\Debug\link.2468-cvtres.read.1.tlog
     文件           2  2015-05-13 22:58  lab4\lab4\Debug\link.2468-cvtres.write.1.tlog
     文件           2  2015-05-13 22:58  lab4\lab4\Debug\link.2468-rc.read.1.tlog
     文件           2  2015-05-13 22:58  lab4\lab4\Debug\link.2468-rc.write.1.tlog
............此处省略22个文件信息

评论

共有 条评论