首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Bresenham画线代码

Bresenham画线代码
EN

Stack Overflow用户
提问于 2013-09-12 18:13:46
回答 4查看 49.2K关注 0票数 3

我正在尝试使用Bresenham算法在C语言中画一条线。我正在使用dosbox for Windows7中的turbo C++来实现这种code.While编译。我没有得到任何错误,但是当我运行代码时,程序在获得两个坐标后终止。请帮助。

关于编译的消息如下..

目录路径如下

我的代码..

代码语言:javascript
复制
  # include <stdio.h>
  # include <conio.h>
  # include <graphics.h>

  void main()
  {
    int dx,dy,x,y,p,x1,y1,x2,y2;
    int gd,gm;

    clrscr();

    printf("\n\n\tEnter the co-ordinates of first point : ");
    scanf("%d %d",&x1,&y1);
    printf("\n\n\tEnter the co-ordinates of second point : ");
    scanf("%d %d",&x2,&y2);

    dx = (x2 - x1);
    dy = (y2 - y1);

    p = 2 * (dy) - (dx);

    x = x1;
    y = y1;

    detectgraph(&gd,&gm);
    initgraph(&gd,&gm,"e:\\tc\\bgi");
    putpixel(x,y,WHITE);

    while(x <= x2)
    {
      if(p < 0)
      {
        x=x+1;
        y=y;
        p = p + 2 * (dy);
      }
      else
      {
        x=x+1;
        y=y+1;
        p = p + 2 * (dy - dx);
     }
     putpixel(x,y,WHITE);
   }
   getch();
   closegraph();
}
EN

回答 4

Stack Overflow用户

发布于 2013-09-24 03:01:34

OP应该发布所使用的输入。

发布的示例代码不起作用的是x1 > x2y1 > y2。这是一组会突然停止例程的输入。要进行修复,dxdy应基于绝对值,增量xy步骤需要独立为+1-1

输入3,4而不是3 4 (逗号与空格)也会使例程变得混乱。

在while循环中,推荐使用if(p <= 0)

OP's "...代码程序在获得两个坐标后终止。“不够详细,因为代码当然应该在获得两个坐标后的某个时候终止。但是OP并没有详细说明它在哪里过早地终止。

票数 1
EN

Stack Overflow用户

发布于 2013-09-12 18:21:34

这是启动调试器并一步一步地检查代码,观察任何变量的典型完美时间点。如果调试器不可用,则可以选择将printf调试到控制台。

第一个技巧是检查这些行是否不会生成错误/异常:

代码语言:javascript
复制
  detectgraph(&gd,&gm);
  initgraph(&gd,&gm,"e:\\tc\\bgi");
  putpixel(x,y,WHITE);
票数 0
EN

Stack Overflow用户

发布于 2013-09-28 18:18:55

纠正这个问题的一种方法是根据截图中提到的地址更改initgraph函数中的路径。

代码语言:javascript
复制
detectgraph(&gd,&gm);
initgraph(&gd,&gm,"C:\\TURBOC3\\bgi");
putpixel(x,y,WHITE);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18761457

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档