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

标签 c++ plane cartesian

我正在尝试制作一个制作笛卡尔平面的程序;你输入线的基本信息,他画线。

太糟糕了,它不能很好地工作。基本上这是在行的每一点放置一个 X 字符的循环:

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

但是效果不好!这是结果: http://i.imgur.com/u01Bdk7.jpg 请注意本应只有一行的地方有 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;

有什么想法吗?

最佳答案

当您的 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

我也强烈建议获得一个合适的图形库

关于c++ - 笛卡尔平面无限直线?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20584549/

相关文章:

c++ - STLR(B) 是否在 ARM64 上提供顺序一致性?

c++ - 基于配置文件的通用 GUI

c++ - 解析分配给默认参数值的重载函数时考虑了哪些函数集?

opencv - 从单应性中恢复平面

arrays - Julia : Cartesian product of multiple arrays

c++ - C++程序崩溃中的文件读取错误

android - OpenGL ES : Texture a plane

c++ - 在C++中,如何任意创建点位置?

c++ - 成员赋值笛卡尔类 C++