5个版本
0.1.4 | 2023年2月26日 |
---|---|
0.1.3 | 2023年1月11日 |
0.1.2 | 2022年12月30日 |
0.1.1 | 2022年12月3日 |
0.1.0 | 2022年10月30日 |
#1375 in 数学
150KB
3K SLoC
这是一个基于几何代数的Rust编程语言的3D计算机图形库。具体来说,它实现了基于平面的投影几何代数,即具有签名P(R*3,0,1)的克利福德代数。一开始这可能听起来像是与您可能已经熟悉的线性代数相比的一种奇怪且神秘的想法。然而,你会发现它是一种更直观且强大的形式,用于描述三维欧几里得/平坦空间的操作。
让我们按相反的顺序分解我们所说的基于平面、投影和几何代数。
几何代数
在数学史中,人们常说阿拉伯人或印度人是发现零的人。对于今天拥有所有现代技术的人来说,很难完全理解使用罗马数字解二次方程的困难。在没有GPS和手机之前的生活是怎样的?更难理解的是,像古代数学家一样,没有零,就缺少了一些可以使生活变得更轻松的数字,而且这里是指字面上的意思。
大多数人知道复数是方程 x = √-1 的非实数解。较少为人所知的是 x = √1 的非实数解称为双曲数,以及 x = √0 的非实数解称为共轭数。
复数 p、双曲数 q 和共轭数 r 一起描述了一个空间 Rp,q,r。
(超)平面
投影
首先要意识到的是,为了表示三维空间的所有可能的变换,需要额外的第四维。
元素
此库导出以下基本元素
- 平面:其他所有元素都是基于这个基向量构建的
- 线:两个平面的交线
线有两种特殊情况- 分支,通过原点的线
- 地平线,无限远的线
- 点:三个平面的交点
- 转子:旋转
- 平移器:平移
- 马达:转子和平移器的组合
几何运算
会合运算 ^
(外/外积)
提升外积 ^(也称为会合、外积或外积)是双线性的,反对称的,并且扩展为可结合的。待办事项
- meet_plane_branch
- 反对称运算 meet_point_line,a^b = -b^a 结合律 (a^b)^c = a^(b^c),与自身的外积为0,平方为0,a ^ a = 0
连接运算符 &
(递归积)
级数递减 a & b = !(!a ^ !b)
收缩运算符 |
(内积/点积)
(去)相似度度量
几何积 *
ab = a|b + a^b
三明治积 a(b)
G3是一个有向代数,其中平面有两个侧面,反射平面与自身结果会交换这些侧面。a(a) = -1
一个垂直于镜面 b 的平面反射到自身:-ab^(-a) = b a(b) = aba⁻¹
对偶运算符 !
let a:Point = !plane(1.0, 0.0, 0.0, 0.0);
let p:Plane = !point(0.0, 1.0, 0.0)
let l:Line = !line(0.0, 1.0, 0.0, 0.0, 1.0, 0.0)
开始使用
待办事项
精彩链接
- 双矢量,一个包含更多几何代数信息(包括视频、软件和Discord服务器)的社区网站。
- GA4CS,计算机科学中的几何代数
- 视频
- Siggraph2019 几何代数,解释为什么以及如何使用GA的演讲。
- 软件
- 文章
- 速查表
- 愿力量与你同在:PGA中的刚体动力学
- 3DPGA积的几何
- PGA Easy
- 自动微分
- 带有CGA的论文
- 投影几何代数的新发展
- 力矩
- 空间 & 反空间
- 通过投影几何代数的有理三角学
- Alan Macdonald视频
- 几何演算讲座
- 讲座播放列表
- 基于TensorFlow的几何代数框架
- QED先决条件几何代数:介绍和动机
- 微型光线追踪器 - 遵循Ted Corcovilos和Katelyn Spadavecchia的“PGA的傍轴光学”
https://hamishtodd1.substack.com/p/a-clifford-algebra-encompassing-rotations https://enki.ws/ganja.js/examples/coffeeshop.html#ydDtaGu0a https://www.cs.jhu.edu/~misha/Fall09/Pinkall93.pdf https://enki.ws/ganja.js/examples/coffeeshop.html#0ZJ_tVsy9 https://twitter.com/EricLengyel/status/1627197102924369920/photo/1
依赖
~0–15MB
~204K SLoC