《3D 数学基础》12 几何图元

这篇具有很好参考价值的文章主要介绍了《3D 数学基础》12 几何图元。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

1. 直线、线段和射线

1.1 直线

1.2 射线

2. 球

3. AABB

4. 平面

5. 三角形

6. 多边形


1. 直线、线段和射线

经典定义

《3D 数学基础》12 几何图元,3D数学基础,3d

 书中对射线定义做了修改:有向线段。

《3D 数学基础》12 几何图元,3D数学基础,3d

1.1 直线

 算法定义

Class line3D
{
public: 
    Vector3D origin;  // 直线中的两个点表示该直线,其中这两个点用3d向量表示
    Vector3D end;
    //成员函数
}

1.2 射线

《3D 数学基础》12 几何图元,3D数学基础,3d

p0是起始点,d是方向向量,单位向量。 自变量是t,可以很大超过1. p(0)=p0. p(2)=p0+2d;

算法实现

Class rayLine3D
{
public: 
    Vector3D rayOrigin;  // p0, 射线起始点,用3d向量表示
    Vector3D rayDelta;   // d,一般是单位向量。
    //成员函数
}

2. 球

《3D 数学基础》12 几何图元,3D数学基础,3d

 其中||p - c|| = r是球面公式,D=2r是直径,C是过球心切面的周长,A是切面面积。

S是球面面积,V是球体积。

《3D 数学基础》12 几何图元,3D数学基础,3d

 向量表示的点p到球心c的距离为给定距离r的点的集合,p为球面上点。另一种表示法:

《3D 数学基础》12 几何图元,3D数学基础,3d

算法实现

class Sphere
{
public:
    Vector3D center;  // 用一个球心和半径表示球
    float radius;
};

3. AABB

《3D 数学基础》12 几何图元,3D数学基础,3d

AABB有8个顶点坐标,AABB内部点坐标都在[xmin,ymin,zmin]和[xmax,ymax,zmax]内部;

Pmin是坐标值最小的, Pmax是坐标值最大的;

c是AABB中心;

s是AABB的大小,使用向量表示;

r是AABB的大小的一半。

算法实现

class AABB3
{
	Vector3 min;
	Vector3 max;

	Vector3 size() const (return max - min;);
	float xSize() { return max.x - min.x; };
	float xSize() { return max.x - min.x; };
	float xSize() { return max.x - min.x; };
	Vector3 center() { return (min + max) * 0.5f; };

	Vector3 corner(int i) const;  // 返回其中一个顶点
};

Vector3 Vector3::corner(int i) const
{
	assert(i >= 0);
	assert(i <= 7);
	if (i == 0) return Vector3(min.x, min.y, min.z);  // 左手坐标系
	if (i == 1) return Vector3(max.x, min.y, min.z);
	if (i == 2) return Vector3(min.x, max.y, min.z); 
	//...
}

4. 平面

《3D 数学基础》12 几何图元,3D数学基础,3d

定义:点p到空间中的两个点q和r之间的距离相等的点的集合,组成的就是平面;

(1)使用两个向量pn表示,p·n=d,如下。

《3D 数学基础》12 几何图元,3D数学基础,3d

其中向量p是平面上的任一点,n是单位向量(平面的法向量),两者向量点乘就是ax+by+cz=d;

d是平面到原点的距离。

平面的正面是法向量的方向。

《3D 数学基础》12 几何图元,3D数学基础,3d

(2)另一种定义平面常见做法是,使用平面上3个点p1,p2,p3,如下。

《3D 数学基础》12 几何图元,3D数学基础,3d

 方向问题,是使用左手法则,大拇指指向法向量方向,其他指头的弯曲方向就是p1->p2->p3.

(3)多个点拟合一个最佳平面,先求法向量(nx,ny,nz),再求d即可,加上平面上的点p(x,y,z),则表示位pn=d;

《3D 数学基础》12 几何图元,3D数学基础,3d

(4)点到平面的距离a = qn - d

《3D 数学基础》12 几何图元,3D数学基础,3d

 这样求点到平面的距离,只需要直到该点本身q,单位向量n和d即可。不需要求p.

5. 三角形

使用三个顶点表示三角形。

(1)边长和周长

《3D 数学基础》12 几何图元,3D数学基础,3d

(2)正弦公式,正弦值和对面的边长比例

《3D 数学基础》12 几何图元,3D数学基础,3d

(3)余弦公式

《3D 数学基础》12 几何图元,3D数学基础,3d

(4) 面积

(1)已知底b和高h,则A = bh/2;

(2)已知边长,则使用海伦公式;

(3)只是知道三个顶点,则使用任意两条边向量的叉乘/2。

《3D 数学基础》12 几何图元,3D数学基础,3d

 两条边叉乘的模长是平行四边形的面积。

6. 多边形

《3D 数学基础》12 几何图元,3D数学基础,3d

(1) 简单多边形,是内部没有点,按顺时针将边界点存储即可;

(2)复杂多边形,是内部有洞的,可以插入一个缝隙,使其变成简单多边形,再按顺时针访问边界点即可。

《3D 数学基础》12 几何图元,3D数学基础,3d

 (3)凸多边形和凹多边形

