- ベストアンサー
角が丸い長方形の描画
角が丸い長方形を描画する自作関数を作成中なのですが、どうやったら角に丸みをつけられるのでしょうか? SetPixelで1ドットずつ描画しています。 また、その図形に影をつけたいのですがどこか参考になるサイト等ありましたら教えてください。 開発環境は WindowsXP Visual C++ 6.0 です。 よろしくお願いいたします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
★アドバイス ・API に RoundRect() 関数があります。 下の『参考URL』をどうぞ。 ・自作する場合は Arc()、Pie() と直線(長方形)を組み合わせて描画します。 特に自作する必要がなければ RoundRect() 関数を利用しましょう。 ・以上。
その他の回答 (2)
- zwi
- ベストアンサー率56% (730/1282)
GDIに角丸の四角形を描画する関数がありますよ。 http://mtbeta.msdn.microsoft.com/ja-jp/library/aa929212.aspx?altlang=ja-jp MFCを使っているならCDCクラスに同様のメンバ関数があります。
お礼
描画する関数が用意されていましたね。 勉強不足で申し訳ありません。 自作するにあたって参考になりました。 ありがとうございました。
Visual C++ 6.0を使ったことはないので原理的な部分だけ. 例えば (0,0),(100,0),(100,50),(0,50)を角とする長方形に半径1の丸みを付けたいなら (1,0)-(99,0),(100,1)-(100,49),(99,50)-(1,50),(0,49)-(0,1) の直線を描画した後、 (1,1)を中心とした半径1の円の左下 (99,1)を中心とした半径1の円の右下 (99,49)を中心とした半径1の円の右上 (1,49)を中心とした半径1の円の左上 を描画すればいいのでは? コンピュータ上では「円」というより「正多角形」で円を表現することになると思いますので、仮に半径r,中心座標(a,b)の円を正360角形で表現すると for(int j=0;j<360;j++) { x=r*cos(2π/num*j)+a; y=r*sin(2π/num*j)+b; } となると思います。2π/numはラジアン単位で表現するためです。 あとは右上とか限定するにはjが0-90,90-180,180-270,270-360で分ければいいのではないかと。
お礼
自作する必要があったので助かりました。 Arc()とPie()を使うのですね。 勉強不足でした。 いつも的確なアドバイス、ありがとうございます。