boost::voronoi 的高精度坐标问题

问题描述 投票:0回答:1

在尝试

voronoi_advanced_tutorial.cpp
更高精度的坐标时,我注意到我的输出图之一出现了数学错误(显然)。但是,使用默认坐标(
int
输入和
double
输出)时,图表不会出现此类错误。

默认int和double坐标系。

下图显示了一组输入边沿(黑色)的输出图主边沿(橙色)。一切看起来都很好。 enter image description here

高精度坐标系。

一旦我更改为

boost::int64_t
输入和
long double
输出,图表就会显示一些错误。据我了解,它与右内矩形有关。只有内部左侧和外部矩形有效。然而,一旦我插入正确的一个,它就会失败。 enter image description here

我无法弄清楚是什么导致了问题,并且

int_type
ftp_type
的转换似乎是正确的。我还将多边形形状远离 0 坐标 - 即
(0,0)
->
(100,100)
- 但问题仍然存在(至少在视觉上“更好”)。对于这个问题要寻找什么有什么建议吗?

您可以通过 Wandbox 找到完整代码。我尝试过 GCC 11.1.0、10.2.0 和 9.3.0,以及 boost 1.75.0 和 1.77.0。

编辑:高精度坐标系图上,第四个是第一个配置的缩放(即外部矩形和两个内部矩形)。我已经使用紫色箭头来尝试指示这种“缩放”。在实践中,我删除了那些“爆炸”的点,从而使第一个图变得不可读。

c++ boost voronoi
1个回答
0
投票

我相信该库在内部查看该类型的 std::numeric_limits::max 。 我找不到该代码,但我猜它一定在某些包含的标头中。

由于 max 更大,其他内部数据类型的大小也需要扩展 - int_x2_type、uint_x2_type 和 big_int_type。 big_int_type 特别需要是

huuuuge

- 默认为 2048 位(64*32),根据我的实验,在某些情况下它需要那么大,即使输入和输出都是很小的数字。

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.