[問題] 點落在哪4個點中間

作者: kumaHL (哭馬 <( ̄︶ ̄)/)   2020-04-16 17:09:41
假設我有100個不規則的離散點
已知他們的坐標為[x1, y1], [x2, y2], ......, [x100, y100]
現在我丟一個點P[xp, yp]
有什麼現成的函式可以知道P點是落在哪4個點中間呢(假如有落在某4點中間)
若沒有的話要怎麼去實作這件事呢
謝謝大家幫忙 Q_Q
作者: sherees (ShaunTheSheep)   2020-04-16 18:06:00
建議你先釐清一下數學上的問題 你的狀況拿最外圍四個點不就可以判斷了 另外三個點就可以圍出一塊面積 為什麼四個點中間才是你要的
作者: myfirstjump (我的第一跳)   2020-04-16 19:12:00
1.你有的100個點是有規則排列的嗎?2.如果有規則,建議先造一個array,dimension是最大的範圍x_min, x_max, y_min, y_max3. array裡面塞值就依照順序編號,最後查詢array中P這個位置的值,對應過去就可以知道在哪四點中間。4.這個方法會在一開始造array時犧牲速度,之後就比較快可以讀取
作者: mikapauli (桜花)   2020-04-16 20:27:00
最單純就k-neighbor,k=4
作者: myfirstjump (我的第一跳)   2020-04-16 20:46:00
k-nearst neighbor不一定包含那一點吧,放向也要看
作者: jigfopsda (jigfopsda)   2020-04-16 20:57:00
掃一遍 array,p當原點把每個點分成四個象限取最近點每個象限各自取最近點
作者: Ryspon (Ry)   2020-04-17 03:45:00
先排序再找p落在哪個區間?
作者: robert09080 (Aspettarei)   2020-04-17 12:42:00
你的座標是二維且離散的,不能就用距離來算嗎?只有一百個點就算一百次距離,去最小的四個距離就是答案了吧
作者: ddavid (謊言接線生)   2020-04-17 13:13:00
樓上,他要的是最近「而且包圍」P的四個點我的想法是可以先找出最近且包圍的三個點(相對容易),再從剩下的點裡面找出第四個點符合要求雖然沒進行證明,不過猜想最近四包圍點中的其中三個應該就是最近三包圍點,直覺要證明應該也不難
作者: sherees (ShaunTheSheep)   2020-04-17 14:19:00
要做雙線性內差 資料點應該要為在一個矩形上但你的資料是不規則的離散點 我建議是看一下Delaunay triangulation或是其他空間內差方法修改一下第一行 資料要位在矩形的四個端點
作者: ddavid (謊言接線生)   2020-04-17 14:37:00
@jigfopsda 你的方法沒辦法,因為4點可以只落在其中兩個象限就包圍住原點了
作者: TuCH (謬客)   2020-04-17 15:26:00
要先定義最鄰近是什麼意思 面積最小 還是四點與p距離加起來最小
作者: LP9527 (ㄊㄇ抽菸都去)   2020-04-28 18:06:00
以下土炮法給你參考一,4點兩兩連線共有6條,先實作一個判斷兩點在線段同側的函數二,統計此四邊形沒連線的剩餘兩點在線的同側次數3次代表凹四邊形,4次代表凸三,凸的話,第五個點在這4次時與其他2點在同側,代表在凸四邊形內四,凹的話,請先分辨鈍角及其對角,第五點和剩餘兩點要在鈍角頂點構成的線(2條)在同側,且在頂點構成的線(2條)時,與頂點同側若不想自己做,用matplotlib的Path.contains_points即可

Links booklink

Contact Us: admin [ a t ] ucptt.com