《3D 数学基础》12 几何图元,3D数学基础,3d

所有的内角都小于180度,则是凸多边形 。

参考:30.几何图元_哔哩哔哩_bilibili文章来源地址https://www.toymoban.com/news/detail-643127.html

到了这里,关于《3D 数学基础》12 几何图元的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Unity3D学习之Unity基础——3D数学

    从这几部分学习 都是用于提供数学计算的 Mathf是结构体,Math是类 Mathf是Math的第二次封装,更适合游戏开发 2.1.1 PI Π PI 2.1.2 取绝对值 Abs 2.1.3 向上取整 CeilToInt 2.1.4 向下取整 FloorToInt 2.1.5 钳制函数 Clamp 第一个参数,如果在第二个和第三个参数之间,就是合法的 如果小于第二个参

    2024年02月20日
    浏览(76)
  • Web3D数学基础(平移、旋转、缩放矩阵)—WebGL、WebGPU、Threejs

    参考资料:threejs中文网 threejs qq交流群:814702116 本下节课给大家介绍下矩阵的概念,以及用于几何变换的矩阵,比如平移矩阵、缩放矩阵、旋转矩阵。 如果你对这些几何变换的矩阵概念比较熟悉,可以跳过本节课。 线性代数、图形学 如果你有《线性代数》、《计算机图形学

    2024年02月03日
    浏览(41)
  • 人工智能中数学基础:线性代数,解析几何和微积分

    在人工智能领域,线性代数、解析几何和微积分是最基础的数学知识。这些数学知识不仅在人工智能领域中被广泛应用,也是其他领域的重要基础。本文将介绍人工智能中的线性代数、解析几何和微积分的基础知识和应用。

    2024年02月16日
    浏览(36)
  • d3d12龙书阅读----绘制几何体(上)

    本节主要介绍了构建一个简单的彩色立方体所需流程与重要的api 下面主要结合立方体代码分析本节相关知识 输入装配器阶段的输入 首先,我们需要定义立方体的八个顶点 顶点结构体: 当然,对于更复杂的情况,我们不仅要定义顶点的位置与颜色,还要包括法线向量、纹理

    2024年03月27日
    浏览(48)
  • 深度学习·理论篇(2023版)·第002篇深度学习和计算机视觉中的基础数学知识01:线性变换的定义+基于角度的线性变换案例(坐标变换)+点积和投影+矩阵乘法的几何意义+图形化精讲

    💕 恭喜本博客浏览量达到两百万,CSDN内容合伙人,CSDN人工智能领域实力新星~ 🧡 本文章为2021版本迭代更新版本,在结合有效知识的基础上对文章进行合理的增加,使得整个文章时刻顺应时代需要 🧡 本专栏将通过系统的深度学习实例,从可解释性的角度对深度学习的原理

    2023年04月08日
    浏览(43)
  • 有趣的数学 数学建模入门二 一些理论基础

             现实世界中混乱的问题可以用数学来解决,从而产生一系列可能的解决方案来帮助指导决策。大多数人对数学建模的概念感到不舒服,因为它是如此开放。如此多的未知信息似乎令人望而却步。哪些因素最相关?但正是现实世界问题的这种开放性导致了解决问题

    2024年02月10日
    浏览(31)
  • 轻量封装WebGPU渲染系统示例<12>- 基础3D对象实体(源码)

    此混合渲染与计算系统中,用户侧可直接接触和操作可渲染(计算)实体(Entity)。这些实体可以用于呈现画面效果也可以仅用于计算。实体可以加入场景,可以加入渲染核心,也可以加入计算核心。如果使用rendering or computing pass node,也可以直接将渲染实体加入对应的pass node。

    2024年02月05日
    浏览(28)
  • 人工智能基础部分24-人工智能的数学基础,汇集了人工智能数学知识最全面的概况

    、 大家好,我是微学AI,今天给大家介绍一下人工智能基础部分24-人工智能的数学基础,汇集了人工智能数学知识最全面的概况,深度学习是一种利用多层神经网络对数据进行特征学习和表示学习的机器学习方法。要全面了解深度学习的数学基础,需要掌握这些数学知识:向

    2024年02月21日
    浏览(51)
  • 第一章 数学基础

    理解范数概念 区分向量的内积 a ⋅ b mathbf{a} cdot mathbf{b} a ⋅ b 与外积 a × b mathbf{a} times mathbf{b} a × b 区分矩阵的乘法 A ⊗ B mathbf{A} otimes mathbf{B} A ⊗ B 、内积 A B mathbf{A} mathbf{B} AB 、哈达玛积 A ⊙ B mathbf{A} odot mathbf{B} A ⊙ B 向量 向量是一组标量排列而成的,只有一个

    2024年02月06日
    浏览(39)
  • UnityShader(三)数学基础

    目录 前言 一、笛卡尔坐标系(Cartesian Coordinate System) 1.二维笛卡尔坐标系 2.三维笛卡尔坐标系 2.1.左手坐标系(left-handed coordinate space) 判断左手坐标系的方法: 判断左手坐标系的正向旋转(左手法则【left-hand rule】) 2.2.右手坐标系(right-handed coordinate space) 判断右手坐标

    2024年02月03日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包