前置知识:象限
有了标准斜率标准斜率[202302141842] ,不管什么方向、什么斜率的直线,我们都能将它们通过对称、翻转等操作转换成标准斜率,然后再去绘制直线。下图给出了8种情况的直线:

通过与直线 y = x , y = -x 进行比较,我们发现有4条直线(用黄色标出)是“陡的”,具体来说它们和水平x轴的夹角超过了45度。

我们可以通过计算直线的斜率来判断直线是不是陡的。具体来说:
斜率 k = |dy| / |dx|,
当 |k| > 1,直线是陡的;
当 |k| < 1,直线不是陡的;
当 |k| = 1,直线方程为 y = x 或者 y = -x。
比如下图中的线段A’’B’’不是陡的,这意味着 x 的增加量总是大于 y 的增加量,可以记作**△x > △y,**也可以记作是 dx > dy

下面的代码能够判断一条直线是不是“陡的”。在代码中,我们不需要用dy 去除以 dx,只需要比较它们的差值。
using namespace std;
void line_bresenham(int x0, int y0, int x1, int y1, TGAImage& image, TGAColor& color)
{
int dx = x1 - x0; // 两点的水平距离
int dy = y1 - y0; // 两点的垂直距离
bool is_steep = false; // 标记一条直线是不是"陡的"。默认值是false(因为我们以标准斜率为标准,它并不陡)
if(abs(dx) < abs(dy))// 判断直线斜率是否超过45度
{
is_steep = true;
// 将直线按照 y = x 或者 y = -x进行对称
swap(x0, y0);
swap(x1, y1);
}
}