Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Столкновение объектов (https://javascript.ru/forum/misc/23373-stolknovenie-obektov.html)

Isaac 21.11.2011 18:56

Столкновение объектов
 
Здравсвуйте.
Подскажите пожалуйста
Есть ф-я, которыя считает расстояние от одного объекта до другого
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?

trikadin 21.11.2011 19:00

Не очень понятно, как при этом должна работать данная функция. Возвращать среднее расстояние? Возвращать массив расстояний? Сумму расстояний?

Isaac 21.11.2011 19:03

Цитата:

Сообщение от trikadin (Сообщение 138178)
Не очень понятно, как при этом должна работать данная функция. Возвращать среднее расстояние? Возвращать массив расстояний? Сумму расстояний?

Ф-я возврацает расстояние от 2-х объектов.
Потом я сравниваю это расстояние с суммой их радиусов и если дистанция(то, что возвращает ф-я) меньше, чем сумма радиусов, то произошло столкновение.

trikadin 21.11.2011 19:06

Цитата:

Сообщение от Isaac
Ф-я возврацает расстояние от 2-х объектов.
Потом я сравниваю это расстояние с суммой их радиусов и если дистанция(то, что возвращает ф-я) меньше, чем сумма радиусов, то произошло столкновение.

Молодец. Но ты спросил
Цитата:

Сообщение от Isaac
Как можно переписать эту ф-ю, если объектов будет 5 или 10?

Вот в этом случае, она, по-твоему, что должна делать?

Isaac 21.11.2011 19:09

Цитата:

Сообщение от trikadin (Сообщение 138181)
Вот в этом случае, она, по-твоему, что должна делать?

Проверять x и y 5 или 10 других объектов?
Но я не знаю, как правильно написать условие внутри ф-и...

trikadin 21.11.2011 19:15

Просто при движении циклом проверяй расстояние для каждой пары объектов. И всё.

Isaac 21.11.2011 19:19

Цитата:

Сообщение от trikadin (Сообщение 138185)
Просто при движении циклом проверяй расстояние для каждой пары объектов. И всё.

Я не совсем понял.
Допустим я имею 5 объектов.
И мне проверять для о1 с о2, о1 с о3, о1 с о4, о1 с о5, потом о2 с о3, о2 с о4 и ...
Вроде, как-то не серьезно как-то получается :(

trikadin 21.11.2011 19:21

Ну да, факториал n действий будет. По другому не выйдет.

Вы только это циклом сделайте, руками не пишите...

Isaac 21.11.2011 19:24

Цитата:

Сообщение от trikadin (Сообщение 138188)
Ну да, факториал n действий будет. По другому не выйдет.

Вы только это циклом сделайте, руками не пишите...

А как примерно должен выглядеть цикл, можете подсказать?

trikadin 21.11.2011 19:28

Мда. Как же вы игру с такими познаниями пишете.

//храните объекты в массиве, тогда можно будет сделать так:
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("Ба-бах!");
    }


Часовой пояс GMT +3, время: 10:42.