[问题] 点落在哪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