笛卡尔平面无限直线?

问题描述 投票:0回答:1

我正在尝试制作一个制作笛卡尔平面的程序;您输入线条的基本信息,它就会绘制线条。

可惜效果不太好。基本上,这是在该行的每个点中放置一个 X 字符的循环:

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

但是效果不太好!这是结果:

请注意,本应只有一行的地方却出现了 3 行。这是飞机的代码,可能会有所帮助:

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;

有什么想法吗?

c++ plane cartesian
1个回答
3
投票

当 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

我还强烈建议您使用合适的图形库

© www.soinside.com 2019 - 2024. All rights reserved.