c ++计算机图形中点线算法,八个八分圆

时间:2018-05-28 15:18:34

标签: c++ algorithm graphics line midp

我有八个八分圆实现中点算法的问题。当y轴反转时,当前情况如下图所示。

enter image description here

到目前为止,我设法让第1区工作完美,我不知道如何让它适用于其他区域,我一直在google,而我发现的只是第1区的例子而不是在其他区域。

这里是我的区域1的代码

imp lf/lf@xe file=scott.dmp log=imp.log full=y

}

默认情况下,给定的决策参数为void Line2D::MPOct1(const Window& window, const Point2D& start, const Point2D& end, const float& delta_x, const float& delta_y) const { Color color = mStartVtx.GetColor(); int int_delta_x = static_cast<int>(round(delta_x)); int int_delta_y = static_cast<int>(round(delta_y)); int start_x = static_cast<int>(round(start.GetX())); int start_y = static_cast<int>(round(start.GetY())); int const end_x = static_cast<int>(round(end.GetX())); int f = 2 * int_delta_y - int_delta_x; int f_e = 2 * int_delta_y ; // should be se due to y axis inverted int f_ne = 2 * int_delta_y + 2 * int_delta_x; while (start_x <= end_x ) { if (f >= 0) { window.SetPixel(start_x, start_y, color); f += f_e; start_x ++; } else { window.SetPixel(start_x, start_y, color); f += f_ne; start_x ++; // y axis inveted so -- start_y --; } } ,我假设的8方向为:

2deltaY -deltaX
任何人都可以告诉我如何解决其他oct区域,通过操纵 更新我设法使区域1,4,5和8工作

1 个答案:

答案 0 :(得分:0)

1)通过特殊功能处理垂直和水平线 2)制作两个函数 - 第一个八分圆的F1(其中x变化更快)和第二个八分圆的F2(其中y变化更快) 3)获得类似DeltaX = Abs(X2 - X1)的绝对delta值 4)获得类似XStep = (X2 - X1>0)?1:-1的步骤方向 5)对于1,4,5,8个八分圆,使用具有增量和步长的函数F1(而不是start_x ++使start_x += XStep等) 6)对于2,3,6,7个八分圆,使用函数F2,使用增量和步骤