c++ - 用C画好圆
问题描述
我想画一个圆圈,它是我的代码和我的输出(SDL_SetRenderDrawHexColor
是我自己的函数,它给出十六进制并将其转换为 rgba 和SDL_SetRenderDrawColor
)
我正在使用 C 和 C++。
为什么我的输出有点像素,我在画布(js)中使用了这个算法,这很好,但在 sdl 中它不好,我认为像素很大,这是真的吗?
(由于某种原因我不能使用SDL_gfx
)
解决方案
三角函数的参数,例如SDL_Cos()
弧度和浮点类型(double
在本例中为 a)。您将它们以度数作为整数传递。
通过在角度上循环(范围应该是0 <= i < 2 * pi
),您将绘制比小半径圆所需的更多点和较大半径圆所需的不连续线。因为sin(x)
和cos(x)
是周期函数,所以使用度数而不是弧度意味着您仍然绕着圆移动,但不是以您想要的方式。
中点圆算法是正确执行此操作的一种方法。这利用对称性仅计算1/8th
圆周之一中的点,然后将它们四舍五入到其他 8 种方式。
我同意其他答案,即您可能在 HTML 画布中具有亚像素抗锯齿(更严格地说,它是过采样,然后使用低通滤波器进行下采样)。正如您在此处尝试的那样,这与绘制具有渐变的同心环是一个非常不同的命题。
推荐阅读
- webpack - 无法从 v4 webpack 到 v5
- c# - 使用 pkce 保护 asp.net core 3.1 授权代码流
- reactjs - 如何提交表单以使其显示在表格中?
- java - 如何为 Java 中的灵活类型数组制作类型特定的比较器
- android - 如何将 Gridlayoutmanager 用于 recyclerView 内的可扩展卡片
- google-cloud-platform - 如何限制对我的云功能的访问?
- angular - Three.js用Raycaster检测点击对象不起作用
- android - BottomNavigationView 未选择片段后台堆栈上的项目
- c++ - 命令 spawnl() 未执行
- node.js - 尝试 npm 安装任何包时的 TAR_BAD_ARCHIVE 和 TAR_ENTRY_INVALID