区块链技术博客
www.b2bchain.cn

〇、看不懂、学不会、没有用的 3D 计算几何(Swift 版)求职学习资料

D0b2wT.gif

本文介绍了〇、看不懂、学不会、没有用的 3D 计算几何(Swift 版)求职学习资料,有助于帮助完成毕业设计以及求职,是一篇很好的资料。

对技术面试,学习经验等有一些体会,在此分享。

说明

简单地说,3D 计算几何(Computational Geometry)就是计算 3D 空间中,点到直线距离,直线与平面交点等几何位置和关系的算法。对于普通开发者来说很少用到,但对于 3D/AR 开发者来说,却是经常遇到类似问题。虽然 3D 引擎一般都提供了内置的一些功能帮忙我们计算位置和姿态,但偶尔还是需要用到计算几何的知识。

本系列文章,就是讲解在工程中类似问题的解法,并提供 Swift 版代码以供参考。

基本约定

计算几何常用的数据结构是:向量、矩阵、四元数。常用的运算是:向量点乘、向量叉乘、矩阵乘法、矩阵逆运算、四元数乘法。

需要说明的是,计算几何算法通常是与左/右手系无关的,也和列主序/行主序矩阵表示方法无关。但为了简单方便,本系列代码和示意图,将使用右手系列主序矩阵(与 ARKit 中相同)。

基础知识

本系列中,我将使用 Swift 语言中的 simd 框架来表示这些数据,运算函数也是 simd 框架内置的。数据类型使用单精度浮点数Float类型。

还需要说明的是,受限于Float类型精度限制,某些解法可能存在误差,也就是说按照数学原理,点A是不在平面上的, 但按我们的算法得出点 A 在平面上(误差范围内)。对于这种情况,我们项目中一般不做处理,不花费时间精力强行保持数学正确性。

向量 Vector,点 Point

在 simd 中,我们使用simd_float3SIMD3<Float>来代表三维向量和点。它们之间的关系如图:
〇、看不懂、学不会、没有用的 3D 计算几何(Swift 版)

另外需要注意的是,当向量/点与矩阵运算时,通常会使用齐次坐标,也就是从simd_float3变成simd_float4,对于点后面需要补 1,而向量后面补 0,因为点会受到平移的影响,而向量不会:

// 点后面补 1,成为齐次坐标形式 let point3 = simd_float3(1, 1, 1) let point4 = simd_float4(point3, 1) // 向量后面补 0,成为齐次坐标形式 let vector3 = simd_float3(1, 1, 1) let vector4 = simd_float4(vector3, 0)
  • 点乘:也叫点积,函数名dot,通常用来计算两个向量夹角,是否平行/垂直,还可以计算一个向量在另一个向量方向上的投影长。
  • 叉乘:也叫叉积,函数名cross,通常用来计算两个向量的旋转轴方向,组成平面的法线,组成平行四边行的面积大小。

矩阵 Matrix

