我在循環排斥的處理中有一個小小的演示。 除了物體及其斥責(鼠標) 的度數接近360 | 0區(或PI | -PI)。在0和360度的邊緣(或弧度-PI和PI)
或YouTube video
這是100%,因爲這種轉變的,但我沒有任何想法如何克服它。已經玩過模了。
我在循環排斥的處理中有一個小小的演示。 除了物體及其斥責(鼠標) 的度數接近360 | 0區(或PI | -PI)。在0和360度的邊緣(或弧度-PI和PI)
或YouTube video
這是100%,因爲這種轉變的,但我沒有任何想法如何克服它。已經玩過模了。
起初 - 我希望你不要混在比較弧度和度。
你計算
float angleDist = abs(angle - repulsor.angle);
and later comparison with
inc=45 degrees
工作錯的,如果一個角度359
和,另一個是1
,例如。
你可以建立一些if條件或使用表達式:
angleDist = arrcos(cos(angle - repulsor.angle));
是把所有的情況下正確
謝謝,這個工程! – VVK
這裏面的對象,處理/ 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);
}
有什麼問題出在哪裏的代碼? – harold
這可能會有所幫助:https://stackoverflow.com/questions/1878907/the-smallest-difference-between-2-angles –