用C画好圆

draw good circle with C

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

我正在使用 C 和 C++。

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

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

SDL_Cos() 等三角函数的参数是弧度和浮点类型(本例中为 double)。您以整数形式传递它们。

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

Midpoint circle algorithm 是正确执行此操作的一种方法。这利用对称性仅计算一个 1/8th 圆周中的点,然后将它们投影到其他 8 种方式。

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