Получить значение квадранта после отражения точек по оси x - PullRequest
1 голос
/ 06 сентября 2011

У меня есть несколько точек на двухмерном графике, и я обеспокоен тем, что они лежат в квадранте, а не в реальных координатах. У меня есть функция ReflectX (), которая выполняет «Отражение вдоль оси X» на подмножестве и возвращает обновленный квадрант, в котором теперь лежат точки. Итак, точки изначально в квадранте 1 теперь будут лежать в 4 и наоборот; аналогично для квадрантов 2 и 3. Вместо 4 операторов if-else я хочу использовать только 2 для оптимизации. Это может быть сделано? Любые предложения по другим видам оптимизации также приветствуются. Что я сделал до сих пор (что не так много):

int ReflectX(int q[], int x, int y){//x & y provide the range boundaries
    int i;
    for(i=x-1; i<y; i++){
        if(q[i]==1 || q[i]==4) q[i]=(q[i]+3)%6;
        else //change 2 into 3 and 3 into 2
    }
}

РЕДАКТИРОВАТЬ: я не писал о ReflectY (), потому что я мог сделать это с одним условием if-else. Однако, основываясь на ответе Адама Розенфилда , я решил оптимизировать эту функцию с помощью однострочной формулы и получил:

q[i] = (q[i] - pow(-1, q[i]%2));

1 Ответ

3 голосов
/ 06 сентября 2011

Вы можете получить гораздо более простой ответ, просто взглянув на таблицу всех возможных входов и выходов:

Initial quadrant   Reflected quadrant
1                  4
2                  3
3                  2
4                  1

Итак, просто сделайте это:

q[i] = 5 - q[i];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...