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
Works · Geometric Algebra
两幅由 versor-java 计算、Java 导出为 SVG 的几何代数习作。线条不是描出来的:每个顶点、每根向量都来自一次真实的多向量运算。
01 · P3 / PGA3
用 P3 motor 插值搬动一个立方体。起始位置用青色虚线标出,终点用橙色实线标出,中间九帧保留为轨迹; 每个顶点的位置都经过 M p ~M 计算,再做透视投影。
02 · E3
在圆盘上取规则网格,每一点的向量由转子 R = cos(θ/2) − sin(θ/2)e12 旋转, 角度随半径与极角变化。颜色表示旋转角,长度随半径衰减,整幅图是 437 次R v ~R 的结果。
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));