在x轴上反射点后获取象限值

时间:2011-09-06 05:31:45

标签: c++ math graph

我在2D图上有许多点,我关心的是它们所处的象限比实际坐标本身还要多。我有一个函数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条件。但是,根据Adam Rosenfield的答案,我决定用一个单线公式优化这个函数并得到:

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

1 个答案:

答案 0 :(得分:3)

只需查看所有可能的输入和输出表,您就可以得到更简单的答案:

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

所以,就这样做:

q[i] = 5 - q[i];