Vec2i是一个自定义类型,是int型二维向量的意思,由头文件geometry.h给出。
如果没印象可以查看向VS工程导入3个文件[202302131847]
Vec2i p0, // 顶点1
Vec2i p1, // 顶点2
Vec2i p2 // 顶点3


将排序步骤翻译成代码:
// 保证p0是最高的点
if (p1.y > p0.y) swap(p1, p0);
if (p2.y > p0.y) swap(p2, p0);
// 保证p1在中间
if (p2.y > p1.y) swap(p2, p1);
为了接下来的叙述更加直观,将三点连接成三角形:

计算出三角形三条边的直线方程,也就是直线P0P1,直线P1P2和直线P0P2。
这里以P1P2为例:
1.设直线P1P2: y = kx + b
2.代入两点的坐标 P1(x1,y1),P2(x2,y2),得
y1 = kx1 + b (a)
y2 = kx2 + b (b)
3.用方程(a)-(b),得到:
kx1 - kx2 = y1 - y2
k(x1-x2) = y1-y2
**k = (y1-y2)/(x1-x2)**
4.将k的表达式代入(a)方程,得到b的表达式:
**b = y1 - k * x1**
翻译成代码:
// 声明直线方程的两个变量k,b。
float k_p1p2, b_p1p2;
// 求直线P1P2方程式
k_p1p2 = 1.0 * (p1.y - p2.y) / (p1.x - p2.x);// float型表达式的计算需要乘以1.0
b_p1p2 = p1.y - k_p1p2 * p1.x;
其他两个直线方程同理:
// 求直线P0P2方程式
k_p0p2 = 1.0 * (p0.y - p2.y) / (p0.x - p2.x);
b_p0p2 = p2.y - k_p0p2 * p2.x;
// 求直线P0P1方程式
k_p0p1 = 1.0 * (p0.y - p1.y) / (p0.x - p1.x);
b_p0p1 = p0.y - k_p0p1 * p0.x;
现在以中间点P1作一条水平线,将三角形分割成两个三角形。