我使用SDL_RenderDrawPoint()進行了實驗,通過在圓上繪製圓來繪製圓。爲此,我使用正弦函數和餘弦函數(cos(v),sin(v))和for循環每次繪製每個點一次來表達它們的位置(x,y)。有1080個迭代和幾個if語句,我做了三個圓圈。使用三角函數繪製點的圓。 SDL2
功能:
void DotCircle::DrawCircle()
{
if (draw)
{
Position = { 500.f, 500.f };
SDL_Point start;
start.x = Position.m_x;
start.y = Position.m_y;
SDL_SetRenderDrawColor(drawmgr->getRenderer(), 0xFF, 0x00, 0xFF, 0xFF);
for (size_t i = 0; i < 1080; i++)
{
if (i < 360)
{
SDL_RenderDrawPoint(drawmgr->getRenderer(), start.x + 300 * cos(i), start.y + 300 * sin(i));
}
if (i > 360)
{
SDL_RenderDrawPoint(drawmgr->getRenderer(), start.x + 200 * cos(i), start.y + 200 * sin(i));
}
if (i > 720)
{
SDL_RenderDrawPoint(drawmgr->getRenderer(), start.x + 100 * cos(i), start.y + 100 * sin(i));
}
}
}
}
的問題當然是爲圓半徑變大它們之間的較大的房間,但我的問題是:我可以讓各界更流暢使用這種技術,如果是這樣,我該怎麼做?
圖片:
這改善了很多圈子。現在我使用一個浮點數並在循環中向我添加0.1 * PI/180(PI = 3.141592653)。 if語句也被轉換爲弧度。但是,可以做些什麼來提高效率?我正在考慮將點推入容器並從另一個地方抽取它們,或者以某種方式控制幀速率。 我有一個正方形在繪製圓圈時移動時會滯後很多 – Orrexon 2014-10-01 21:47:07
我已經給我的答案添加了一些建議。 – 2014-10-01 22:25:39