Задать вопрос

Алгоритм нахождения точек внутри выбранной области

Доброе время суток.

Подскажите пожалуйста алгоритм для построения условия нахождения всех точек внутри выбранной области.

image

Я только смог до думаться до следующей мысли.

1. Находим центр фигуры по координатам.
lat_center = сумма всех lat поделенная на количество lng_center = сумма всех lng поделенная на количество 2. В цикле строю условие для координат

  1.  
  2.                 $x_query        =       array();
  3.                 // строим условия для x
  4.                 foreach($x as $value){
  5.                         if (max($value,$x_center)==$value) {
  6.                                 $x_query[] = "`t3`.`lat_ya` <= ".$value;                               
  7.                         } else {
  8.                                 $x_query[] = "`t3`.`lat_ya` >= ".$value;
  9.                         }
  10.                 }              
  11.                
  12.                 $y_query        =       array();
  13.                 // строим условия для y
  14.                 foreach($y as $value){
  15.                         if (max($value,$y_center)==$value) {
  16.                                 $y_query[] = "`t3`.`lng_ya` <= ".$value;
  17.                         } else {
  18.                                 $y_query[] = "`t3`.`lng_ya` >= ".$value;
  19.                         }
  20.                 }
  21.  
  22.  


3. Далее строю запрос и получаю его 
  1.  
  2. SELECT *
  3. FROM `_perm_houses` as `t3`
  4. WHERE
  5. (
  6. `t3`.`lat_ya` >= 56.234189 AND
  7. `t3`.`lat_ya` >= 56.235627 AND
  8. `t3`.`lat_ya` <= 56.236925 AND
  9. `t3`.`lat_ya` <= 56.240583 AND
  10. `t3`.`lat_ya` <= 56.238459 AND
  11. `t3`.`lat_ya` >= 56.235348
  12. ) AND (
  13. `t3`.`lng_ya` <= 58.010264 AND
  14. `t3`.`lng_ya` >= 58.007918 AND
  15. `t3`.`lng_ya` >= 58.008186 AND
  16. `t3`.`lng_ya` >= 58.009228 AND
  17. `t3`.`lng_ya` <= 58.011346 AND
  18. `t3`.`lng_ya` <= 58.010509
  19. ) ;
  20.  
  21.  


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

Может есть какой алгоритм? Искал ни чего подобного не нашел.

За ранее благодарен.
______________________
Текст подготовлен в Редакторе Блогов от © SoftCoder.ru
  • Вопрос задан
  • 12354 просмотра
Подписаться 11 Оценить Комментировать
Ответ пользователя xdenser К ответам на вопрос (7)
@xdenser
суммируем углы между лучами (x,y)-(x1,y1) ....(x,y)-(xN,yN), где (x1,y1)… (xN,yN) координаты вершин, обходя их в том порядке в котором они связаны. (углы могут быть отрицательными)
если лежит внутри — то будет 2pi
Ответ написан