Clipper.js不使用一组坐标



我正在尝试从clipper.js库中调整"简化多边形"函数。我不确定我是否理解以下脚本有什么问题:

var five_pointed_star = [{
"X": 114.11152626295,
"Y": 22.213863709855
}, {
"X": 114.11262775355,
"Y": 22.214272283475
}, {
"X": 114.1133008867,
"Y": 22.214885143905
}, {
"X": 114.1133008867,
"Y": 22.21619257949
}, {
"X": 114.11164865079,
"Y": 22.216233436852
}, {
"X": 114.11152626295,
"Y": 22.213863709855
}];
var ten_pointed_star = ClipperLib.Clipper.SimplifyPolygon(five_pointed_star, ClipperLib.PolyFillType.pftNonZero);
console.log(ten_pointed_star);

但是,如果我将five_pointed_star更改为以下内容,则代码将按预期工作:

var five_pointed_star = [{
"X": 147,
"Y": 313
}, {
"X": 247,
"Y": 34
}, {
"X": 338,
"Y": 312
}, {
"X": 86,
"Y": 123
}, {
"X": 404,
"Y": 124
}];

知道我做错了什么吗?

多边形使用路径作为参数,路径在文档中具有以下定义:

此结构包含定义单个轮廓的 IntPoint 顶点序列(另请参阅术语)。路径可以是开放的,表示由 2 个或更多顶点限定的一系列线段,也可以是闭合的并表示多边形。路径是否打开取决于上下文。封闭路径可以是"外"轮廓或"孔"轮廓。它们是什么取决于方向。

IntPoint写道:

IntPoint 结构用于表示 Clipper 库中的所有顶点。

所以这意味着你需要给它的数字必须是整数 - 而你试图使用浮点数,简称浮点数。 因此,如果您使用 Integers,它应该始终正常工作,如果您的计算返回浮点数,您可以使用 floor() 等舍入方法来删除点后面的值。

最新更新