3 个版本

使用旧 Rust 2015

0.1.2 2017年12月6日
0.1.1 2017年12月6日
0.1.0 2017年12月6日

#1358 in 数学

MIT/Apache

31KB
761

Build Status Crates.io License Documentation


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;

无运行时依赖