没有错误,但是...图形未显示... [英] Error free but...Graphics not showing...

查看:119
本文介绍了没有错误,但是...图形未显示...的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

你好,

我正在用C ++做DDA线描算法.

我已经完成了它,没有任何错误,但是运行它之后,这些图形没有显示.

它使我重新回到程序中.
我很困惑,所以我需要你的帮助.

我知道这对你们来说很容易,帮助!

Hello,

I am doing DDA line drawing algorithm in C++.

I have finished it, error free, but the graphics are not displaying after running it.

It just brings me back to the programs.
I am confused so I need your help guys.

I know its easy for you guys, Help!!

#include<iostream.h>
#include<graphics.h>
#include<conio.h>
#include<math.h>
#include<dos.h>
#include<stdlib.h>
#include<stdio.h>
class lines
{
    private:
    int length,x1,y1,x2,y2,x,y,dx,dy,wx,wy,w,width;
    public:
	lines(); // Constructor
	void showline();
	int sign(int);
};
int lines::sign(int xx)
{
    if(xx<0)
	return -1;
    if(xx==0)
	return 0;
    if(xx>0)
	return 1;
	return 0;
}
lines::lines()
{
    x=0;y=0;
    cout<<"Enter The Co-Ordinates(x1,y1):=";
    cin>>x1>>y1;
    cout<<"Enter The Co-Ordinates(x2,y2):=";
    cin>>x2>>y2;
    cout<<"Enter The Width Of The Line:=";
    cin>>width;
}
void lines::showline()
{
    char *s,*s1;
    if(abs(x2-x1)>=abs(y2-y1))
	length=abs(x2-x1);
    else
	length=abs(y2-y1);
	w=width;
	wx=((w-1)/2)*(sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1))/abs(y2-y1));
	wy=((w-1)/2)*(sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1))/abs(x2-x1));
	dx=(x2-x1)/length;
	dy=(y2-y1)/length;
	if(dy>dx)
	    wy=wx;
	    x=x1+0.5*sign(dx);
	    y=y1+0.5*sign(dy);
	    int i=1;
	    setcolor(0);
	    while(i<=length)
	    {
		for(int j=0;j<wy;j++)
		    putpixel((x+320),480-(y+240+j),6);
		    for(j=0;j<wy;j++)
			putpixel((x+320),480-(y+240-j),6);
			putpixel((x+320),480-(y+240),6);
			x+=dx;
			y+=dy;
			i++;
	    }
	    setcolor(15);
	    outtextxy(20,10,"The Points Are:=");
	    sprintf(s,"A(%d,%d)",x1,y1);
	    outtextxy(20,20,s);
	    sprintf(s,"B(%d,%d)",x2,y2);
	    outtextxy(20,30,s);
	    getch();
}
void main()
{
	   int gd=DETECT,gm,i,j,xx=240,xxx=380;
	   clrscr();
	   lines a;
	   char *mess[]={"D","D","A"," ","A","L","G","O","R","I","T","H","M"};
	   initgraph(&gd,&gm,"..\\bgi");
	   cleardevice();
	   rectangle(120,40,320,240);
	   rectangle(320,40,520,240);
	   rectangle(120,240,320,440);
	   rectangle(320,240,520,440);
	   for(i=0,j=12;i<8,j>=6;i++,j--)
	   {
	       xx+=10;
	       outtextxy(xx,10,mess[i]);
	       xxx-=10;
	       outtextxy(xxx,10,mess[j]);
	       delay(100);
	   }
	   for(i=130;i<=510;i+=10)
	      for(j=50;j<=430;j+=10)
		  putpixel(i,j,15);
		      for(i=130;i<=510;i+=10)
		      {
			  if(i==320)
			      continue;
			      outtextxy(i,237,"+");
		      }
		      for(i=50;i<=430;i+=10)
		      {
			  if(i==240)
			      continue;
			      outtextxy(317,i,"-");
		      }
		      outtextxy(310,230,"O");
		      outtextxy(530,240,"X");
		      outtextxy(320,450,"-Y");
		      outtextxy(100,240,"-X");
		      outtextxy(320,30,"Y");
		      a.showline();
		      closegraph();
}

推荐答案

也许找不到BGI驱动程序,应将其包含在项目中,请参见以下讨论
Maybe the BGI driver is not found, you should include it in you project, see the following discussion http://www.programmersheaven.com/mb/CandCPP/35332/35332/help-grphics-error-devicle-driver-not-found-egavgabgi/[^].
:)


您是否为if和for语句使用了正确的块作用域范围规则:

如果没有{},则for/else部分仅占一行.代码格式化的方式表明您认为自己的代码块更大.
Are you using the correct block scoping rules for your if and for statements:

Without your {} only a single line is the for/else part. The way you have the code formatted suggests that you think your blocks are bigger.


CPallini有一个很好的观点.要检查是否确实如此,您需要调用 graphresult() initgraph()之后的[< ^ ].

DOSBox [ ^中运行​​程序]可能也是一种解决方案,它在运行MS-DOS程序方面比在基于Windows NT的操作系统上要好得多.
CPallini has a good point; to check if this is indeed the case, you need to call graphresult()[^] after initgraph().

Running your program in DOSBox[^] could possibly be a solution too, it tends to be much better at running MS-DOS programs than Windows NT based operating systems.


这篇关于没有错误,但是...图形未显示...的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