В этом учебном материале по Excel мы рассмотрим примеры того, как рассчитать расстояние между двумя точками на координатной плоскости.
Основная формула
=КОРЕНЬ((x2—x1)^2+(y2—y1)^2) |
Описание
Чтобы вычислить длину отрезка по координатам двух точек на линии, вы можете использовать формулу расстояния, адаптированную для синтаксиса формул Excel. В показанном примере формула в G5, имеет следующий вид:
=КОРЕНЬ((D5—B5)^2+(E5—C5)^2) |
где координаты двух точек указаны в столбцах с B по E.
Пояснение
Длину линии можно рассчитать по формуле расстояния, которая выглядит так:
Расстояние — это квадратный корень из изменения x
в квадрате плюс изменение y
в квадрате, где две точки даны в форме (x1, y1) и (x2, y2).
Формула расстояния — это пример примененной теоремы Пифагора, где изменение x
и изменение y
соответствуют двум сторонам прямоугольного треугольника, а гипотенуза — вычисляемому расстоянию.
В Excel формулу расстояния можно записать с помощью оператора экспоненты ^
и функции КОРЕНЬ следующим образом:
=КОРЕНЬ((D5—B5)^2+(E5—C5)^2) |
В соответствии с порядком операций Excel, изменение x
и изменение y
вычисляется, затем возводится в квадрат, и два результата складываются вместе и передаются в функцию КОРЕНЬ, которая возвращает квадратный корень из суммы в качестве окончательного результата:
=КОРЕНЬ((D5—B5)^2+(E5—C5)^2) =КОРЕНЬ((6)^2+(8)^2) =КОРЕНЬ(36+64) =КОРЕНЬ(100) =10 |
Функцию СТЕПЕНЬ также можно использовать вместо оператора экспоненты ^
следующим образом:
=КОРЕНЬ(СТЕПЕНЬ(D5—B5;2)+СТЕПЕНЬ(E5—C5;2)) |
с тем же результатом.
mk2gt Пользователь Сообщений: 7 |
Здравствуйте. Подскажите, пожалуйста, как рассчитать МИНИМАЛЬНОЕ расстояние между точками если на вход ей подаются координаты точек,
…. Изменено: mk2gt — 22.03.2016 18:24:26 |
|||||||||||||||||||||||||||||||||
Udik Пользователь Сообщений: 372 excel 2016х64 Контакты в профиле |
Количество точек в каких пределах, точки на плоскости? Арфы — нет, возьмите бубен. |
mk2gt Пользователь Сообщений: 7 |
нет координаты заданы в числовом формате:
нужно найти минимальное расстояние между объектами от 1 до 10 …N =2-3тыс, точки на земле двумяточками и вот еще Изменено: mk2gt — 22.03.2016 18:43:16 |
||||||||||||||||||||||||||||||||||||||||||||
Udik Пользователь Сообщений: 372 excel 2016х64 Контакты в профиле |
Ну если точек в пределах пары тысяч, можно тупо в лоб, для каждой точки вычисляем расстояние до всех других, находим минимальное заносим в массив. Потом ищем минимум в массиве. А потом можно алгоритм всяко оптимизировать, например берем квадрат 10 на 10 и вычисляем расстояния до всех точек, Арфы — нет, возьмите бубен. |
Андрей VG Пользователь Сообщений: 11878 Excel 2016, 365 |
Доброе время суток |
MCH Пользователь Сообщений: 3875 |
Какова конечная цель? http://www.excelworld.ru/forum/3-12090-1 или поиск кратчайшего пути от одной точки до другой алгоритмом Дейкстры: http://www.excelworld.ru/forum/3-6656-1 |
mk2gt Пользователь Сообщений: 7 |
#7 23.03.2016 10:57:19
нужно получить массив данных для каждой точки А ближайшую точку В, имея списки координат точек А и В для которых выполняется условие расстояние от А и В менне Х метров
спасибо, хочется получить такое для всех, не для пары ближайших точек, например в 2х колонках: номер точки и расстояние)
как-то совсем не хочется, можно по карте с линейкой тоже сделать)) Изменено: mk2gt — 23.03.2016 13:11:06 |
||||||
Михаил Пользователь Сообщений: 7 |
поменял, по задачке есть еще желающие помочь |
Юрий М Модератор Сообщений: 60588 Контакты см. в профиле |
#9 23.03.2016 13:08:20
Это утверждение? ) |
||
MCH Пользователь Сообщений: 3875 |
#10 23.03.2016 13:38:59
Можно предложить следующее решение |
||
Андрей VG Пользователь Сообщений: 11878 Excel 2016, 365 |
#11 23.03.2016 18:59:46
А вы бы примерчик то привели бы что есть — как должно, а то только требовать — догадайтесь как надо Прикрепленные файлы
Изменено: Андрей VG — 23.03.2016 19:18:56 |
||
Михаил Пользователь Сообщений: 7 |
нашел решение , но результат не похож на правду |
Андрей VG Пользователь Сообщений: 11878 Excel 2016, 365 |
Михаил, а чем предложенный мной вариант не подошёл? |
Михаил Пользователь Сообщений: 7 |
#14 19.04.2016 14:49:08
Изменено: Михаил — 19.04.2016 16:10:17 |
||
Андрей VG Пользователь Сообщений: 11878 Excel 2016, 365 |
#15 19.04.2016 16:27:31 Доброе время суток
То есть вы задумались об алгоритме на VBA? Тут ничего особо сложного. Разбиваете пространство между минимумом и максимом координат на равные прямоугольные области (собственно — двумерный массив). При разбиении желательно чтобы каждая точка была в своём прямоугольнике — мало достижимый вариант, но можно разбить и по статистике координат. |
||
MCH Пользователь Сообщений: 3875 |
#16 19.04.2016 18:44:12 Даже для 3000 точек попарное сравнение и вычисление расстояний занимает менее минуты (у меня считается 8 секунд):
а если сегментировать координатную плоскость, как предложил Андрей VG, тем самым ограничив количество сравниваемых друг с другом точек, то вычисления займут еще меньше времени (правда кода будет больше). Для решения нужно понять конечную цель задачи, что в итоге то нужно от сравнения координат? Изменено: MCH — 20.04.2016 07:16:21 |
||
atomska Пользователь Сообщений: 1 |
Здравствуйте! Подскажите реальная ли задача? Нужно посчитать среднее расстояние от одного банкомата до другого. Вводные: Площадь Страны 17 125 191 км2 Плотность банкоматов на 10 км2 = 1,9 Плотность населения на 1 км2 = 8,56 Заранее спасибо! Может какие еще данные нужны, или вообще другие |
Мартын Пользователь Сообщений: 282 |
#18 17.08.2018 10:31:39
Извините, но это есть бред. Среднее расстояние от одного объекта до другого равно самому этому расстоянию. |
||
Мартын Пользователь Сообщений: 282 |
Вам нужен либо минимальный радиус окружности, в которой находится один банкомат, либо среднее (а лучше медианное) значение таких радиусов, либо что-то вроде этого. |
StoTisteg Пользователь Сообщений: 441 |
Мартын, даже если не придираться к словам, непонятно, при чём тут Эксель. Это обычная школьная задача по арифметике. |
IKor Пользователь Сообщений: 1167 |
2 atomska Если указанная величина плотности размещения банкоматов одинакова для всей страны, то на площади 2,0/1,9 = 10,53 км2 «в среднем» находится два банкомата. Данные по плотности населения и размере страны, видимо, не оказывают влияния на решение этой задачи. |
Андрей VG Пользователь Сообщений: 11878 Excel 2016, 365 |
#22 17.08.2018 10:53:23
У меня получилось 2,294157339 км. Правда, не понял, причём тут плотность населения. Прикрепленные файлы
|
||
Мартын Пользователь Сообщений: 282 |
#23 17.08.2018 11:26:37
Это для геометрически квадратной страны с банкоматами в узлах сетки (значит куча «шайтан-машинок» стоит на границе страны ). |
||
Андрей VG Пользователь Сообщений: 11878 Excel 2016, 365 |
#24 17.08.2018 12:03:14
То есть площади банкоматов пересекаются? Тогда плотность будет больше. |
||
Мартын Пользователь Сообщений: 282 |
#25 17.08.2018 12:36:24
Никоим образом! Банкомат равномерно размазан по всей площади присутствия. По умолчанию плотность вероятности нахождения банкомата в определённой точке есть константа. |
||
Андрей VG Пользователь Сообщений: 11878 Excel 2016, 365 |
#26 17.08.2018 12:51:27
С таким же успехом, может быть и сконцентрирован в одной точке. 19 банкоматов стоят в одном месте впритык. на 100 кв. км. будет 19 / 10 = 1,9 банкомата на 10 кв. км. Смотря от чего считать эту вероятность. |
||
Мартын Пользователь Сообщений: 282 |
#27 17.08.2018 13:05:07
Несколько сообщений выше я уже указал, что задание есть бред в данной постановке, поскольку не даны определения некоторых величин. В конечном итоге, если между двумя банкоматами по прямой всего 1 км, а до любого другого 100 км, то не факт, что это ближайший. Ведь на этом километре может быть непролазное болото, море, гора или враждебное государство , тогда окажется, что 100 км гораздо «ближе», чем один. |
||
Given a list of geographic coordinate pairs, you can implement the Haversine formula directly in Excel.
The simplest way to use this (or a more accurate, but I think it’s not your case) formula consists into press Alt+F11
to open the VBA Editor, click Insert --> Module
and then (copy and) paste e.g. the code kindly suggested by blah238.
Public Function getDistance(latitude1, longitude1, latitude2, longitude2)
earth_radius = 6371
Pi = 3.14159265
deg2rad = Pi / 180
dLat = deg2rad * (latitude2 - latitude1)
dLon = deg2rad * (longitude2 - longitude1)
a = Sin(dLat / 2) * Sin(dLat / 2) + Cos(deg2rad * latitude1) * Cos(deg2rad * latitude2) * Sin(dLon / 2) * Sin(dLon / 2)
c = 2 * WorksheetFunction.Asin(Sqr(a))
d = earth_radius * c
getDistance = d
End Function
There will be a new custom getDistance
function (unit = kilometer) available in your spreadsheet which accepts four parameters, i.e. the two pairs of coordinates, as follow:
getDistance(latitude1, longitude1, latitude2, longitude2)
where latitude1, longitude1, latitude2, longitude2
should be replaced by their relative cell references.
I’m currently drawing up a mock database schema with two tables: Booking
and Waypoint
.
- Booking stores the taxi booking information.
- Waypoint stores the pickup and drop off points during the journey, along with the lat lon position. Each sequence is a stop in the journey.
How would I calculate the distance between the different stops in each journey (using the lat/lon data) in Excel?
Is there a way to programmatically define this in Excel, i.e. so that a formula can be placed into the mileage
column (Booking
table), lookup the matching sequence (via bookingId
) for that journey in the Waypoint
table and return a result?
Example 1:
A journey with 2 stops:
1 1 1 MK4 4FL, 2, Levens Hall Drive, Westcroft, Milton Keynes 52.002529 -0.797623
2 1 2 MK2 2RD, 55, Westfield Road, Bletchley, Milton Keynes 51.992571 -0.72753
4.1 miles according to Google, entry made in mileage
column in Booking
table where id = 1
Example 2:
A journey with 3 stops:
6 3 1 MK7 7DT, 2, Spearmint Close, Walnut Tree, Milton Keynes 52.017486 -0.690113
7 3 2 MK18 1JL, H S B C, Market Hill, Buckingham 52.000674 -0.987062
8 3 1 MK17 0FE, 1, Maids Close, Mursley, Milton Keynes 52.040622 -0.759417
27.7 miles according to Google, entry made in mileage
column in Booking
table where id = 3
В Excel это выглядит немного не так: обычно диапазон таблицы и ссылки на таблицу совпадают
Задачу можно решить одной формулой. Для этого нужно задать диапазоны и объяснить табличному процессору, что делать с данными.
В Excel, кроме обычных формул, есть понятие «формула массива» — формула, ввод которой должен быть обязательно завершен нажатием Ctrl+Shift+Enter.
Формулы массива не следует сравнивать со всеми формулами, обрабатывающими массивы данных. Это разные понятия.
Формула массива для строки 2 (получить минимальное расстояние):
=МИН(ACOS(SIN(C2)*SIN($F$2:$F$3)+COS(C2)*COS($F$2:$F$3)*COS(B2-$E$2:$E$3))*6371210)
Находясь в строке формул, нажать «комбинацию из трех пальцев», указанную ранее. Формула должна заключаться в фигурные скобки — {}. Все. Готово.
После ввода формулы ячейку можно копировать по строкам (протянуть вниз).
Формула находит количество значений, равное количеству ячеек в диапазоне, и показывает минимальное.
Получить имя остановки:
=ИНДЕКС($D$2:$D$3;ПОИСКПОЗ(МИН(ACOS(SIN(C2)*SIN($F$2:$F$3)+COS(C2)*COS($F$2:$F$3)*COS(B2-$E$2:$E$3))*6371210);ACOS(SIN(C2)*SIN($F$2:$F$3)+COS(C2)*COS($F$2:$F$3)*COS(B2-$E$2:$E$3))*6371210;))
Недостаток формул массива и обрабатывающих массивы данных: формулы тяжелы в обработке, производится много лишних вычислений, при большом количестве таких конструкций возможны торможения при вычислениях.
Формулы массива можно облегчить: добавить дополнительные столбцы (строки) с формулами, в которых будет производиться часть вычислений. Это намного упрощает вычисления.
Необходимо найти кратчайший путь между 2-мя заданными городами. Построим линейную модель и с помощью надстройки Поиск решения решим задачу.
В статье
Поиск решения MS EXCEL (6.3). Задача коммивояжера (полный граф, линейная модель)
рассматривались модели, в которых коммивояжёру требуется посетить все имеющиеся города. В этой задаче посещение всех городов не требуется.
Задача
Имеется 11 городов, координаты которых известны. Маршруты проложены только между некоторыми городами (неполный граф). Найти кратчайший путь между 2-мя заданными городами. Построить Линейную модель.
Создание модели
Так как даны координаты городов, то сначала найдем расстояния между ними (см.
файл примера
).
Расстояния рассчитаем с помощью формулы: =
КОРЕНЬ((ИНДЕКС($C$7:$D$17;ПОИСКПОЗ($A30;$A$7:$A$17;0);1)-ИНДЕКС($C$7:$D$17;ПОИСКПОЗ(B$29;$A$7:$A$17;0);1))^2 +(ИНДЕКС($C$7:$D$17;ПОИСКПОЗ($A30;$A$7:$A$17;0);2)-ИНДЕКС($C$7:$D$17;ПОИСКПОЗ(B$29;$A$7:$A$17;0);2))^2)
Теперь создадим линейную модель для решения задачи с помощью
Поиска решения
.
Совет
: Вводная статья про
Поиск решения
в MS EXCEL 2010
находится здесь
.
Обратите внимание, что не все города соединены сообщением (столбцы J:M), например нет прямого маршрута между Москвой и Парижем. Также для модели принципиально направление маршрута: Москва — Лондон, это не тоже самое, что Лондон-Москва (при необходимости список маршрутов можно расширить).
Переменные (выделено зеленым)
. В качестве переменных модели следует взять номера маршрутов между городами: если маршрут включен в кратчайший путь, то переменная =1, если нет, то =0.
Ограничения (выделено синим)
. Необходимо, чтобы из каждого города, в котором побывал путешественник, был входящий и выходящий маршрут. Так как входящий маршрут обозначается 1, а исходящий -1, то их сумма, равная 0, будет означать, что в город вошли и вышли (включен в кратчайший путь). Исключение составляют город – начальная точка путешествия (сумма =-1) и город – конечная точка (сумма =1). Изменяя ограничение в синем столбце, можно задавать начальные и конечные пункты путешествия.
Целевая функция (выделено красным)
.
Длина маршрута должна быть минимальной.
Примечание
: для удобства настройки
Поиска решения
используются
именованные диапазоны
.
Выберите Линейный метод поиска решения, т.к. созданная модель является линейной.
Найденное
Решение
Поиск решения
гарантировано найдет самый короткий маршрут, т.к. модель линейная.
Изменив начальный и конечный пункт путешествия, и перезапустив
Поиск решения
, получим другой маршрут.
Будьте внимательны, не все пары конечных и начальных пунктов допустимы. Например, задав путешествие из Москвы в Копенгаген,
Поиск решения
не найдет маршрут, т.к. для этого потребуется «двигаться назад», а в маршрутах между городами обратные пути не прописаны (маршруты, конечно, можно добавить в столбцы J:M, но не забудьте изменить и другие формулы).