我正在学习计算机图形学,遇到了 Cohen-Sutherland 线裁剪算法。我们有一个由点定义的线段P1
,P2
并且我们试图找出它是否被裁剪在裁剪矩形内(通常由屏幕的宽度和高度定义,左上角是 [0, 0])
该算法很简单,我们只需检查每个点以查看该点的 x 和 y 是否超出范围:
if (y1 < min_clip_y)
p1_code |= CLIP_NORTH;
else if (y1 > max_clip_y)
p1_code |= CLIP_SOUTH;
if (x1 < min_clip_x)
p1_code |= CLIP_WEST;
else if (x1 > max_clip_x)
p1_code |= CLIP_EAST;
// Same deal with x2, y2
如果两者p1_code
和p2_code
都不等于零,我们拒绝该线,如果它们都为零,我们接受它,否则我们继续测试以找到与裁剪矩形相交边缘的裁剪交点:
switch(p1_code)
{
case CLIP_NORTH:
{
yc1 = min_clip_y;
xc1 = x1 + 0.5f + (min_clip_y - y1) * (x2-x1) / (y2-y1);
} break;
// other cases...
}
我从一本书中读到这个。我理解我们如何推导出 x 截距的方程,我只是不明白为什么我们要添加 0.5f 来舍入到下一个整数。为什么我们需要四舍五入?
谢谢!