9个不稳定版本 (3个破坏性)

0.3.0 2022年4月24日
0.2.5 2022年3月28日
0.1.0 2022年3月28日
0.0.0 2022年3月28日

#1752 in 数学

Download history 29/week @ 2024-04-07 34/week @ 2024-04-14 45/week @ 2024-04-21 33/week @ 2024-04-28 34/week @ 2024-05-05 38/week @ 2024-05-12 43/week @ 2024-05-19 48/week @ 2024-05-26 34/week @ 2024-06-02 21/week @ 2024-06-09 45/week @ 2024-06-16 32/week @ 2024-06-23 8/week @ 2024-06-30 30/week @ 2024-07-07 39/week @ 2024-07-14 26/week @ 2024-07-21

每月103次下载
15 个crates中(2个直接) 使用

MPL-2.0 许可证

13KB
176

射影变换

use projective::Projective;

#[derive(Debug, Copy, Clone, PartialEq)]
pub struct Point(f64, f64);

#[rustfmt::skip]
impl Projective<f64> for Point {
    fn transform(&self, matrix: &[&f64; 9]) -> Self {
        Point(
            matrix[0] * self.0 + matrix[1] * self.1 + matrix[2],
            matrix[3] * self.0 + matrix[4] * self.1 + matrix[5],
        )
    }
}

#[test]
fn test_transform() {
    let p0 = Point(1.0, 2.0);
    assert_eq!(p0.translate(&2.0, &1.0), Point(3.0, 3.0));
    assert_eq!(p0.scale(&2.0, &3.0), Point(2.0, 6.0));
    // floating precision error, implement rotate manually to reduce errors
    assert_eq!(p0.rotate(&std::f64::consts::PI), Point(-0.9999999999999998, -2.0));
}

依赖关系

~150KB