3 个版本
使用旧 Rust 2015
0.1.2 | 2017年12月6日 |
---|---|
0.1.1 | 2017年12月6日 |
0.1.0 | 2017年12月6日 |
#1358 in 数学
31KB
761 行
lib.rs
:
一系列强类型平面几何结构。
它严格区分了 "长度" 类型(点之间的距离)和 "位置" 类型(绝对点位置)。这种分离的语义是
长度 + 长度 = 长度 位置 + 长度 = 位置 长度 - 长度 = 长度 位置 - 长度 = 位置 位置 - 位置 = 长度
两种类型之间的所有其他操作均不允许。长度和位置都可以乘以标量因子。然而,当乘以任意平面变换时,它们的行为不同。具体来说,位置类型根据平移和缩放进行变换,而长度类型仅缩放但不平移。
这些类型泛型化于标量类型 T
,并带有不可见的 Unit
类型标签。不同单位类型之间的转换通过不同的变换来处理。此外,一维类型带有维度类型 D
的标签,这可以防止宽度和高度相加。
这可以工作
use planar::Width;
struct cm;
let p1: Width<f64, cm> = Width::new(10.0);
let p2: Width<f64, cm> = Width::new(100.0);
let p3 = p1 + p2;
assert_eq!(p3, Width::new(110.0));
但是这个无法编译
use planar::Width;
struct cm;
struct mm;
let p1: Width<f64, cm> = Width::new(10.0);
let p2: Width<f64, mm> = Width::new(100.0);
let p3 = p1 + p2;