Вам бонус- начислено 1 монета за дневную активность. Сейчас у вас 1 монета

Функция скрипт на PHP для определения попадания точки в многоугольник

Практика




Функция скрипт на PHP для определения попадания точки в многоугольник
множите привести пример готового решения?

class Polygon
{

protected $polygon = array();


public function PointInPoligon($arrpoint, $arrpoligonpoints)
{
$this->set_polygon($this->convert_arr($arrpoligonpoints));

return $this->calc($arrpoint);
}

public function convert_arr($points)
{
if (count($points) < 6)
return false;

$polygon = array();

foreach ($points as $key=>$point)
{
if ($key%2 == 0) ;else $polygon[] = array($points[$key-1], $points[$key ]);

}

return $polygon;
}

/**
* Polygon itself, with basic vector-based structure
* Array: [ [1,1], [2,1], [3,0], [2,-1] ]
*
* @var $polygon array
*/

public function set_polygon($polygon)
{
if (count($polygon) < 3)
return false;
if (!isset($polygon[0]['x']))
{
foreach ($polygon as &$point)
{
$point = array('x' => $point[0], 'y' => $point[1]);
}
}
$this->polygon = $polygon;
}

/**
* Check if $polygon contains $test value
*
* @var $test array(x=>decimal, y=>decimal)
*/

public function calc($test)
{
$q_patt = array(array(0, 1), array(3, 2));
$end = end($this->polygon);
$pred_pt = end($this->polygon);
$pred_pt['x'] -= $test['x'];
$pred_pt['y'] -= $test['y'];
$pred_q = $q_patt[$pred_pt['y'] < 0][$pred_pt['x'] < 0];
$w = 0;
for ($iter = reset($this->polygon); $iter !== false; $iter = next($this->
polygon))
{
$cur_pt = $iter;
$cur_pt['x'] -= $test['x'];
$cur_pt['y'] -= $test['y'];
$q = $q_patt[$cur_pt['y'] < 0][$cur_pt['x'] < 0];
switch ($q - $pred_q)
{
case - 3:
++$w;
break;
case 3:
--$w;
break;
case - 2:
if ($pred_pt['x'] * $cur_pt['y'] >= $pred_pt['y'] * $cur_pt['x'])
++$w;
break;
case 2:
if (!($pred_pt['x'] * $cur_pt['y'] >= $pred_pt['y'] * $cur_pt['x']))
--$w;
break;
}
$pred_pt = $cur_pt;
$pred_q = $q;
}

return $w != 0;
}

}

$p = new Polygon();
$good = array(
350,
180,
280,
380,
520,
350,
600,
170);

$p->PointInPoligon(array(x => 65, y =>567),$goodl)


ВОТ ПРИМЕР http://my-city.com.ua/online/
создано: 2013-08-10
обновлено: 2021-03-13
388



Рейтиг 10 of 10. count vote: 2
Вы довольны ?:


Поделиться:

Найди готовое или заработай

С нашими удобными сервисами без комиссии*

Как это работает? | Узнать цену?

Найти исполнителя
$0 / весь год.
  • У вас есть задание, но нет времени его делать
  • Вы хотите найти профессионала для выплнения задания
  • Возможно примерение функции гаранта на сделку
  • Приорететная поддержка
  • идеально подходит для студентов, у которых нет времени для решения заданий
Готовое решение
$0 / весь год.
  • Вы можите продать(исполнителем) или купить(заказчиком) готовое решение
  • Вам предоставят готовое решение
  • Будет предоставлено в минимальные сроки т.к. задание уже готовое
  • Вы получите базовую гарантию 8 дней
  • Вы можете заработать на материалах
  • подходит как для студентов так и для преподавателей
Я исполнитель
$0 / весь год.
  • Вы профессионал своего дела
  • У вас есть опыт и желание зарабатывать
  • Вы хотите помочь в решении задач или написании работ
  • Возможно примерение функции гаранта на сделку
  • подходит для опытных студентов так и для преподавателей

Комментарии


Оставить комментарий
Если у вас есть какое-либо предложение, идея, благодарность или комментарий, не стесняйтесь писать. Мы очень ценим отзывы и рады услышать ваше мнение.
To reply

Выполнение скриптов на стороне сервера PHP (LAMP) NodeJS (Backend)

Термины: Выполнение скриптов на стороне сервера PHP (LAMP) NodeJS (Backend)