Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Провести перпендикуляр на карте - Программирование Android

Войти
Регистрация
Восстановить пароль
Другие темы раздела
Программирование Android Вывод по времени http://www.cyberforum.ru/android-dev/thread1600393.html
Подскажите как реализовать вывод информации из фаилов по вермени , то есть мне нужно , что бы в определенное время по нажатию кнопки выводило информацию из фаила.
Программирование Android VK Api мини профиль Привет всем,подскажите пожалуйста,как посредством такой авторизации в приложении package com.perm.kate.api.sample; import com.perm.kate.api.Auth; import android.app.Activity; import... http://www.cyberforum.ru/android-dev/thread1600262.html
Программирование Android Google maps KML чтение
Как можно в данной коде,карте передать данные от KML файла по адресу http://site.ru/map.kml? И реально ли это? package com.perm.kate.api.sample; import android.os.Bundle; import...
В RadioGroup неактивна последняя кнопка Программирование Android
Столкнулся с интересной багой. Создаю группу кнопок радио. по нажатию кнопки "далее" чекд должен сниматься. НО! после нажатия этой самой кнопки(метод GameNext) происходит следующее: если первой...
Программирование Android Скиньтесь кому не жалко http://www.cyberforum.ru/android-dev/thread1600101.html
Здравствуйте. Я не имею опыта разработки под андройд, но имею вполне конкретные цели. Кто сталкивался с любыми задачами касающимися web, удаленных подключений под android - скиньте проекты...
Программирование Android Звук не с микрофона? Приветствую. Есть ли возможность совершить вызов с телефона передавая звуковой сигнал не с микрофона самого устройства, а потоком через какой либо доступный интерфейс (usb, wifi и т.п.) или же... подробнее

Показать сообщение отдельно
Slon747
59 / 37 / 1
Регистрация: 24.08.2013
Сообщений: 427

Провести перпендикуляр на карте - Программирование Android

03.12.2015, 10:28. Просмотров 292. Ответов 14
Метки (Все метки)

Есть прямая, обозначенная точками A и B.
Есть точка С.
Требуется провести перпендикуляр на прямую AB.
Нашел алгоритм:
Java
1
2
3
4
5
6
7
8
double L=(x1-x2)*(x1-x2)+(y1-y2)*(y1-y2);
double PR=(x-x1)*(x2-x1)+(y-y1)*(y2-y1);
bool res=true;
double cf=PR/L;
if(cf<0){ cf=0; res=false; }
if(cf>1){ cf=1; res=false; }
double xres=x1+cf*(x2-x1);
double yres=y1+cf*(y2-y1);
Реализовал у себя:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
LatLng getClosestPoint(LatLng pointA, LatLng pointB, LatLng point) {
 
        double x = point.longitude;
        double y = point.latitude;
 
        double x1 = pointA.longitude;
        double y1 = pointA.latitude;
 
        double x2 = pointB.longitude;
        double y2 = pointB.latitude;
 
        double L = (x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2);
        double PR = (x - x1) * (x2 - x1) + (y - y1) * (y2 - y1);
        boolean res = true;
        double cf = PR / L;
        if (cf < 0) {
            cf = 0;
            res = false;
        }
        if (cf > 1) {
            cf = 1;
            res = false;
        }
        double xres = x1 + cf * (x2 - x1);
        double yres = y1 + cf * (y2 - y1);
 
        return new LatLng(yres, xres);
    }
В результате действительно находит точку на прямой, но все таки не ближайшую.
После долгих попыток понял, что погрешность сильно зависти от широты. Чем дальше от экватора, тем сильнее искажение. При этом сильное искажение как на больших, так и на малых треугольниках (100 м).
Что посоветуете?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru