Works · Geometric Algebra

作品

两幅由 versor-java 计算、Java 导出为 SVG 的几何代数习作。线条不是描出来的:每个顶点、每根向量都来自一次真实的多向量运算。

P3 motor 插值:一个立方体从起始位姿运动到终点位姿,九帧线框叠加。

01 · P3 / PGA3

Motor Cube

用 P3 motor 插值搬动一个立方体。起始位置用青色虚线标出,终点用橙色实线标出,中间九帧保留为轨迹; 每个顶点的位置都经过 M p ~M 计算,再做透视投影。

运算
P3.motor · P3.slerp · P3.apply
采样
9 状态 · 12 边 · 8 顶点
输出
SVG 1000×640
源码
scripts/works/GenWorks.java
E3 rotor field:圆盘上 437 根向量,按半径与极角旋转,颜色随角度变化。

02 · E3

Rotor Field

在圆盘上取规则网格,每一点的向量由转子 R = cos(θ/2) − sin(θ/2)e12 旋转, 角度随半径与极角变化。颜色表示旋转角,长度随半径衰减,整幅图是 437 次R v ~R 的结果。

运算
E3.rotor · E3.rotate
采样
437 vectors
输出
SVG 1000×640
源码
scripts/works/GenWorks.java

Generation

从多向量到一条线

Java 程序只做三件事:调用 versor-java 得到变换后的坐标,投影到画布,写成 SVG。 没有绘图库、没有浏览器端 3D,也不需要运行时依赖。重新生成:

// scripts/works/generate.sh
Multivector m = P3.motor(
    P3.rotor(0, 0, 1, Math.toRadians(155)),
    P3.translator(1.15, 0.35, 0.75));
double[] q = P3.pointCoords(
    P3.apply(m, P3.point(x, y, z)));

// E3
Multivector r = E3.rotor(0, 0, 1, theta);
double[] v = E3.coords(E3.rotate(E3.vec(1, 0, 0), r));