首页 > 解决方案 > 用C画好圆

问题描述

我想画一个圆圈,它是我的代码和我的输出(SDL_SetRenderDrawHexColor是我自己的函数,它给出十六进制并将其转换为 rgba 和SDL_SetRenderDrawColor

我正在使用 C 和 C++。

vscode IDE

为什么我的输出有点像素,我在画布(js)中使用了这个算法,这很好,但在 sdl 中它不好,我认为像素很大,这是真的吗?

(由于某种原因我不能使用SDL_gfx

标签: c++calgorithmsdlsdl-2

解决方案


三角函数的参数,例如SDL_Cos()弧度和浮点类型(double在本例中为 a)。您将它们以度数作为整数传递。

通过在角度上循环(范围应该是0 <= i < 2 * pi),您将绘制比小半径圆所需的更多点和较大半径圆所需的不连续线。因为sin(x)cos(x)是周期函数,所以使用度数而不是弧度意味着您仍然绕着圆移动,但不是以您想要的方式。

中点圆算法是正确执行此操作的一种方法。这利用对称性仅计算1/8th圆周之一中的点,然后将它们四舍五入到其他 8 种方式。

我同意其他答案,即您可能在 HTML 画布中具有亚像素抗锯齿(更严格地说,它是过采样,然后使用低通滤波器进行下采样)。正如您在此处尝试的那样,这与绘制具有渐变的同心环是一个非常不同的命题。


推荐阅读