2011-09-06 43 views
1

我在2D圖上有許多點,我關心它們位於的象限比實際座標本身。我有一個函數ReflectX(),它在子集上執行「沿X軸反射」,並返回點的更新象限。 因此,第1象限中的點現在位於4,反之亦然;對於象限2和3也是如此。 我不想使用4個if-else語句,而只是使用2來進行優化。可以這樣做嗎?任何其他類型的優化建議也是受歡迎的。我至今(這心不是很多)來完成:在x軸上反射點後獲得象限值

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)); 

回答

3

您可以通過看所有可能的輸入和輸出的表得到一個更簡單的答案:

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

所以,只要做到這一點:

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

沒錯方式簡單!謝謝。 – Omochikairi