如何找到与四个已知三维坐标点距离在1.9-2.5范围内的点?
寻找满足距离约束的三维点
咱们要解决的问题很明确:给定四个三维坐标点,找到一个点,使得它到这四个输入点的距离全部处于1.9到2.5之间。下面是两组测试点(其中一组无满足条件的点,另一组存在),以及基础的距离计算代码:
基础代码与测试数据
import numpy as np dist_min = 1.9 dist_max = 2.5 # 该组无满足条件的点 input_points1 = [[ 7.57447956, 6.67658376, 10.79921475], [ 8.98026868, 7.69010703, 12.89377068], [ 6.22242062, 7.73362942, 12.87947421], [ 10.0000000, 9.00000000, 8.500000000]] # 该组存在满足条件的点 input_points2 = [[ 7.57447956, 6.67658376, 10.79921475], [ 8.98026868, 7.69010703, 12.89377068], [ 6.22242062, 7.73362942, 12.87947421], [ 6.22473072, 4.74175054, 12.96455411]] def Distance(point1, point2): return np.linalg.norm(point1 - point2)
问题本质分析
这个问题的核心是找四个空心球壳的交集:每个输入点作为球心,内半径1.9、外半径2.5的区域。如果这些球壳有共同的重叠部分,就存在满足条件的点;反之则没有。
input_points1的四个球壳没有重叠区域,所以找不到符合要求的点input_points2的四个球壳存在交集,因此存在这样的点
验证与寻找有效点的思路
你可以通过随机采样或者数值优化的方式来验证和寻找有效点,这里给出一个简单的随机采样实现:
def find_valid_point(input_points, dist_min, dist_max, num_samples=100000): # 先确定候选点的大致范围:输入点的包围盒向外扩展最大距离 points_np = np.array(input_points) min_coords = points_np.min(axis=0) - dist_max max_coords = points_np.max(axis=0) + dist_max for _ in range(num_samples): # 生成随机候选点 candidate = np.random.uniform(min_coords, max_coords) # 计算到四个输入点的距离 distances = [Distance(candidate, np.array(p)) for p in input_points] # 检查所有距离是否都在约束范围内 if all(dist_min <= d <= dist_max for d in distances): return candidate # 采样次数内没找到就返回None return None # 测试input_points2,大概率会返回一个有效点 print("找到的有效点:", find_valid_point(input_points2, dist_min, dist_max)) # 测试input_points1,会返回None print("input_points1的结果:", find_valid_point(input_points1, dist_min, dist_max))
运行这段代码,你会看到input_points2能输出一个符合要求的三维点,而input_points1则返回None,正好对应两组数据的情况。
内容的提问来源于stack exchange,提问作者Binh Thien
相关产品推荐
相关产品推荐

