5个版本 (重大变更)
0.5.0 | 2023年2月6日 |
---|---|
0.4.0 | 2023年2月5日 |
0.3.0 | 2023年2月4日 |
0.2.0 | 2023年1月25日 |
0.1.0 | 2023年1月24日 |
#763 in 数学
每月145次下载
用于 esvg
38KB
886 行
多边形库
一个用于与2D平面上的多边形交互的库。
示例
旋转多边形
use polygonical::polygon::Polygon;
use polygonical::point::Point;
let poly = Polygon::new(vec![
Point::new(0.0, 1.0),
Point::new(1.0, 1.0),
Point::new(1.0, 0.0),
]);
// get the area of the polygon
let area = poly.area();
// rotate the polygon around its own center by 90 degrees
let rotated = poly.rotate_around_center(90.0_f64.to_radians());
println!("area: {} rotated: {}", area, rotated);
创建圆的近似
use polygonical::polygon::Polygon;
use polygonical::point::Point;
let num_points = 16;
let radius = 2.0;
let center = Point::new(10.0, 20.0);
// Note: we use an integer number of degrees here because rust won't let you iterate over floats like this.
let points = (0..360).step_by(360/num_points)
.map(|a| Point::new(radius, 0.0).rotate((a as f64).to_radians()).translate(¢er))
.collect();
let circle = Polygon::new(points);
let approx_area = circle.area();
let area = std::f64::consts::PI * radius * radius;
println!("area: {} aprox_area: {} difference: {}", area, approx_area, area - approx_area);
特性
- 点
- 多边形
- 边界框
- 点的平移
- 多边形包含点
- 多边形是自相交的
- 多边形面积
- 多边形的平移
- 点的旋转
- 多边形的旋转
- 重叠检测
- 包含检测
- 多边形合并
希望的特性
我们想要实现但尚未实现的特性。
- 点的缩放
- 多边形的缩放
- 多边形减法
不希望的特性
这个库不会做的事情。
- 3D几何
- 输出到svg(那将属于另一个库)
- 坐标系转换、epsg代码、像素空间到世界空间等。
设计目标
- 正确
- 安全
- 快速
按照这个顺序
局限性/警告
多边形必须指定点按顺时针方向围绕它们。一些算法仅在点按顺时针定义时才起作用。没有检测这一点,可能会产生奇怪的结果,尚未经过测试。
依赖
~45KB