voronoi_advanced_tutorial.cpp
更高精度的坐标时,我注意到我的输出图之一出现了数学错误(显然)。但是,使用默认坐标(int
输入和 double
输出)时,图表不会出现此类错误。
下图显示了一组输入边沿(黑色)的输出图主边沿(橙色)。一切看起来都很好。
一旦我更改为
boost::int64_t
输入和 long double
输出,图表就会显示一些错误。据我了解,它与右内矩形有关。只有内部左侧和外部矩形有效。然而,一旦我插入正确的一个,它就会失败。
我无法弄清楚是什么导致了问题,并且
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。
编辑:在高精度坐标系图上,第四个是第一个配置的缩放(即外部矩形和两个内部矩形)。我已经使用紫色箭头来尝试指示这种“缩放”。在实践中,我删除了那些“爆炸”的点,从而使第一个图变得不可读。
我相信该库在内部查看该类型的 std::numeric_limits::max 。 我找不到该代码,但我猜它一定在某些包含的标头中。
由于 max 更大,其他内部数据类型的大小也需要扩展 - int_x2_type、uint_x2_type 和 big_int_type。 big_int_type 特别需要是
huuuuge- 默认为 2048 位(64*32),根据我的实验,在某些情况下它需要那么大,即使输入和输出都是很小的数字。