《3D 数学基础》几何检测-最近点

目录

[1. 直线上的最近点](#1. 直线上的最近点)

[2. 射线上的最近点](#2. 射线上的最近点)

[3. 点到平面的距离](#3. 点到平面的距离)

[4. 圆或球上的最近点](#4. 圆或球上的最近点)

[5. AABB上的最近点](#5. AABB上的最近点)


1. 直线上的最近点

q'是距离q的最近点,也就是q在直线上的投影。

其中p是直线上的点 (向量表示),n是直线的法向量(单位向量),d是直线到原点的距离。

2. 射线上的最近点

其中p_org是起始点,d是单位向量,t是自变量,可以无限大。

(1)先求自变量t, 点乘v·d结果就是t,因为v在d方向的投影就是点乘;

(2)带入公式p(t) = p_org + td即可求得q'=p_org + (d·(q-p_org))d。

3. 点到平面的距离

其中q是平面外的点,平面公式是q·n=d. p是平面上的点,n是法向量。

注意:和直线上的最近点公式是一样的。

4. 圆或球上的最近点

已知球心c和半径r,求q在球面的投影点q' 。d是c-q,其中加粗都是向量表示的点坐标。b是q到q'.

5. AABB上的最近点

AABB(Axis-Aligned Bounding Box,轴对齐的包围盒)是一个在三维空间中常用于表示物体边界的几何形状,通常由两个对角点(最小点和最大点)定义。要找到空间中的点到AABB上的最近点,可以使用以下方法:

  1. 检查点是否在AABB内部:

    • 如果点在AABB内部,那么点本身就是AABB上的最近点。
  2. 检查点是否在AABB的某个坐标轴上的区间内:

    • 对于每个坐标轴(x、y、z),检查点的坐标是否在AABB的最小坐标和最大坐标之间。如果是,那么点在该坐标轴上的投影就是AABB上的最近点。
  3. 否则,找到点到AABB上的最近点:

    • 对于每个坐标轴,如果点的坐标小于AABB的最小坐标,则将点的坐标设置为AABB的最小坐标;如果点的坐标大于AABB的最大坐标,则将点的坐标设置为AABB的最大坐标。
    • 现在,点的坐标就分别被截断到了AABB的各个坐标轴上的区间内,这就是AABB上的最近点。
python 复制代码
import numpy as np

def closest_point_to_aabb(point, aabb_min, aabb_max):
    closest_point = np.copy(point)
    
    for i in range(len(point)):
        # Check if point coordinate is outside AABB
        if point[i] < aabb_min[i]:
            closest_point[i] = aabb_min[i]
        elif point[i] > aabb_max[i]:
            closest_point[i] = aabb_max[i]
    
    return closest_point

# 示例用法
point = np.array([2, 3, 4])  # 
# AABB
aabb_min = np.array([0, 0, 0])
aabb_max = np.array([5, 5, 5])

closest = closest_point_to_aabb(point, aabb_min, aabb_max)
print("最近点:", closest)

待续。。。

参考:35.几何检测_哔哩哔哩_bilibili

相关推荐
雨田哥8 小时前
3D 数字人的成长养成记
3d·数字人·3d数字人·陪伴·数伴·成长养成·3d数伴
天空之城--14 小时前
Claude Code 高效开发 Web 2D/3D 完全指南:心法、自定义 Skill 体系与社区技能包实战
前端·3d
清风笑烟语1 天前
rustfs 集群部署
3d
还是大剑师兰特2 天前
Unity 从零搭建简易3D场景(新手分步教程)
3d·unity·游戏引擎
EQ-雪梨蛋花汤2 天前
Android 3D 开发教程(三):Sceneform-EQR 配置 PBR 材质、光照、相机与实时阴影
android·3d·材质
弈语道破AI2 天前
3D渲染不再熬时间!即梦 Seedance 2.5 具备3D白模渲染功能的AI视频生成工具
人工智能·3d·音视频
答案—answer2 天前
VibeCoding 能做到什么程度?我用它做了一座 3D 数字博物馆
3d·ai编程·threejs·vibecoding
3D小将2 天前
3D格式转换之PROE转换为IGS格式技术
3d·格式转换·stl模型·stp模型·迪威模型网
玖玥拾2 天前
Unity3D RPG 入门项目(四)背包拖拽、物品悬浮提示、项目开发思维
3d·unity·游戏引擎
cyadyx3 天前
【Three.js】Three.js 中加载 3D 模型
前端·javascript·3d