バウンディングボックスから楕円を描くための優れたアルゴリズムを知っている人はいますか?
draw_ellipse(int s1, int s2, int s3, int s4, color c);
理解できない、読めない効率に最適化されたものは必要ありません。単純な描画APIを使用するのに十分なだけの何か。アルゴリズムをすべてのプログラミング言語または疑似コードで回答に含めることができますが、C++またはC++に似た構文を使用する場合はそれを使用します。
パラメトリック極方程式を使用して楕円を描くための、非常に基本的で完全にテストされていない疑似コードを以下に示します。
Function draw_ellipse(int X1, int Y1, int X2, int Y2)
RX = (X2 - X1) / 2
RY = (Y2 - Y1) / 2
CX = (X2 + X1) / 2
CY = (Y2 + Y1) / 2
for Angle = 0 to 360
X = CX + cos(Angle) * RX
Y = CY + sin(Angle) * RY
if (Angle > 0) DrawLine(LastX, LastY, X, Y)
LastX = X
LastY = Y
Next Angle
End Function
注意/コメント:
通常、中心点、半長径、半短径、および回転角度で楕円を定義しました。
あなたが説明したのは、中心点を決定する必要があり、回転されない楕円です。円のグラフィックスで最も広く使用されているアルゴリズムは、Bresenhamによるものです Kennedy 楕円に適合させました。