- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我有以下两个输入多边形,我想为其计算减去的多边形:
答:
* (0, 8)
/ \
/ \
/ \
(-3, 0) *-------* (3, 0)
乙:
(-1, 2) *-----* (1, 2)
| |
(-1, 1) *-----* (1, 1)
因此,我想计算 A - B
,这应该会产生一个带有正方形切口的三角形。使用 Boost Polygon 计算此结果会导致带有切口的不正确的部分三角形。很难画;结果三角形的缺失部分由三角形 (3, 0) => (0, 8) => (1, 2)
表示。我正在使用以下代码来计算减法:
#include <boost/polygon/polygon.hpp>
namespace bp = boost::polygon;
int main()
{
using Polygon = bp::polygon_data<int>;
using Point = bp::point_data<int>;
using PolygonSet = bp::polygon_set_data<int>;
using SimplePolygons = std::vector<bp::polygon_data<int>>;
using namespace boost::polygon::operators;
Polygon A;
{
std::vector<Point> points{{-3, 0}, {3, 0}, {0, 8}};
bp::set_points(A, points.begin(), points.end());
}
Polygon B;
{
std::vector<Point> points{{-1, 1}, {1, 1}, {1, 2}, {-1, 2}};
bp::set_points(B, points.begin(), points.end());
}
PolygonSet result{A - B};
SimplePolygons simplePolygons;
result.get<SimplePolygons>(simplePolygons);
for (const auto& polygon : simplePolygons)
{
for (const Point& p : polygon)
{
std::cout << '(' << std::to_string(p.x()) << ", " << std::to_string(p.y()) << ")\n";
}
}
return 0;
}
这将打印构成剪切三角形的以下后续点:
(3, 0)
(1, 2)
(1, 1)
(-1, 1)
(-1, 2)
(1, 2)
(0, 8)
(-3, 0)
(3, 0)
因此,边缘 (1, 2) => (3, 0)
和 (3, 0) => (0, 8)
从结果。结果中缺少输入三角形的右上部分。
正确的输出可能如下所示:
(3, 0)
(1, 2)
(1, 1)
(-1, 1)
(-1, 2)
(1, 2)
(3, 0)
(0, 8)
(-3, 0)
(3, 0)
这是 Boost Polygon 中的错误,我是否以某种方式错误地使用了该库,还是我遗漏了什么?
一些附加信息:
double
而不是 int
参数化点类型和所有其他几何类型并不能解决问题。最佳答案
回答我自己的问题...
Boost Polygon 在编写时考虑了整数数据类型。来自文档:
In general a data type should define std::numeric_limits and be integer-like. Floating point coordinate types are not supported by all the algorithms and generally not suitable for use with the library at present (http://www.boost.org/doc/libs/1_60_0/libs/polygon/doc/gtl_coordinate_concept.htm)
我怀疑这是某种我不完全理解的精度问题。实际上,例如将所有输入坐标缩放 1000
确实会产生正确的多边形:
(3000, 0)
(1000, 5333)
(1000, 2000)
(1000, 1000)
(-1000, 1000)
(-1000, 2000)
(1000, 2000)
(1000, 5333)
(0, 8000)
(-3000, 0)
(3000, 0)
因此,对于原始输入,锁孔断裂算法似乎打算在边上添加一个新顶点 (3, 0) -> (0, 8)
从中输入 '锁孔多边形'。它可以为此创建的整数网格位置上的最佳可能顶点位于 (0, 8)
。所以结果代表一个近似值。
的确,为算法提供类似的输入,三角形边上存在一个好的候选顶点确实会产生正确的输出。例如,一个这样的输入三角形是 (-4, 0) - (4, 0) - (0, 8)
。
我认为这是锁孔压裂算法的局限性。
关于c++ - 使用 Boost Polygon 的减法结果不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47202777/
我正在尝试在使用 jOOQ (3.9.x) 时在 MySQL POLYGON 类型和 Jts Polygon 之间进行无缝转换。理想情况下,我只想将数据库中的 WKT(众所周知的文本)解析为 Jts
文档字符串说: Polygon.contains 如果几何包含另一个则返回 True,否则返回 False Polygon.within 如果几何体在另一个几何体内部则返回 True,否则返回 Fal
我有一个包含 1000 个多个重叠多边形的大型 shapefile。我试图在这些多个重叠多边形之外合并区域,这些多边形不与图层中的任何多边形重叠。这些实际上是火灾多次燃烧的区域,我正在寻找火灾仅燃烧一
我有两个问题: 1.) 我刚刚找到了 boost 1.53 Polygon 实现(在 http://www.boost.org/doc/libs/1_53_0/libs/polygon 上)并且想测试
所以我想在 javascript 中合并相邻的多边形,这就是我的代码实际拥有的内容: 我想删除内部笔划但保留边框笔划。 所以我想从这里开始: 对此: 我想保留巴黎的洞 - 我可以定义必须对哪些多边形进
我有一个 geojson 文档,我想对其执行一些 GEOS 转换,例如:计算交点、从另一个多边形中减去多边形等。 我已经能够创建 geo_types::Polygon来自文档,但无法将其转换为 GEO
我正在尝试展示纽约州 COVID 病例的增长情况 这段代码得到了我想要的情节,但没有动画或时间方面。 完整错误: Error in insert_points(polygon$x, polygon$y
我正在尝试使用多边形实现地理围栏系统。基本上,如果用户进入地理围栏区域,用户应该会收到通知。经过许多研究后,我只能使用 Circular 找到 Geofence。到目前为止,我实现了该系统,但它仅通过
所以,我做了一个棱镜: width=30 thickness=15 polyhedron( points=[ [width,0,0],[width,0,thickness],
我正在尝试在 openscad 中创建一个风扇管道,将管道从圆形展平为椭圆形。有没有办法在openscad中做到这一点?如果没有,是否还有其他编程方式来生成这种类型的 3d 模型? 谢谢 丹尼斯 最佳
我有许多多边形,每个多边形都表示为一个点列表。我正在寻找一种快速算法来遍历多边形列表并取消所有交叉边,直到没有交叉边为止。 当前版本的伪代码: While True: For each pai
我在整个互联网和科学数据库中搜索了一篇关于单调多边形的 Delaunay 三角剖分的论文。我不是在寻找任意的多边形三角剖分,而是在寻找 Delaunay 三角剖分。有人知道这样的出版物,其中单调多边形
我有一个 2D 多边形,我想将其缩小特定的偏移量 (A) 以匹配原始多边形的特定面积比 (R)。 是否有解决此类问题的公式或算法?我对三角形/四边形的简单解决方案以及复杂多边形的解决方案感兴趣。 我附
我有一个由点列表组成的二维多边形,我想检查给定点是否位于该多边形中,但我找不到检查这个的好方法。 谁能指出我正确的方向? 最佳答案 http://en.wikipedia.org/wiki/Point
在我的调查过程中,我一直试图为拟议的风力涡轮机开发找到合适的位置,通过这个我计算了合适的区域,如图 1 所示。但我仍然试图找到一种方法来计算可能的涡轮机数量位于该多边形内部,由于涡轮机不能在彼此的 6
如何从一组固定位置的多边形中选择最少数量的多边形,其并集覆盖输入多边形? 例如,让我们考虑以下输入,其中绿色多边形是查询集,蓝色多边形是查询: 正确的覆盖应该是两个多边形: 如何计算哪些多边形最有效地
我正在使用传单绘制来创建多边形。我的要求是当用户绘制多边形时,它不应与现有多边形相交/重叠。我已经使用多边形传单中的点来检测点是否落在多边形内并且它正在工作,但问题是我无法检测一条线是否穿过另一个多边
我问是否有任何特定的顺序需要输入我的坐标集以使用 Java 中的 Graphics2D 类绘制多边形。 例如,对于 X 和 Y 坐标数组,我的坐标(X,Y)的值是否需要按降序/升序排列?或者另一个例子
我正在处理 IfcFace .我得到了一个带孔的简单多边形,我需要将它转换为多个没有孔的简单多边形,以便我的 CAD 进一步处理它。一个小演示说明: 我最好的方法是进行约束德劳内三角剖分并将三角形重新
我正在使用 NLCD 数据处理一个巨大的区域,7 个州的森林和非森林。在一些森林区域内有一 block 地 block (这是我正在研究的硕士论文)。我用这个大数据集让我问过的每个人都难过,但我们确信
我是一名优秀的程序员,十分优秀!