c语言 - 布雷沙姆的线绘制算法和PID



有人知道Bresehham的线性算法是否有使用PID滤波器的反馈控制的修改版本吗?基本上,该算法只是误差项放大一半的P反馈控制。我看了Abrash的书《图形宝石》系列,。。etc还找不到任何

这里是:从这里。这使用了P参数(参见链接顶部显示的伪代码中的步骤)

提供的示例代码是在旧环境中编写的(代码中引用了TurboC),其中包含必须由您编写的函数。例如initgraph()putpixel()等。但是该算法看起来是完整的。

#include <stdio.h>
  #include <conio.h>
  #include <graphics.h>
  #include <math.h>
  #include <dos.h>
  int main() {
        /* request auto detection */
        int gdriver = DETECT, gmode;
        int x1 = 0, y1 = 0, x2, y2;
        int err, x, y, dx, dy, dp, xEnd;
        int twody, twodxdy;
        /* initialize graphic driver */
        initgraph(&gdriver, &gmode, "C:/TURBOC3/BGI");
        err = graphresult();
        if (err != grOk) {
                /* error occurred */
                printf("Graphics Error: %sn",
                                grapherrormsg(err));
                return 0;
        }
        /* max position in x and y axis */
        x2 = getmaxx();
        y2 = getmaxy();
        /* draws line from (0, 0) to (x2, y2) */
        dx = x2 - x1;
        dy = y2 - y1;
        twody = 2 * dy;
        twodxdy = 2 * (dy - dx);
        dp = twody - dx;
        if (x1 > x2) {
                x = x2;
                y = y2;
                xEnd = x1;
        } else {
                x = x1;
                y = y1;
                xEnd = x2;
        }
        /* put a dot at the position (x, y) */
        putpixel(x, y, WHITE);
        /* calculate x and y successor and plot the points */
        while (x < xEnd) {
                x = x + 1;
                if (dp < 0) {
                        dp = dp + twody;
                } else {
                        y = y + 1;
                        dp = dp + twodxdy;
                }
                /* put a dot at the given position(x, y) */
                putpixel(x, y, WHITE);
                /* sleep for 50 milliseconds */
                delay(50);
        }
        getch();
        /* deallocate memory allocated for graphic screen */
        closegraph();
        return 0;
  }

相关内容

  • 没有找到相关文章

最新更新