Gistrec

Пересечение регионов

Jul 17th, 2018
292
0
Never
1
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 2.33 KB | None | 0 0
  1. <?php
  2.  
  3. $chunk = array(
  4.     'min' => array(
  5.         'x' => 16,
  6.         'y' => 16
  7.     ),
  8.     'max' => array(
  9.         'x' => 32,
  10.         'y' => 32
  11.     )
  12. );
  13.  
  14. // Тесты:
  15. // 1. Чанк и приват не пересекаются
  16. // 2. Чанк внутри привата
  17. // 3. Приват внутри чанка
  18. // 4. Приват и чанк пересекаются уголочком
  19. $tests = array(
  20.     1 => array(
  21.         'min' => array('x' => 0, 'y' => 0),
  22.         'max' => array('x' => 1, 'y' => 1),
  23.         'result' => false
  24.     ),
  25.     2 => array(
  26.         'min' => array('x' =>  0, 'y' =>  0),
  27.         'max' => array('x' => 64, 'y' => 64),
  28.         'result' => true
  29.     ),
  30.     3 => array(
  31.         'min' => array('x' => 20, 'y' => 20),
  32.         'max' => array('x' => 26, 'y' => 26),
  33.         'result' => true
  34.     ),
  35.     4 => array(
  36.         'min' => array('x' =>  0, 'y' =>  0),
  37.         'max' => array('x' => 20, 'y' => 20),
  38.         'result' => true
  39.     ),
  40. );
  41.  
  42.  
  43. /**
  44.  * Тестируем функцию для проверки пересечения регионов
  45.  **/
  46. function check(array $region, array $chunk) : bool {
  47.     if ($region['max']['y'] > $chunk['min']['y'] &&
  48.         $region['max']['x'] > $chunk['min']['x'] &&
  49.         $region['min']['y'] < $chunk['max']['y'] &&
  50.         $region['min']['x'] < $chunk['max']['x'])
  51.     {
  52.         return true;
  53.     }else {
  54.         return false;
  55.     }
  56. }
  57.  
  58.  
  59. $fail_test = 0;
  60.  
  61. foreach ($tests as $num => $test) {
  62.     if ($test['result'] == check($test, $chunk)) {
  63.         echo "Test $num passed!" . PHP_EOL;
  64.     }else {
  65.         echo "Test $num NO passed!" . PHP_EOL;
  66.         $fail_test++;
  67.     }
  68. }
  69.  
  70. if ($fail_test > 0) {
  71.     echo "Not all tests were successful!";
  72.     die();
  73. }
  74.  
  75.  
  76. /**
  77.  * Тестируем функцию для получения координат, по которым пересекаются регионы
  78.  **/
  79. function getIntersection(array $region, array $chunk) : array {
  80.     $result = array(
  81.         'min' => array(
  82.             'x' => max($region['min']['x'], $chunk['min']['x']),
  83.             'y' => max($region['min']['y'], $chunk['min']['y'])
  84.         ),
  85.         'max' => array(
  86.             'x' => min($region['max']['x'], $chunk['max']['x']),
  87.             'y' => min($region['max']['y'], $chunk['max']['y'])
  88.         )
  89.     );
  90.     if ($result['min']['x'] > $result['max']['x']) {
  91.         $result = array();
  92.     }elseif ($result['min']['y'] > $result['max']['y']) {
  93.         $result = array();
  94.     }
  95.     return $result;
  96. }
  97.  
  98. foreach ($tests as $num => $test) {
  99.     var_dump($num, getIntersection($test, $chunk));
  100. }
  101.  
  102. ?>
Advertisement
Comments
  • User was banned
Add Comment
Please, Sign In to add comment