云计算百科
云计算领域专业知识百科平台

SDL2高效画圆的算法(二)

文章目录

  • 一、实心圆
  • 二、实心半圆
  • 三、空心圆

上一篇文章讲述了
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;
}
}
}

效果如图: 在这里插入图片描述

赞(0)
未经允许不得转载:网硕互联帮助中心 » SDL2高效画圆的算法(二)
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!