《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

相关推荐
Martina_032114 小时前
AI生成的过山车轨道导入后频繁脱轨?用5步检查样条、轨距与碰撞
图像处理·人工智能·游戏·3d·材质·游戏策划·关卡设计
Martina_032114 小时前
AI生成的模块场景一烘焙就有黑边?用6步检查Lightmap UV、纹素密度与Padding
人工智能·游戏·3d·aigc·uv·游戏策划·关卡设计
西红柿炖牛腩35417 小时前
Web3D 加载卡顿:GLB 几何重、贴图大、格式散,本地 3D 模型压缩怎么选
3d·贴图
熊猫钓鱼>_>18 小时前
从2D平铺到3D沉浸:我用HarmonyOS 7端侧AI做了一个全程数据不出设备的空间化私密相册
前端·人工智能·3d·华为·华为云·harmonyos·鸿蒙
Martina_032118 小时前
AI生成的盔甲换动作后漂移?用6步检查挂点、骨架映射与 Bind Pose
人工智能·游戏·3d·ai·自然语言处理·aigc·游戏策划
创世虚拟世界1 天前
从零打通 MCP 访问创世虚拟世界CRM的 3D 数据,我搭了一个可直接调用的演示站
3d
李游Leo2 天前
HarmonyOS 7 + Spatial Recon Kit-C++:3DGS 高斯参数的非有限值隔离与可渲染性门禁【鸿蒙心迹】
开发语言·c++·3d·harmonyos
迁移科技2 天前
小体积蕴含大能量:Epic Eye Pixel Mini轻量化相机的应用美学
人工智能·3d·自动化·视觉检测
Martina_03212 天前
同一片森林换个镜头就忽冷忽暖?用6步统一曝光、LUT与相机后处理
人工智能·游戏·数学建模·3d·自然语言处理·aigc·游戏策划
Better Bench2 天前
奇异值分解(SVD)在3D骨骼旋转中的应用:原理与实现
3d·人体姿态估计·骨骼关键点