基本上我想生成一個角度(0 - 360度),不在其他角度的指定範圍內。我已經作出此功能檢查兩個角度:我需要幫助優化功能
function check(angle1, angle2, range) {
var diff = angle1 - angle2;
if(Math.abs(diff % 360) <= range || (360-Math.abs(diff % 360)) <= range) {
return true;
} else {
return false;
}
}
很簡單,但我需要檢查對所有其他角度的任意角度,如果它通過繼續,產生一個新的角度,如果失敗複檢,並承認當任何新角度都無法通過時。
,我認爲這會工作:
var others = [array of objects];
...
for(var i = 0; i < 360; i++) {
var pass = true;
for(var n = 0; n < others.length; n++) {
if(check(i, others[n].angle, 5)) {
pass = false;
break;
}
}
if(pass) return i;
}
return false;
當然,這是循環的很多,我會更喜歡一個隨機的角度,而不是增加。有沒有更快,更好的方法來做到這一點?謝謝。
編輯:決定做這樣的事情,從@ TheBronx的答案得到的想法。
var angles = [];
var range = 5;
function alterAngle(a, n) {
var angle = a + n;
if(angle < 0) angle = 360 + angle;
if(angle > 360) angle = angle - 360;
return angle;
}
// in the function
var angle = Math.floor(Math.random() * 360);
if(angles.indexOf(angle) == -1) {
for(var i = -range; i <= range; i++)
angles.push(alterAngle(angle, i));
}
也許[代碼審查。 se]可能是更適合這個問題的網站? – 2013-02-21 12:09:37
只是好奇,範圍是一個小值?像5º?在最壞的情況下你有多少個角度? – TheBronx 2013-02-21 12:11:19
你的角度是整數嗎? – 2013-02-21 12:12:16