Декартова плоскость бесконечной линии?

Я пытаюсь сделать программу, которая делает декартову плоскость; Вы вводите основную информацию о линии, и он рисует линию.

Жаль, что это не работает хорошо. По сути, это цикл, который помещает символ 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;

Есть идеи?

1 ответ

Решение

Когда ваши значения у превышают 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,

Я также настоятельно рекомендую получить правильную графическую библиотеку

Другие вопросы по тегам