Да предположим, че имам вектор с точки като полярни координати.
Да предположим, че една от тези точки действа като сонда, за която искам да намеря всички други точки в рамките на определено разстояние.
Има ли алгоритъм за това, без да ги конвертирате в картезианска форма?
Отговори:
7 за отговор № 1Търсите разстоянието за полярните координати. Можете да намерите формулата в това връзка.
Разстоянието между точките (r1, a1) и (r2, a2) е:
D = sqrt(r1*r1 + r2*r2 - 2*r1*r2*cos(a1-a2))
2 за отговор № 2
Бъдете внимателни, ако имате намерение да увеличите своя алгоритъм до много точки, пробирането за точки в близост е по-добре да се направи с помощта на пространствен индекс, Не знам за съществуването на пространствени индекси, използващи полярни координати, и съм сигурен, че ще бъдат малко сложни за внедряване / използване. Така че, ако имате:
- много точки,
- сонда по-често от движещите се точки,
задайте въпроса дали трябва да използвате декартови координати и пространствен индекс.
Извършете сами математиката според типичния случай на използване:
Използване на картезиански заедно с полярните координати:
- Преобразуването на полярните в декартови се извършва само когато една точка се движи и включва две тригонометрични функции;
- Намиране на точки, които са най - близо до определено разстояние додруга точка може да бъде направена в O (1) време (в зависимост от средното разстояние, размера на пространствения индекс, броя на точките ...) и не включва нищо друго освен добавяне / умножаване (дори и квадратни корени, сравнявате разстоянието в квадрат).
Използване само на полярни координати:
- Сканирането за всички точки без пространствения индекс е O (n);
- Това включва една тригонометрична функция за сравнение (по този начин п зареждания за всяка сонда).
Имайте предвид, че trigs са кървави скъпо в изчислителното време.