我参加了图形信息学考试,我正在尝试理解 Bresenham 算法。我理解显示一条线和一个圆(我认为),但是当我做一个必须显示双曲函数的练习时,我无法做到正确。
双曲线函数的方程为 y = 100/x,我将其转换为 x*y - 100 = 0。我假设当前显示的像素位于屏幕上的 (x_p, y_p) 处。我计算了增量,当要显示的像素位于右侧时,我发现 I = 2y_p - 1,当要显示的像素位于右下角时,我发现 I = 2y_p - 2x_p - 5。但现在我不知道如何初始化。在我的课程中,线的初始化是在 x_0 = 0,y_0 = 0 处进行的,对于半径为 R 的圆,它是 x_0 = 0,y_0 = R,但我的夸张是什么?
我想追踪从 x = 10 到 x = 20 的夸张
void trace (const int x1, const int y1, const int x2)
{
int x = x1;
int y = y1;
int FM = //what to put here ???
glVertex2i(x,y);
while (x < x2)
{
if (FM < 0)
{
++x; --y;
const int dSE = 2*y - 2*x - 5;
FM += dSE;
}
else
{
++x;
const int dE = 2*y - 1;
FM += dE;
}
glVertex2i(x,y);
}
}
所以我这样称呼这个函数:
glBegin(GL_POINTS);
trace(10,10,20);
glEnd();
我知道它是旧的 OpenGL,我只是将它用于测试目的。