文章目录
说明分析代码关于自相交的理解看图说话
说明
该博文参考 弱花3kou 的文章 [OpenGL] 绘制并且判断凹凸多边形、自相交多边形
分析
凸多边形
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200912101702881.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM0NzE5MTg4,size_16,color_FFFFFF,t_70#pic_center)
凹多边形
![在这里插入图片描述](https://img-blog.csdnimg.cn/2020091210180124.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM0NzE5MTg4,size_16,color_FFFFFF,t_70#pic_center)
自相交
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200912101937725.gif#pic_center)
代码
#include
#include
#include
#include
using namespace std;
// 定义点
struct Pos {
int x;
int y;
};
// 定义边
struct Edge {
int x1, x2;
int y1, y2;
int vx;
int vy;
int a, b, c;
};
// 定义多边形
struct Poly {
// 点集
int xx[100];
int yy[100];
// 边集
Edge Edges[100];
int plotNums = 0; //点数量
int edgeNums = 0; //边数量
// 记录凹点
int conv = 0;
};
Poly poly;
// 求交点坐标,这里的A、B、C是直线方程 Ax + By + C = 0 的参数,求交点是利用向量叉乘计算得到的
// 具体可查看博客:用叉积求二维直线交点
// https://www.jianshu.com/p/3468c9967fc7
Pos CrossPos(int p1, int p2) {
Pos res;
int A1 = poly.Edges[p1].a;
int B1 = poly.Edges[p1].b;
int A2 = poly.Edges[p2].a;
int B2 = poly.Edges[p2].b;
int C1 = poly.Edges[p1].c;
int C2 = poly.Edges[p2].c;
int m = A1 * B2 - A2 * B1;
if (m == 0)
cout |