Математический форум Math Help Planet
http://mathhelpplanet.com/

Получение координат ближайшей точки
http://mathhelpplanet.com/viewtopic.php?f=28&t=34911
Страница 1 из 1

Автор:  MaksTver69 [ 02 июл 2014, 01:05 ]
Заголовок сообщения:  Получение координат ближайшей точки

Имеется точка А(Тверь) с координатами 35.88555521 56.86302749
точка B(Москва) с координатами 37.59942239 55.75781339
точка C(Дубна) 37.15996927 56.73644158
Известны все расстояния AB 161км, AC 79м, BC 109км, CD 47км
Необходимо вычислить координаты точки D(точка соприкосновения перпендикуляра от точкиC к отрезку AB или же точка падения высоты треугольника ABC)
Надеюсь на вашу помощьИзображение

Автор:  Avgust [ 02 июл 2014, 04:57 ]
Заголовок сообщения:  Re: Получение координат ближайшей точки

[math]AD=\sqrt{79^2-47^2}\approx 63.50[/math]

[math]BD=\sqrt{109^2-47^2}\approx 98.35[/math]

Проверка: [math]AB'=63.50+98.35=161.85[/math], то есть немного отличается от исходного [math]AB=161[/math]

Сейчас займусь точными вычислениями по координатам.

Автор:  Avgust [ 02 июл 2014, 06:41 ]
Заголовок сообщения:  Re: Получение координат ближайшей точки

Если использовать Ваши координаты и аналитически все рассчитать, то получается качественно иная картина (с точки зрения соотношений сторон треугольников):

Изображение

Если масштабы осей координат одинаковые и сетка декартова, то вычисления верные, ибо на графике видно, что получился перпендикуляр CD и точка C лежит на прямой AB.

Так я последовательно вычислял в Maple

Изображение

Автор:  Avgust [ 02 июл 2014, 07:46 ]
Заголовок сообщения:  Re: Получение координат ближайшей точки

Если координаты градусные (широта, долгота), то необходимо сделать перерасчет координат таким образом, чтобы во-первых, были метры, и во вторых, масштабы по иксу и игреку стали одинаковыми. Затем по готовым формулам рассчитать точку D и обратной заменой найти её градусные координаты.

Автор:  MaksTver69 [ 02 июл 2014, 09:44 ]
Заголовок сообщения:  Re: Получение координат ближайшей точки

Спасибо за такой скорый отклик по моей проблеме.
А у вас остались где-то вычисления?
Я последовательно решил каждое уравнение и у меня получились другие результаты:
M = 0.58347578602911
N = 0.90480206504785
K = -72.388137231071
d = 0.5842864828419
b = 1.2806854371532
AD = 1.2806854371532
AB = 2.0393231518129
Xd = 36.96185581331
Yd = 56.168958184923

Автор:  Avgust [ 02 июл 2014, 13:59 ]
Заголовок сообщения:  Re: Получение координат ближайшей точки

Вы где-то опечатались при наборе проги. Потому что рисунок такой получается:

Изображение

-------------------------------

Мне удалось перевести градусную систему в декартову систему. Один градус долготы принял 62.25 км; один градус широты принял 111.3 км.

В результате расчетов по программе получил такой нормальный план:

Изображение

Тут все размеры в километрах.

Получив координаты точки D обратным расчетом получил географические координаты. В них, естественно, перпендикулярности нет:

Изображение

Ответ обвел в рамке.
Если у Вас есть Maple, то мне проще всего было бы на Вашу почту скинуть файл расчетов с расширением .mw. Если нет, то могу написать от руки и скинуть сюда скриншот. Но это только вечером получится.

Автор:  Avgust [ 02 июл 2014, 14:37 ]
Заголовок сообщения:  Re: Получение координат ближайшей точки

Хотя можно дать команды. Последовательно нажимайте в Maple каждую строку и все вычислится.

