Как сослаться на предыдущую итерацию в цикле for? - PullRequest
0 голосов
/ 02 июня 2018

Я пишу код для рисования линий длиной 2 8 пикселей на ЖК-дисплее.Я хотел бы сделать это с помощью цикла for, однако я застрял, пытаясь понять, как соединить начало второго и конец первого.Следующий код создает шаблон, который мне нужен, однако он очень повторяется при выполнении множества строк:

void draw_road(){
    double angle = PI/2;
    double length = 8;
    int starting_x = 24;
    int starting_y = 48;
        double x1a = starting_x;
        double y1a = starting_y;
        double x2a = x1a + (cos(angle) * length);
        double y2a = y1a - (sin(angle) * length);
        draw_line(x1a, y1a, x2a, y2a, FG_COLOUR);
        double x1b = x2a ;
        double y1b = y2a;
        double x2b = x1b + (cos(angle-(angle/4.5)) * length);
        double y2b = y1b - (sin(angle-(angle/4.5)) * length);
        draw_line(x1b, y1b, x2b, y2b, FG_COLOUR);
}

Я пробовал приведенный ниже код, однако не думаю, что он знает, где искать [i-1].

 void draw_road(){
        double angle = PI/2;
        double length = 8;
        int starting_x = 24;
        int starting_y = 48;
        double x1[2];
        double y1[2];
        double x2[2];
        double y2[2];
        for (int i = 0; i < 2; i++){
            x1[i] = starting_x + x2[i-1];
            y1[i] = starting_y + y2[i-1];
            x2[i] = x1[i] + (cos(angle) * length);
            y2[i] = y1[i] - (sin(angle) * length);
            draw_line(x1[i], y1[i], x2[i], y2[i], FG_COLOUR);
            angle /= 2;
        }
    }

Как я могу исправить это, чтобы цикл for знал значения последнего цикла (особенно, если это самый первый цикл)?

1 Ответ

0 голосов
/ 02 июня 2018

На первой итерации у вас нет «предыдущей» позиции;Таким образом, нет линии для рисования, кроме как для объявления начальной точки.

if вокруг вызова к draw и условные операторы для различения между "установкой начальной точки" и "вычислением следующей точки"мог сделать работу:

for (int i = 0; i < 2; i++){
    x1[i] = (i>0) ? starting_x + x2[i-1] : starting_x;
    ...
    if (i>0) {
        drawLine(...)
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...