是否可以为裁剪器路径提供浮动值

Is that possible to give floating values to the clipper Paths

本文关键字:路径 裁剪 是否      更新时间:2023-10-16

Clipper 接受整数输入,但我想在不丢失精度的情况下传递浮点值。 整数和双精度值的裁剪器结构。

struct IntPoint {
cInt X;
cInt Y;
#ifdef use_xyz
cInt Z;
IntPoint(cInt x = 0, cInt y = 0, cInt z = 0): X(x), Y(y), Z(z) {};
#else
IntPoint(cInt x = 0, cInt y = 0): X(x), Y(y) {};
#endif
friend inline bool operator== (const IntPoint& a, const IntPoint& b)
{
return a.X == b.X && a.Y == b.Y;
}
friend inline bool operator!= (const IntPoint& a, const IntPoint& b)
{
return a.X != b.X  || a.Y != b.Y; 
}
};
struct DoublePoint
{
double X;
double Y;
DoublePoint(double x = 0, double y = 0) : X(x), Y(y) {}
DoublePoint(IntPoint ip) : X((double)ip.X), Y((double)ip.Y) {}
};

为什么它不将双精度值作为输入。

Paths Polygon(2);
Polygon[0] << IntPoint(10, 10) << IntPoint(60, 10) << IntPoint(30, 100) ;
Polygon[1] << IntPoint(20, 20) << IntPoint(50, 20) << IntPoint(30, 80)  ; //it Works

Paths Line(1);
line[0] << DoublePoint(40.2, 10.2) << DoublePoint(56.5, 85.45); //Not works

Clipper 仅使用整数点类型。

IntPoint 结构用于表示 Clipper 库中的所有顶点。特意选择了整数存储类型以保持数值鲁棒性。(该库的早期版本使用浮点坐标,但很明显,浮点不精确总是会导致偶尔的错误。[来源]

但是,您可以按所需因子缩放输入坐标。

所以不是想要这个,(不存在(

line[0] << DoublePoint(40.2, 10.2) << DoublePoint(56.5, 85.45); //Not works

可以按 100 缩放。

line[0] << IntPoint(4020, 1020) << IntPoint(5650, 8545); //works

只需记住将输出坐标缩放 0.01 以返回到坐标系。