基础绘画
January 3, 2021About 2 min
基础绘画
线
我们从义务教育基础武器库中就可以学到直线的表达公式:
f(x, y) ≡ (y0 − y1)x + (x1 − x0)y + x0y1 − x1y0 = 0.
其中我们把直线的倾斜度数值化叫做斜率,公式如下:
m = (y1 − y0) / (x1 − x0)
斜率的基本原则就是:
- m > 0 : 直线为递增,也就是y值随着x增大而增大
- m < 0 : 直线为递减,也就是y值随着x增大而减小
- m = 0 :直线为平行于x轴的一条线
我们需要把直线绘画到屏幕上,这里我们拿 m > 0 的情况来举例,我们把屏幕的左下角、下边、左边可看做一个坐标轴,之前了解到屏幕就是一个像素的二维数组,索引就是坐标。这样我们就可以把直线上的点映射到屏幕坐标上。我们把需要画线段的开始点设置为(x0,y0),从(X0,y0)开始画,遇到一些条件的时候就把当前 y 坐标加一,继续向右画。简单可以理解为一排一排的画出来。
简单的伪代码如下:
y = y0
for x = x0 to x1 do
draw(x, y)
if f(x + 1, y + 0.5) < 0 then
y = y + 1
这里使y坐标加一条件就是用到了直线与点的关系的规则:
- 如果点在直线上,f(x,y) = 0
- 如果点在直线上方,f(x,y) > 0
- 如果点在直线下方,f(x,y) < 0
这个我们预计算同一排下一个像素的上边与我们的直线的位置关系:
预计算点在直线上方,所以线在 x+1 还未超过当前y值
预计算点在直线上方,所以线在 x+1 超过当前y值,需要画上面的像素
三角形
这里