如何使用尽可能少的顶点渲染圆?

Roo*_*kie 11 c++ math geometry

我正在试图弄清楚如何确定需要多少个顶点才能使我的圆圈看起来尽可能平滑.

以下是两个圆的示例,两个圆都有24个顶点: 在此输入图像描述

如您所见,圆圈越大,我需要隐藏直线的顶点越多.

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

然后我意识到可能解决方案是检查边缘处两个顶点之间的角度,这样:

在此输入图像描述

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

Mar*_*n B 10

您链接到的答案实际上实现了您在问题结束时提出的想法.

从这个答案中你需要的决定性公式是:

th = arccos(2 * (1 - e / r)^2 - 1)
Run Code Online (Sandbox Code Playgroud)

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

因为th以弧度为单位测量,360度(整圆)等于2*pi弧度,所需的顶点数量为

num_vertices = ceil(2*pi/th)
Run Code Online (Sandbox Code Playgroud)