/* 判斷地理圍欄是否有重合
* $points 二維陣列內含經緯度座標
* $arr 二維陣列,元素內為json格式的二維陣列
* return bool true為有重合 false為沒有重合
**/function
in_geo
(array
$points
,array
$arr)if
(empty
($arr)||
!is_array
($arr))
# 處理新資料
$new_points=[
];foreach
($points
as$k
=>$v)
# 獲取新資料的中心點
$center
=$this
->
getcenterfromdegrees
($new_points);
# 迴圈和已存在的區域中心點比對
foreach
($arr
as$key
=>
$val
)# 將陣列由近到遠排序
$arr
=$this
->
array_sort
($arr);
# 取最近的一條資料
$new_arr
=json_decode
($arr[0
]['points'],
true);
# 判斷新資料是否被包含在乙個區域中
foreach
($new_arr
as$kk
=>
$vv)
for($p=
0;$p<=
count
($points)-
1;$p++)}
# 獲取多邊形線段陣列
$arr_line
=$this
->
changeline
($new_arr);
# 獲取新資料線段陣列
$points_line
=$this
->
changeline
($points);
$num=0
;for($i
=0;$i
<=
count
($points_line)-
1;$i++)}
}return
$num
;}
[getcenterfromdegrees方法]
/* * 處理陣列刪除不必要的元素並獲取中心點座標
* $data 二維陣列
* return 陣列中必要的元素和中心點座標
* **/
function
update_array
(array
$data)}
else
else
$data[$k
][0]
=$data[$k
]['latitude'];
$data[$k
][1]
=$data[$k
]['longitude'];
unset
($data[$k
]['latitude'])
;unset
($data[$k
]['longitude'])
;}}return
$this
->
getcenterfromdegrees
($data);
}[getdistance方法]
/* * 對陣列根據距離排序
* **/
function
array_sort
(array
$data=[
])# 判斷是否為陣列if(
!is_array
($data))
for($i=
0;$i<
count
($data);
$i++)}
if($data[$i
]['range'
]<1)
else
}return
$data;}
[in_fences方法]
/* * 將多邊形拆分為多個線段演算法
* params $arr 需要進行拆解的二維陣列
* return array 返回三維陣列
* **/
function
changeline
(array
$arr)if
(count
($arr)==
1)for($i=
0;$i<
count
($arr)-
1;$i++)}
return
$data;}
//判斷兩多邊形線段是否相交
function
issegmentsintersectant
($sega
,$segb
)$cda=(
$segb[0
]['x']
-$sega[0
]['x'])*
($segb[1
]['y']
-$sega[0
]['y'])-
($segb[0
]['y']
-$sega[0
]['y'])*
($segb[1
]['x']
-$sega[0
]['x']);
$cdb
=$cda
+$abc
-$abd
;return!(
$cda
*$cdb
>=0)
;}
判斷兩個矩形是否有重合部分
最近在做人工智慧專案,需要對兩個矩形是否有重合做出判讀 但注意的是,不是判斷兩個檢測目標是否重合,檢測目標的矩形只要左上角點和右下角點就可表示乙個矩形,判斷是否重合比較簡單,但是現在是兩個矩形是有一定旋轉角度的,旋轉角度不定,這樣就沒法像檢測目標那樣判斷了。目前使用四個點座標表示乙個矩形 判斷分兩個...
php 判斷是否有環存在
如果乙個鍊錶存在迴圈,則代表該鍊錶有環,其中,可能是部分迴圈,也可能是首尾相接的迴圈鍊錶,如下圖 在後面形成環的單鏈表 首尾相接的迴圈單鏈表 解析這裡我們還需要用到快慢指標,快慢指標同時從煉表頭出發,快指標每次走2步,慢指標每次走1步,當快指標走到了末尾時,代表該鍊錶不是環形鍊錶 反之,當快指標追上...
sql 判斷兩個時間段是否有重合,是否存在交集
總結起來就一句話 最小值小於最大值並且最大值大於最小值,則一定重疊。我的使用場景 a 表 將時間有交叉的資料查出來 我的演算法 start time,end time 1 and 2 1 剔除完全相同 a1.start time a2.start time and a1.end time a2.en...