c++ 笛卡尔平面无限直线?

kq0g1dla  于 2023-08-09  发布在  其他
关注(0)|答案(1)|浏览(93)

我在试着做一个程序,制作一个笛卡尔平面;你输入线的基本信息,它画出线。
可惜效果不好。基本上,这是一个循环,它在行的每个点上都放一个X字符:

for(int x=0;x<MAP_HEIGHT;x++)
{
    piano.griglia[x][a*x+b]='X';
}

字符串
但它并不能很好地工作!结果如下:
x1c 0d1x的数据
注意应该只有一条线的地方有三条线。下面是飞机的代码,可能会有帮助:

class Cartesiano
{
public:
char griglia[MAP_LENGHT+1][MAP_HEIGHT+1];
Cartesiano( void )
{
    for(int y=0;y<=MAP_HEIGHT;y++)
    {
        for(int x=0;x<=MAP_LENGHT;x++)
        {
            if (y==0)griglia[x][y]='_';
            else
            {
                if(x==0)griglia[x][y]='|';
                else griglia[x][y]=' ';
            }
        }
    } 
}
void Draw( void )
{
    for(int y=MAP_HEIGHT;y>=0;y--)
    {
        for(int x=0;x<=MAP_LENGHT;x++)cout<<griglia[x][y];
        cout<<"\n";
    }
}
}piano;


有什么想法吗?

yhqotfr8

yhqotfr81#

当y值超过49(MAP_HEIGHT - 1)时,数组溢出。如果在绘制循环中计算y=a*x+b并打印Z而不是X,您将看到第一行是X,溢出的错误都是Z

for(int x=0;x<MAP_LENGTH;x++)
{
    int y = a*x+b;
    if(y<MAP_HEIGHT) {
        piano.griglia[x][y]='X';
    } else {
        piano.griglia[x][y]='Z';
    }
}

字符串
这是由于C++中数组的内存存储方式,它只是碰巧在一个数组之外写入会导致您写入下一个数组。一般来说,这样做会使你的程序崩溃。
还要注意,这里的x循环应该在MAP_LENGTH上。
我也强烈建议得到一个适当的图形库

相关问题