如何高效筛选位于两条直线界定的指定区域内的点?
问题:筛选位于指定区域内的点
我有以下点配置:
import numpy as np T=np.array([9,9]) X1=np.array([8,16]) X2=np.array([16,3]) points=np.array([[4, 15], [13,17], [2, 5], [16,8]])
该配置的点分布:点T坐标为(9,9),X1为(8,16),X2为(16,3),另有四个待判断点;黄色区域为目标区域,始终处于点X1和X2相对于点T的对侧。
给定T、X1和X2,我希望找出points数组中所有位于黄色区域内的点,该黄色区域始终处于点X1和X2的对侧(相对于点T所在的两条直线)。请问如何通过简单高效的方式实现这一需求?
编辑1:尝试的解决方案(存在错误)
我尝试了如下代码:
T=np.array([9,9]) X1=np.array([10,2]) X2=np.array([2,15]) points=np.array([[2, 5]]) valid_points = list() # 计算过T、X1的直线方程y = mx + b slope1 = np.diff(list(zip(T, X1))) m1 = np.divide(slope1[1], slope1[0]) b1 = T[1] - m1*T[0] # 计算过T、X2的直线方程y = mx + b slope2 = np.diff(list(zip(T, X2))) m2 = np.divide(slope2[1], slope2[0]) b2 = T[1] - m2*T[0] for point in points: # 检查点是否在两条直线下方 for m, b in (m1, b1), (m2, b2): if point[1] > m*point[0] + b: break else: # 仅当两个检查都通过时添加 valid_points.append(point) print(valid_points)
对应的点配置:点T为(9,9),X1为(10,2),X2为(2,15),待判断点为(2,5),目标区域位于X1和X2相对于T的对侧。
上述代码返回[2,5],但正确结果应为[],因为该点不在目标区域内,说明此方案存在错误。
内容的提问来源于stack exchange,提问作者Optical_flow_lover
相关产品推荐
相关产品推荐