x[B] := 62.25*(37.59942239-35.88555521);
y[A] := 111.3*(56.86302749-55.75781339);
y[C] := y[A]-111.3*(56.86302749-56.73644158);
x[C] := x[B]-62.25*(37.59942239-37.15996927);
AB := sqrt(106.6882320^2+123.0103293^2);
AC := sqrt(79.33227528^2+(123.0103293-108.9213175)^2);
BC := sqrt((106.6882320-79.33227528)^2+108.9213175^2);
x[A] := 0;
y[B] := 0;
restart;
M := 1/(x[B]-x[A]); N := -1/(y[B]-y[A]); K := y[A]/(y[B]-y[A])-x[A]/(x[B]-x[A]);
d := (M*x[C]+N*y[C]+K)/sqrt(M^2+N^2);
b := sqrt((x[A]-x[C])^2+(y[A]-y[C])^2);
AD := sqrt(b^2-d^2);
AB := sqrt((-x[B]+x[A])^2+(-y[B]+y[A])^2);
x[D] := AD*(x[B]-x[A])/AB+x[A];
y[D] := (AB-AD)*(-y[B]+y[A])/AB+y[B];
x[A] := 0; y[A] := 123.0103293;
x[B] := 106.6882320; y[B] := 0;
x[C] := 79.33227528; y[C] := 108.9213175;
x[D] := evalf[10](x[D]); y[D] := evalf[10](y[D]);
x[1] := 41.03092815/(62.25)+35.88555521;
y[1] := 55.75781339+75.70213152/(111.3);

Автор:  MaksTver69 [ 02 июл 2014, 17:28 ]
Заголовок сообщения:  Re: Получение координат ближайшей точки

О да!
Она заработала :)
Изображение
Выложу на всякий случай код php, вдруг кому пригодится:
function getNearPoint($Xa, $Yaa, $Xbb, $Yb, $Xc, $Yc){
$Xb = 62.25 * ($Xa - $Xbb);
$Ya = 111.3 * ($Yb - $Yaa);
$Yc = $Ya - 111.3 * ($Yb - $Yc);
$Xc = $Xb - 62.25 * ($Xa - $Xc);
$AB = sqrt( pow($Xb, 2) + pow($Ya, 2) );
$AC = sqrt( pow($Xc, 2) + pow(($Ya - $Yc), 2) );
$BC = sqrt( pow( ($Xb - $Xc) , 2) + pow($Yc, 2) );
$Xa = 0;
$Yb = 0;
$M = 1 / ($Xb - $Xa);
$N = - 1 / ($Yb - $Ya);
$K = ($Ya / ($Yb - $Ya)) - ($Xa / ($Xb - $Xa));
$d = ($M * $Xc + $N * $Yc + $K) / sqrt(pow($M, 2) + pow($N, 2));
$b = sqrt(pow(($Xa - $Xc), 2) + pow(($Ya - $Yc), 2));
$AD = sqrt(pow($b, 2) - pow($d, 2));
$AB = sqrt(pow(($Xa - $Xb), 2) + pow(($Ya - $Yb), 2));
$Xd = $AD / $AB * ($Xb - $Xa) + $Xa;
$Yd = ($AB - $AD) / $AB * ($Ya - $Yb) + $Yb;
$x = $Xd / (62.25) + $Xbb;
$y = $Yaa + $Yd / (111.3);
return $x.' '.$y;
}

echo getNearPoint(37.59942239, 55.75781339, 35.88555521, 56.86302749, 37.15996927, 56.73644158);

Так же другие вычисления с помощью функции: http://prntscr.com/3ynng5 и http://prntscr.com/3ynodf
Использоваться будет для "приклеивания" транспортного средства к маршруту при небольших отклонениях от него.

Спасибо вам огромное за помощь, не знаю что бы делал без вас.

Автор:  Avgust [ 02 июл 2014, 18:55 ]
Заголовок сообщения:  Re: Получение координат ближайшей точки

Рад, что помог. Задача очень понравилась.

Страница 1 из 1 Часовой пояс: UTC + 3 часа [ Летнее время ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/