21.11.2011, 18:56
|
|
Кандидат Javascript-наук
|
|
Регистрация: 03.08.2011
Сообщений: 106
|
|
Столкновение объектов
Здравсвуйте.
Подскажите пожалуйста
Есть ф-я, которыя считает расстояние от одного объекта до другого
function getDistance(x1, y1, x2, y2)
{
var dx = x1 - x2;
var dy = y1 - y2;
return Math.floor(Math.sqrt((dx * dx) + (dy * dy)));
};
Как можно переписать эту ф-ю, если объектов будет 5 или 10?
|
|
21.11.2011, 19:00
|
|
Модератор
|
|
Регистрация: 27.04.2010
Сообщений: 3,417
|
|
Не очень понятно, как при этом должна работать данная функция. Возвращать среднее расстояние? Возвращать массив расстояний? Сумму расстояний?
|
|
21.11.2011, 19:03
|
|
Кандидат Javascript-наук
|
|
Регистрация: 03.08.2011
Сообщений: 106
|
|
Сообщение от trikadin
|
Не очень понятно, как при этом должна работать данная функция. Возвращать среднее расстояние? Возвращать массив расстояний? Сумму расстояний?
|
Ф-я возврацает расстояние от 2-х объектов.
Потом я сравниваю это расстояние с суммой их радиусов и если дистанция(то, что возвращает ф-я) меньше, чем сумма радиусов, то произошло столкновение.
|
|
21.11.2011, 19:06
|
|
Модератор
|
|
Регистрация: 27.04.2010
Сообщений: 3,417
|
|
Сообщение от Isaac
|
Ф-я возврацает расстояние от 2-х объектов.
Потом я сравниваю это расстояние с суммой их радиусов и если дистанция(то, что возвращает ф-я) меньше, чем сумма радиусов, то произошло столкновение.
|
Молодец. Но ты спросил
Сообщение от Isaac
|
Как можно переписать эту ф-ю, если объектов будет 5 или 10?
|
Вот в этом случае, она, по-твоему, что должна делать?
|
|
21.11.2011, 19:09
|
|
Кандидат Javascript-наук
|
|
Регистрация: 03.08.2011
Сообщений: 106
|
|
Сообщение от trikadin
|
Вот в этом случае, она, по-твоему, что должна делать?
|
Проверять x и y 5 или 10 других объектов?
Но я не знаю, как правильно написать условие внутри ф-и...
|
|
21.11.2011, 19:15
|
|
Модератор
|
|
Регистрация: 27.04.2010
Сообщений: 3,417
|
|
Просто при движении циклом проверяй расстояние для каждой пары объектов. И всё.
|
|
21.11.2011, 19:19
|
|
Кандидат Javascript-наук
|
|
Регистрация: 03.08.2011
Сообщений: 106
|
|
Сообщение от trikadin
|
Просто при движении циклом проверяй расстояние для каждой пары объектов. И всё.
|
Я не совсем понял.
Допустим я имею 5 объектов.
И мне проверять для о1 с о2, о1 с о3, о1 с о4, о1 с о5, потом о2 с о3, о2 с о4 и ...
Вроде, как-то не серьезно как-то получается
Последний раз редактировалось Isaac, 21.11.2011 в 19:21.
|
|
21.11.2011, 19:21
|
|
Модератор
|
|
Регистрация: 27.04.2010
Сообщений: 3,417
|
|
Ну да, факториал n действий будет. По другому не выйдет.
Вы только это циклом сделайте, руками не пишите...
|
|
21.11.2011, 19:24
|
|
Кандидат Javascript-наук
|
|
Регистрация: 03.08.2011
Сообщений: 106
|
|
Сообщение от trikadin
|
Ну да, факториал n действий будет. По другому не выйдет.
Вы только это циклом сделайте, руками не пишите...
|
А как примерно должен выглядеть цикл, можете подсказать?
|
|
21.11.2011, 19:28
|
|
Модератор
|
|
Регистрация: 27.04.2010
Сообщений: 3,417
|
|
Мда. Как же вы игру с такими познаниями пишете.
//храните объекты в массиве, тогда можно будет сделать так:
for (var i=0; i!= arr.length; ++i) //arr - наш теоретический массив
for (var j= i; j!= arr.length; ++j)
if (getDistance(arr[i][0], arr[i][1], arr[j][0], arr[j][1]) < someValue) { // если взрыв
alert("Ба-бах!");
}
|
|
|
|