Расчет расстояния между двумя точками в 2D-пространстве?

Таким образом, формула в основном такова: xd = x2-x1 yd = y2-y1 Distance = sqrt(xd * xd + yd * yd)

Но ведь формула должна быть разной в зависимости от того, находится ли что-то выше, ниже, слева или справа от другого объекта?

Например, если бы у меня был спрайт в середине экрана, а враг где-то внизу, потребовалось бы изменить «x2-x1» (скажем, спрайт игрока — x1, враг — x2) наоборот, если вместо этого враг был наверху?


person StallMar    schedule 20.11.2014    source источник
comment
Поработайте с несколькими простыми примерами, возможно, на бумаге в клетку, и вы легко поймете это сами.   -  person High Performance Mark    schedule 20.11.2014
comment
Хотя это не будет иметь никакого значения для чисел «нормального размера», я думаю, что стоит выработать привычку использовать гипот математической библиотечной функции, т.е. вместо этого использовать гипот (x2-x1,y2-y1).   -  person dmuir    schedule 20.11.2014


Ответы (3)


Расстояние в том смысле, который вы описали выше, всегда будет положительным значением. Сумма квадрата действительных чисел всегда будет положительной, и квадратный корень из положительного числа также всегда будет положительным. Таким образом, не имеет значения, определяете ли вы xd = x2-x1 или xd = x1-x2. Они отличаются только своим знаком, поэтому оба имеют одинаковое абсолютное значение, что означает, что они оба возводят в квадрат одно и то же значение.

Так что особых случаев здесь нет. Формулировка меры расстояния учитывает все вопросы, о которых вы говорите.

person andand    schedule 20.11.2014

Math.Sqrt(Math.Pow (a.X-b.X, 2) + Math.Pow (a.Y-b.Y, 2));

Попробуй это. Он должен работать!

person Harry.J    schedule 24.10.2017

да, вы очень правы. В моем случае мне нужно рассчитать расстояние между двумя точками в 2D. Я поставил x1 для роя, x2 для злоумышленника по оси X и y1 для злоумышленника и y2 для роя по оси Y. d=sqrt((рой(de,1) - (злоумышленникX)).^2 + (рой(de,2)-злоумышленникY).^2); [Расстояние не рассчитывается точно, я хочу, чтобы когда злоумышленник входит в круг любой частицы роя, он должен быть обнаружен] [1], иногда злоумышленник входит в круг, но не обнаруживается. Это моя проблема. Кто решит мою проблему, буду им очень благодарен. для de = 1:Ndrones
d = sqrt((рой(de,1) - (нарушительX)).^2 + (рой(de,2)-нарушительY).^2); if(d‹=rad) % обнаружен злоумышленник x = нарушитель X;
y = нарушитель Y; title('Обнаружен злоумышленник'); text(x,y+5,sprintf('Нарушитель')); text(500,900,sprintf('Итерации: %.2f',iter)); сюжет (рой (:, 1), рой (:, 2)); для i = 1: Ndrones рой (:, 9) = 100; % перезапустить минимальный расчет окончания возврата; end end % конец цикла [1]: http://i.stack.imgur.com/SBP27.png

person Gul Rukh Khan    schedule 17.08.2016
comment
Привет, Гул Рукх Хан, и добро пожаловать в Stack Overflow. Ваш ответ выглядит довольно обстоятельно, но его очень трудно читать; можно отформатировать, чтобы читабельнее было? Вы должны иметь возможность отделять фрагменты кода и использовать уценку, чтобы сделать разные части вашего ответа более понятными. - person Vince Bowdren; 17.08.2016