#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
链表实现Weiler-Atherton多边形裁剪算法
最新推荐文章于 2022-07-09 09:00:00 发布