
3D数学基础图形
文章平均质量分 65
[奋斗不止]
这个作者很懒,什么都没留下…
展开
-
射线与OBB相交检测
射线与OBB相交检测原创 2022-06-28 17:10:08 · 1301 阅读 · 0 评论 -
AABB与球的相交检测、AABB到一个点最近的点
球与立方体碰撞检测using System.Collections;using System.Collections.Generic;using UnityEngine;public class OBB : MonoBehaviour { public Transform target; // 立方体的最大顶点位置 private Vector3 max; ...原创 2018-11-28 15:26:50 · 2718 阅读 · 2 评论 -
点到射线的距离、点到射线的垂点位置
首先看下图点和射线的几种位置关系求点O到射线的距离以及点O到射线上的垂点位置。其中射线方程为 P + t * rayDir,P为射线起点,rayDir 为射线方向向量一:上图第一个,点O 在射线反向延长线的一侧,向量OD 的长度 |OD| 就是点 O 到射线的距离,D点是点O到射线的垂点二:上图第二个,点O在射线正方向的一侧,向量OD 的长度 |OD| 就是点 O 到射线的距离,D点是点O到射线的垂点三:上图第三个,点O在射线正方向上,且点O在射线上,点O到射线的距离为 0,点O到.原创 2021-08-11 12:27:52 · 3041 阅读 · 5 评论 -
胶囊体与球相交检测
胶囊体是由中间一个长度为 d,半径为 r 的圆柱体和两端两个半径为 r 的半球连接在一起的3D模型,下图胶囊体的数学定义:到一条线段(上图圆柱体中心的红线)距离 小于等于 r 的所有点的集合。球的数学定义:到一个点距离小于等于 r 的所有点的集合。胶囊体与球的相交检测可以转换为点到线段的距离判断。胶囊体半径为 r1,长度为 d,圆柱体两端中心点坐标(上图红线段两端点)分别为 A、B球半径为 r2,球心坐标为 P则如果点P 到线段 AB 的距离 小于等于 r1 + r2,则球.原创 2021-08-10 15:56:25 · 1527 阅读 · 0 评论 -
平面定义-平面方程
平面定义-平面方程在3D中,平面是到两个点的距离相等的点的集合。平面完全是平的,没有厚度,且无限延伸。注意:下方粗体 p、q、n 代表点或向量平面的隐式定义由所有满足平面方程的点 p=(x, y, z)给出,平面方程的两种记法如下公式公式一ax + by + cz = dp·n = d第二个公式中 n=[a, b, c],一旦知道 n,就能用任意已知的平面上的点来计算 d。向量 n 也称作平面的法向量,因为它垂直于平面。验证:设 p 和 q 都在平面上,满足方程。将 p,q 带入公式,既原创 2021-12-28 12:27:19 · 2861 阅读 · 0 评论 -
点到平面的距离,球与平面相交检测
上图中点P到平面的距离在平面上任取一点A,连接向量 PA,过P向平面做垂线与平面相交与P',则PP'A构成一个直角三角形,PP' 的长度即为点P到平面的距离。因为 PP' 垂直于平面,平面法向量 Normal垂直于平面则 PP' || NormalPP'的长度即为向量 PA 到平面法向量Normal的投影长度则 PP' 的长度 L = |PP'| = Math.Abs(Dot(PA, Normal)),因为点乘结果有正/负两种可能,所以这里取了绝对值.原创 2021-08-08 23:45:34 · 699 阅读 · 0 评论 -
向量到一个平面的投影向量
向量到一个平面的投影向量求一个向量投影到一个平面上的投影向量,如下图已知项: 向量 sq,平面法向量 n设点 o 为点 q 到平面的垂点则向量 oq 垂直于平面则向量 so 即为 sq 在平面上的投影。so = sq + qoso = sq + (n * -1) * |qo|so = sq + (n * -1) * |sq·n|在上面的推理中对于 qo 的一步步转换是这样的因为qo 平行于 n 但是方向相反,且 n 是单位向量所以 qo = (n * -1) * |qo|因为 |q原创 2021-12-28 16:05:15 · 21076 阅读 · 0 评论 -
射线与平面相交检测
射线与平面相交检测3D 中射线与平面相交检测本篇讨论的射线是无限长,平面无限大下图展示的几种位置关系:相交、不相交相交包括:只有一个交点 (射线3)、射线在平面内有无数交点 (射线4)不相交:射线与平面平行 (射线1),射线与平面不平行也不相交 (射线2、射线5)判断射线2和射线5和平面不相交,添加辅助线如下在平面上任取一点C射线2中:P1为射线起点,向量P1A 是射线的方向向量, 连接P1C点乘:Dot(向量P1A,平面法向量 Normal) > 0点乘:Dot(向量P1C,原创 2021-08-06 20:59:49 · 1738 阅读 · 0 评论 -
射线与三角形相交检测
直观方法:判断射线是否与三角形所在的平面相交,如果相交,计算出射线与平面交点,如果交点在三角形内,则射线与三角形相交接上一篇射线与平面相交检测,在这里直接使用射线与平面相交计算出来的交点坐标,判断交点坐标是否在三角形内。判断一个点是否在三角形内,需要使用到Barycentric Coordinates(质心坐标系)质心坐标系的基本概念:几何结构中,图形中的点相对各顶点的位置,三角形中各顶点由(1, 0, 0),(0, 1, 0),(0, 0, 1)分别表示,则三角形内所有点的坐标 (...原创 2021-08-09 16:43:47 · 1557 阅读 · 0 评论 -
射线与圆、球相交检测
射线与圆、球相交检测本篇讨论2D中射线和圆的相交检测,本方法同样适用于3D中射线和球的相交检测,这是因为可以在包含射线和球心的平面中进行检测,从而将3D问题转化为2D问题。如果射线穿过球心,那么平面不是唯一的,但是不影响问题的解。下面直接降阶为 2D讨论射线与圆的相交检测。射线与圆的三种关系:相交、相切、相离其中相切是相交的特殊情况看下图,如何判断射线与圆是否相交?如果相交,如何计算交点坐标?下图中是射线与圆相交的一般情形。交点为E,其实相交时交点是两个,行切时交点是一个,我们只讨论第一个原创 2021-08-06 16:50:14 · 2154 阅读 · 0 评论 -
AABB相交检测
轴对齐矩形边界框的相交检测比较简单,下面以 min、max 表示的AABB相交判断。3D不好绘制,依然以2D为例,看下图两个 AABB: A 和 B 相交的情况,B 的 Bmax 包含在了 A 的 Amin 和 Amax 内。同理另一种情况就是 Amax 包含在了 Bmin和 Bmax 之间。判断逻辑也可以判断不相交的情况:分别判断 x、y、z 三个坐标值,Bmax.x < Bmin.x || Amin.x > Bmax.x 则不相交Bmax.y < Bmin.y.原创 2021-08-10 12:47:29 · 1400 阅读 · 0 评论 -
AABB上距离点最近的距离、AABB与球相交检测
AABB上距离点最近的距离、AABB与球相交检测AABB 即轴对其矩形边界框(每一条边都平行于坐标轴的矩形边界框),2D中为无旋转的 矩形,3D中为无旋转的六面体,长宽高可以各不相同。AABB内的点满足以下条件Xmin < X < XmaxYmin < Y < YmaxZmin < Z < Zmax两个重要的点Pmin = (Xmin, Ymin, Zmin)Pmax = (Xmax, Ymax, Zmax)中心点CC = (Pmin + Pmax)原创 2021-08-08 23:04:24 · 947 阅读 · 0 评论 -
射线与AABB相交检测
看下面三张相交情况由于3D下的图不好绘制,下面图中将3D的AABB矩形边界框投影到2D平面上来进行展示,其实3D和2D思路是相同的,只是3D是六个面,2D 是四条边。下图中颜色相同的线,3D中 红色和红色表示一组相对的平面,2D中可以表示为一组相对的边3D中 紫色和紫色表示一组相对的平面,2D中可以表示为一组相对的边下图中是射线与AABB每个矩形框所在面做相交检测的,所以每个平面是无限大的下图1:射线从P出发,在长度 t1位置进入红色平面对应的平面,在t2位置进入紫色平面对应原创 2021-08-09 21:30:02 · 3141 阅读 · 7 评论 -
OBB2D相交检测
OBB相交检测判断2D平面上两个矩形(可以旋转)是否相交。如果两个矩形 A、B 不相交,则存在至少一条直线能够将两个矩形分割在两侧。对于凸多边形依然成立。能将两个矩形分割的直线叫分离线 separatingLine、垂直于分割线的直线叫分离轴 separatingAxis如下图如何确定是否有一条能够分割两个矩形,它又在哪里。经过科学的证明如果存在能够将两个矩形分割的线,则至少有一条线是平行于两个矩形的一条边。则 separatingAxis 也平行于两个矩形的某一条边。我们只需要证明这四条线原创 2021-08-05 18:08:00 · 3021 阅读 · 3 评论 -
OBB3D相交检测
接上一篇OBB2D相交检测在2D 中是只要有一个轴、线将两个 OBB 分离到两侧就判定两个 OBB不相交在3D 中基本类似2D,但是在3D 中要将分离线替换为分离面,就是只要是找到一个面,能量两个 OBB分离在面的两侧,就说明两个OBB不相交。看下图面P平行于OBB的一个面 ABCD,面P可以将两个 OBB分离到两侧像面P这样的面理论上可以找到几个?首先平行于每个OBB六个面的,因为一个OBB的六个面是俩俩平行的,所以一个OBB可以贡献 3 个面,两个OBB可以贡献 6个面。看下..原创 2021-08-11 17:23:12 · 2097 阅读 · 2 评论