#几何 #图形

nightly g3

基于几何代数的计算机图形库

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 数学

ISC许可证

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)

开始使用

待办事项

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