ここで誰かが擬似コードで助けてくれるのであれば、少なくともアンチエイリアスなしで円の線分を描く方法については正しい方向に向いていますか?円の部分を描く
円の部分を描く
答えて
円上の点のための式は、次のとおり
xcenter
と
ycenter
は、円の中心である
x = xcenter + radius * sin(theta)
y = ycenter + radius * cos(theta)
、radius
は半径であり、theta
角度です。
あなたは、単に十分に小さなステップであなたの終了角度にご出発の角度からtheta
を反復し、プロットするx
とy
値を抽出し、ほとんどの三角関数はラジアンとしてその引数を取ることを念頭に維持する必要があります(0 (0〜360)ではなく、2 * PIを使用してください) - 開始角度と終了角度を調整してとのtheta
ステップを考慮してください。
:あなたはおそらく0と2 * PIの間になるように角度を正規化し、その後場合、開始と終了の角度を交換したいと思いますが、
def plotCirle (xc, yc, rad, start, end):
theta = start
while theta <= end:
x = xc + rad * sin (theta)
y = yc + rad * cos (theta)
plot (x, y)
theta = theta + 0.01
前者は後者よりも大きい。
より効率的なコードが必要な場合は、midpoint circle algorithmをご覧ください。数学は重く、セグメントを必要とするという要件(角度を知る必要があることを意味しますが、このアルゴリズムには通常は必要ではないもの)がほんの少しだけ複雑であるという要件によっては少し複雑ですが、上の単純化アルゴリズムは十分に速くはありません。
整数専用の円描画については、wikipediaのmidpoint circle algorithmの記事を参照してください。これは、コードと共に、Bresenhamの線アルゴリズムの一種の円 - 変形を提示する。中点円アルゴリズム、Bresenhamの円アルゴリズム、および最適化された第3の方法の(コード付きの)比較については、codecircleを参照してください。
Result.X := Round(fCenter.X + cos(Angle/180*pi)* Radius);
Result.Y := Round(fCenter.Y + sin(Angle/180*pi)* Radius);
これがどのように質問に答えるかを説明してください。 –
- 1. 円の半分だけを描く
- 2. 円を描く
- 3. 円で円を描く
- 4. 円セクターを描く
- 5. アセンブリ - 円を描く
- 6. CSSで円の円を描く
- 7. 円を見つけて円を描く?
- 8. 斬新な円弧を描くアンドロイドドロウダブル円
- 9. libgdxで円と円弧を描く
- 10. Androidで円を描いて円を描く
- 11. ラファエルJSの半分の楕円を描く方法は?
- 12. SVGで円を描く
- 13. Android - 円柱を描く
- 14. 半円を描く方法
- 15. 矩形に円を描く
- 16. Mapkitで円を描く
- 17. WPFで円を描く
- 18. SDL2で円を描く?
- 19. CSSで半円を描く
- 20. 同心円を描く
- 21. バッチLibGdxで部分スプライトを描く
- 22. キャンバスに円の下半分を描く方法
- 23. xmlで四分円を描く方法android
- 24. Javaで複数の楕円を描く
- 25. ランダム円のpythonでスロープを描く
- 26. SVGに中空の円を描く
- 27. タグの上半円を描く
- 28. フォームに複数の円を描く
- 29. 円の内側に矩形を描く
- 30. Qtで特定の円を描く
ありがとうございました。しかし、このアルゴリズムの整数計算だけのバージョンはありますか? – Mattivc
必要に応じて整数で作業できますが、標準trig関数では浮動小数点値が必要です。私はスケールアップされた値(0-360は0-3600になります)と値のルックアップテーブルを使用する前に整数trig関数を構築しましたが、これらの関数が時間的にはるかに高価だった私の昔の埋め込み空間でした。より効率的な円描画アルゴリズム(bresenhamまたはmidpoint circleを調べる)がありますが、答えに快適に収まるよりも多くの計算が必要です。 – paxdiablo
'plot(int(x)、int(y))' –