链表实现Weiler-Atherton多边形裁剪算法

#include<iostream>
#include<glut.h>
#include<vector>
using namespace std;
int result[6][2] = { { 22, 10 },{ 50, 80 },{ 80, 15 },{ 90, 80 },{ 100, 30 },{ 100, 10 } };
int re[4][2] = { { 20, 120 },{ 120, 120 },{ 120, 20 },{ 20, 20 } };
enum mark { L, B, R, T };
struct P {
	int x;
	int y;
	int judge;
};
struct node {
	int data[2];
	int judge;
	node* next;
	node* pre;
};
void addNode(node *& now, int num1, int num2, int ju) {
	node *p = now;
	node *q = NULL;
	q = new node;
	q->data[0] = num1;
	q->data[1] = num2;
	q->judge = ju;
	q->pre = p;
	p->next = q;
	now = q;
}
void insertNode(node *&one, node *&two, const P Three, bool change) {
	node* tem = new node;
	tem = new node;
	tem->data[0] = Three.x;
	tem->data[1] = Three.y;
	tem->judge = Three.judge;
	tem->next = two;
	two->pre = tem;
	tem->pre = one;
	one->next = tem;
	if (change) {
		two = tem;
	}
	else {
		one = tem;
	}
}
void initNode(node *&head, node *&rec) {
	head = new node;
	rec = new node;
	head->data[0] = rec->data[0] = 0;
	head->data[1] = rec->data[1] = 0;
	head->next = rec->next = NULL;
	head->pre = rec->pre = NULL;

	node *p = head;
	//记录多边形顶点
	for (int i = 0; i < 6; ++i) {
		addNode(p, result[i][0], result[i][1], 0);
	}
	p->next = head;
	head->pre = p;
	//把多边形顶点存入
	p = rec;
	for (int i = 0; i < 4; ++i) {
		addNode(p, re[i][0], re[i][1], 0);
	}
	p->next = rec;
	rec->pre = p;
}
//检测是否有交点
int cross(const node* one, const node* two, const int edg) {
	int result = 0;
	switch (edg) {
	case T:
		if ((one->data[1] > 120) && (two->data[1] < 120) || (one->data[1] < 120) && (two->data[1] > 120)) {
			result = 1;
		}
		break;
	case R:
		if
  • 2
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值