文章目录
- 一、实心圆
- 二、实心半圆
- 三、空心圆
上一篇文章讲述了
SDL2高效画实心圆的算法(一),本篇继续探讨,数学基础不变,更新一下画法,再探索一下画半实心圆和画空心圆。
一、实心圆

void SDL_RenderFillCircle( SDL_Renderer* render, int x0, int y0, int radius, Uint8 r, Uint8 g, Uint8 b, Uint8 a) {
SDL_SetRenderDrawColor(render, r, g, b, a);
int x = radius;
int y = 0;
int err = 0;
while (x >= y)
{
SDL_RenderDrawLine(render, x0 + x, y0 + y, x0 – x, y0 + y);
SDL_RenderDrawLine(render, x0 + y, y0 + x, x0 – y, y0 + x);
SDL_RenderDrawLine(render, x0 + x, y0 – y, x0 – x, y0 – y);
SDL_RenderDrawLine(render, x0 + y, y0 – x, x0 – y, y0 – x);
y += 1;
err += (y << 1) + 1;
if (err > 0)
{
x -= 1;
err -= (x << 1) + 1;
}
}
}
结果如图: 
二、实心半圆
void SDL_RenderFillHalfCircle( SDL_Renderer* render, int x0, int y0, int radius, Uint8 r, Uint8 g, Uint8 b, Uint8 a) {
SDL_SetRenderDrawColor(render, r, g, b, a);
int x = radius;
int y = 0;
int err = 0;
while (x >= y)
{
SDL_RenderDrawLine(render, x0 + x, y0 + y, x0 + x, y0 – y);
SDL_RenderDrawLine(render, x0 + y, y0 + x, x0 + y, y0 – x);
SDL_RenderDrawLine(render, x0 + x, y0 – y, x0 + x, y0 + y);
SDL_RenderDrawLine(render, x0 + y, y0 – x, x0 + y, y0 + x);
y += 1;
err += (y << 1) + 1;
if (err > 0)
{
x -= 1;
err -= (x << 1) + 1;
}
}
}
结果如图: 
三、空心圆
void SDL_RenderDrawCircle( SDL_Renderer* render, int x0, int y0, int radius, Uint8 r, Uint8 g, Uint8 b, Uint8 a) {
SDL_SetRenderDrawColor(render, r, g, b, a);
int x = radius;
int y = 0;
int err = 0;
while (x >= y)
{
SDL_RenderDrawLine(render, x0 + x, y0 + y, x0 + x, y0 + (y + 1));
SDL_RenderDrawLine(render, x0 + x, y0 – y, x0 + x, y0 – (y + 1));
SDL_RenderDrawLine(render, x0 + y, y0 + x, x0 + (y + 1), y0 + x);
SDL_RenderDrawLine(render, x0 + y, y0 – x, x0 + (y + 1), y0 – x);
SDL_RenderDrawLine(render, x0 – y, y0 + x, x0 – (y + 1), y0 + x);
SDL_RenderDrawLine(render, x0 – x, y0 + y, x0 – x, y0 + (y + 1));
SDL_RenderDrawLine(render, x0 – x, y0 – y, x0 – x, y0 – (y + 1));
SDL_RenderDrawLine(render, x0 – y, y0 – x, x0 – (y + 1), y0 – x);
y += 1;
err += (y << 1) + 1;
if (err > 0)
{
x -= 1;
err -= (x << 1) + 1;
}
}
}
效果如图: 
网硕互联帮助中心





评论前必须登录!
注册