没有错误,但是...图形未显示... [英] Error free but...Graphics not showing...
本文介绍了没有错误,但是...图形未显示...的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
你好,
我正在用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 theBGI
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 callgraphresult()
[^] afterinitgraph()
.
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屋!
查看全文