矩阵一般使用simd_float4x4matrix_float4x4,初始化的时候是将列向量一行一行写的,所以下面的矩阵其实是按列排列的:
“`swift
let _ = simd_float4x4(simd_float4(1, 0, 0, 0),//第 0 列
simd_float4(0, 2, 0, 0),//第 1 列
simd_float4(0, 0, 3, 0),
simd_float4(4, 5, 6, 1)

说明

简单地说,3D 计算几何(Computational Geometry)就是计算 3D 空间中,点到直线距离,直线与平面交点等几何位置和关系的算法。对于普通开发者来说很少用到,但对于 3D/AR 开发者来说,却是经常遇到类似问题。虽然 3D 引擎一般都提供了内置的一些功能帮忙我们计算位置和姿态,但偶尔还是需要用到计算几何的知识。

本系列文章,就是讲解在工程中类似问题的解法,并提供 Swift 版代码以供参考。

基本约定

计算几何常用的数据结构是:向量、矩阵、四元数。常用的运算是:向量点乘、向量叉乘、矩阵乘法、矩阵逆运算、四元数乘法。

需要说明的是,计算几何算法通常是与左/右手系无关的,也和列主序/行主序矩阵表示方法无关。但为了简单方便,本系列代码和示意图,将使用右手系列主序矩阵(与 ARKit 中相同)。

基础知识

本系列中,我将使用 Swift 语言中的 simd 框架来表示这些数据,运算函数也是 simd 框架内置的。数据类型使用单精度浮点数Float类型。

还需要说明的是,受限于Float类型精度限制,某些解法可能存在误差,也就是说按照数学原理,点A是不在平面上的, 但按我们的算法得出点 A 在平面上(误差范围内)。对于这种情况,我们项目中一般不做处理,不花费时间精力强行保持数学正确性。

向量 Vector,点 Point

在 simd 中,我们使用simd_float3SIMD3<Float>来代表三维向量和点。它们之间的关系如图:
〇、看不懂、学不会、没有用的 3D 计算几何(Swift 版)

另外需要注意的是,当向量/点与矩阵运算时,通常会使用齐次坐标,也就是从simd_float3变成simd_float4,对于点后面需要补 1,而向量后面补 0,因为点会受到平移的影响,而向量不会:

// 点后面补 1,成为齐次坐标形式 let point3 = simd_float3(1, 1, 1) let point4 = simd_float4(point3, 1) // 向量后面补 0,成为齐次坐标形式 let vector3 = simd_float3(1, 1, 1) let vector4 = simd_float4(vector3, 0)
  • 点乘:也叫点积,函数名dot,通常用来计算两个向量夹角,是否平行/垂直,还可以计算一个向量在另一个向量方向上的投影长。
  • 叉乘:也叫叉积,函数名cross,通常用来计算两个向量的旋转轴方向,组成平面的法线,组成平行四边行的面积大小。

矩阵 Matrix

矩阵一般使用simd_float4x4matrix_float4x4,初始化的时候是将列向量一行一行写的,所以下面的矩阵其实是按列排列的:
“`swift
let _ = simd_float4x4(simd_float4(1, 0, 0, 0),//第 0 列
simd_float4(0, 2, 0, 0),//第 1 列
simd_float4(0, 0, 3, 0),
simd_float4(4, 5, 6, 1)

说明

简单地说,3D 计算几何(Computational Geometry)就是计算 3D 空间中,点到直线距离,直线与平面交点等几何位置和关系的算法。对于普通开发者来说很少用到,但对于 3D/AR 开发者来说,却是经常遇到类似问题。虽然 3D 引擎一般都提供了内置的一些功能帮忙我们计算位置和姿态,但偶尔还是需要用到计算几何的知识。

本系列文章,就是讲解在工程中类似问题的解法,并提供 Swift 版代码以供参考。

基本约定

计算几何常用的数据结构是:向量、矩阵、四元数。常用的运算是:向量点乘、向量叉乘、矩阵乘法、矩阵逆运算、四元数乘法。

需要说明的是,计算几何算法通常是与左/右手系无关的,也和列主序/行主序矩阵表示方法无关。但为了简单方便,本系列代码和示意图,将使用右手系列主序矩阵(与 ARKit 中相同)。

基础知识

本系列中,我将使用 Swift 语言中的 simd 框架来表示这些数据,运算函数也是 simd 框架内置的。数据类型使用单精度浮点数Float类型。

还需要说明的是,受限于Float类型精度限制,某些解法可能存在误差,也就是说按照数学原理,点A是不在平面上的, 但按我们的算法得出点 A 在平面上(误差范围内)。对于这种情况,我们项目中一般不做处理,不花费时间精力强行保持数学正确性。

向量 Vector,点 Point

在 simd 中,我们使用simd_float3SIMD3<Float>来代表三维向量和点。它们之间的关系如图:
〇、看不懂、学不会、没有用的 3D 计算几何(Swift 版)

另外需要注意的是,当向量/点与矩阵运算时,通常会使用齐次坐标,也就是从simd_float3变成simd_float4,对于点后面需要补 1,而向量后面补 0,因为点会受到平移的影响,而向量不会:

// 点后面补 1,成为齐次坐标形式 let point3 = simd_float3(1, 1, 1) let point4 = simd_float4(point3, 1) // 向量后面补 0,成为齐次坐标形式 let vector3 = simd_float3(1, 1, 1) let vector4 = simd_float4(vector3, 0)
  • 点乘:也叫点积,函数名dot,通常用来计算两个向量夹角,是否平行/垂直,还可以计算一个向量在另一个向量方向上的投影长。
  • 叉乘:也叫叉积,函数名cross,通常用来计算两个向量的旋转轴方向,组成平面的法线,组成平行四边行的面积大小。

矩阵 Matrix

矩阵一般使用simd_float4x4matrix_float4x4,初始化的时候是将列向量一行一行写的,所以下面的矩阵其实是按列排列的:
“`swift
let _ = simd_float4x4(simd_float4(1, 0, 0, 0),//第 0 列
simd_float4(0, 2, 0, 0),//第 1 列
simd_float4(0, 0, 3, 0),
simd_float4(4, 5, 6, 1)

部分转自互联网,侵权删除联系

赞(0) 打赏
部分文章转自网络,侵权联系删除b2bchain区块链学习技术社区 » 〇、看不懂、学不会、没有用的 3D 计算几何(Swift 版)求职学习资料
分享到: 更多 (0)
D0b2wT.gif

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

b2b链

联系我们联系我们