В принципе, я хочу сгенерировать угол (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] может быть более подходящим местом для этого вопроса? –
Любопытно, что диапазон небольшой стоимости? как 5º? Сколько углов вы можете иметь в худшем случае? – TheBronx
Ваши углы целых чисел? –