c++ - 如何渲染一个顶点尽可能少的圆?

标签 c++ math geometry

我想弄清楚如何确定我需要多少顶点才能使我的圆看起来尽可能平滑。

这是两个圆的例子,都有 24 个顶点: enter image description here

如您所见,圆越大,隐藏直线所需的顶点就越多。

起初我认为边缘上的一条线的最小长度应该是 6px,但是当我增加圆的大小时,这种方法失败了:我得到了太多的顶点。我也考虑过计算角度,但我很快意识到角度在不同大小的圆上没有区别。我还检查了this答案,但我不知道如何将它转换成代码(还有一些奇怪的东西:th 使用自己来计算自己),我认为它甚至不起作用,因为作者使用的是从一个切片到圆中间的角度,随着圆变大,这个角度不会改变。

然后我意识到也许解决方案是通过这种方式检查边缘处两个顶点之间的角度:

enter image description here

如您所见,顶点越少,这些三角形的长度就越大。所以这必须是答案,我只是不知道如何使用这些信息来计算顶点数。

最佳答案

您链接到的答案实际上完全实现了您在问题末尾提出的想法。

您需要从该答案中得出的决定性公式是:

th = arccos(2 * (1 - e / r)^2 - 1)

这告诉你两个顶点之间的角度,其中 r 是圆的半径,e 是你愿意容忍的最大误差,即最大多边形与圆的偏差——这是图表中标记的错误。例如,您可以选择将 e 设置为 0.5 个像素。

因为 th 是以弧度为单位的,而 360 度(一个完整的圆)等于以弧度为单位的 2*pi,所以你需要的顶点数是

num_vertices = ceil(2*pi/th)

关于c++ - 如何渲染一个顶点尽可能少的圆?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11774038/

相关文章:

c++ - 有人可以解释这个继承代码吗?

c++ - 如何使用非指针属性的析构函数

c++ - 跳过整个循环而不运行 while

javascript - 如何使用html5将网格绘制成圆形

python - 从 [1,2,....num] 中计算 0 的个数

algorithm - 如何检查给定数字 N, N^2 是否可以表示为两个非零整数的平方和?

math - gnuplot - 在椭球内绘制随机点

c++ - 带有尾随 requires 子句的类外模板成员函数定义的允许形式

geometry - 查找多边形之间的共享顶点

ruby-on-rails - Rails Ruby Geometry Gem 投入生产