2017-07-28 141 views
0

我在循環排斥的處理中有一個小小的演示。 除了物體及其斥責(鼠標) 的度數接近360 | 0區(或PI | -PI)。在0和360度的邊緣(或弧度-PI和PI)

或YouTube video

這是100%,因爲這種轉變的,但我沒有任何想法如何克服它。已經玩過模了。

+0

有什麼問題出在哪裏的代碼? – harold

+0

這可能會有所幫助:https://stackoverflow.com/questions/1878907/the-smallest-difference-between-2-angles –

回答

1

起初 - 我希望你不要混在比較弧度和度。

你計算

float angleDist = abs(angle - repulsor.angle); 
    and later comparison with 
inc=45 degrees 

工作錯的,如果一個角度359和,另一個是1,例如。

你可以建立一些if條件或使用表達式:

angleDist = arrcos(cos(angle - repulsor.angle)); 

是把所有的情況下正確

+0

謝謝,這個工程! – VVK

0

這裏面的對象,處理/ JAVA,善有善報0.0,0.0中心

 float repulsorAngle = atan2(repulsor.y, repulsor.x); 
     if(rad < 0.0) { angle = map(rad, -PI, 0, 180, 360); } 
     else { angle = map(rad, 0, PI, 0, 180); } 

     float angleDist = abs(angle - repulsor.angle); 
     float dist = PVector.dist(new PVector(x, y), new PVector(repulsor.x, repulsor.y)); 

     float inc = 45.0; 

     if (angleDist < inc) { 
     float sine = sin(map(angleDist, inc, 0, 0, PI/2)) * 50.0; 

     println(sine); 

     x = cos(radians(angle)) * (r + sine * dir); 
     y = sin(radians(angle)) * (r + sine * dir); 

     } else { 

     x = cos(radians(angle)) * (r); 
     y = sin(radians(angle)) * (r); 

     }