java - 球体上距离另一点最近的点

标签 java geometry implementation

给定一个球体 S(c,r)c 为中心点 (x,y,z) r 是半径,有一个点 p(x', y', z') 位于 S 内部或外部。
我想找到 q 点,使得 q 位于 S 上,且 |pq| 最小。其中|pq|表示pq之间的欧几里得距离。

我尝试创建一条从 c 开始并穿过 p 的射线,并找到射线与球体的交点。

但是,由于我正在为这个问题实现Java代码,所以我无法一步一步解决它。你能帮我一下吗?

最佳答案

您只需标准化 vector p - c,然后乘以 r 并加上 c

Vector v = p - c; // v.x = p.x - c.x, v.y = p.y - c.y, v.z = p.z - c.z
length = v.length; // = sqrt(v.x * v.x + v.y * v.y + v.z * v.z);
v = v.normalize; //v.x = v.x / length , v.y = v.y / length, v.z = v.z / length
v = v * r // v.x = v.x * r , v.y = v.y * r, v.z = v.z * r
q = v + c // q.x = v.x + c.x, q.y = v.y + c.y, q.z = v.z + c.z

关于java - 球体上距离另一点最近的点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24173889/

相关文章:

algorithm - "Center of Mass"在环形包裹 map 上的一组点之间,最小化到所有点的平均距离

java - JAXB/MOXy : How to set which xpath impl to use?

go - 从不同的包golang实现接口(interface)

Java编辑批处理文件ECHO命令

java - 如何与java代码并行读取 Parquet 文件

java - 根据给定的字符串显示数轴

java - 如何验证字符串是否在枚举注释中

html - 通过 CSS 显示为圆形时,DIV 背景颜色小于 div 大小

javascript - 我怎样才能随着时间的推移沿着椭圆路径行进并继续无限循环?

java - 如何使用java中的列表结构确定java中当前元素之后是否存在另一个元素