2014-01-20 44 views
0

該問題看起來很簡單,但我無法爲其找到一個優雅的解決方案。按照該部分所在的象限將弧分割成部分

我有一個arc通過

startAngle (-360 <= startAngle <= 360), 
sweepAngle (-360 <= sweepAngle <= 360) 
and a radius (not important here). 

定義欲此弧分成對(startAngle1, sweepAngle1), ...使得存在一對不同的每個四個象限。

Eg. If startAngle = 45, sweepAngle = 90, then there shall be two pairs (45,45) and (90,45). 

蠻力的方法是檢查所有4^2可能性(每個startAngle和相應endAngle(由sweepAngle計算)可以是任何的4個象限的)。

但我認爲一個優雅簡單的解決方案應該在那裏。我似乎無法找到它。

謝謝。

編輯: 我只是想的一個算法是:
1.從由startAngle開始,我朝向sweepAngle迭代,並繼續檢查是否我遇到任何象限邊界(MOD(THETA)= 0,90,180,270 ,360)。
2.相應地更新弧線列表。

還好嗎?

回答

1

我將從90-startAngle%90開始,模運算符爲您提供當前象限中的部分startAngle。 90減去該值是startAngle必須在此象限中移動的部分。所以,這是你的第一個掃描角度。現在,您可以在您的下一個掃描角度上始終添加90。你這樣做直到你的計算電流sweepAngle大於你的輸入sweepAngle。然後你知道你處於最後一個象限。在僞代碼,out打印了一雙新的角度:

currentPosition=startAngle 
currentSweep = 90-startAngle%90 
totalAngle=0 
while (currentSweep < sweepAngle) 
    out (currentPosition, currentSweep) 
    currentPosition += currentSweep 
    totalAngle += currentSweep 
    currentSweep += 90; 
out (currentPosition, sweepAngle-totalAngle) 

也許你必須尋找到角落的情況下更加緊密,當由startAngle正是90發生什麼事,例如但基本上這應該是具有合理運行時間(和優雅,imo)的算法。

+0

謝謝,我的算法在類似的線路上實現。 –