dポイントプレゼントキャンペーン実施中!

言語はC#です。
点列を与えて、その点列で囲まれる多角形を塗りつぶすのはFillPolygonを使って、

 Point[] pa;
 SolidBrush brush1 = new SolidBrush(Color.Blue);
 g.FillPolygon(brush1, pa);

でできますが、多角形をnピクセル太らせた領域を塗りつぶすにはどうしたらよいでしょう。
考えたのは、
多角形を太らせた新多角形をつくり、
元多角形の角に半径nの円を描く
という方法です。
三角形ABCの場合、A'B"B'C"C'A"の6角形をつくり、A,B,Cを中心に3つ半径nの円を書くことになります。コーディングし始めたら、ABを太らせるために平行移動したA'B"を求めるのが結構面倒なので、そもそももっと簡便な方法があるかと思い、質問しました。

A 回答 (1件)

説明がよく分かりませんが、nピクセル幅の直線で多角形を描くだけでいいのであれば、下記のようなコードで実現できるのでは?





private void Form1_Paint(object sender, PaintEventArgs e)
{
const double RadPerDeg = Math.PI / 180;

const int CornerCount = 3;
const float PenWidth = 7;

e.Graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
PointF[] points = new PointF[CornerCount];
Size clSize = this.ClientSize;
double radius = (clSize.Width < clSize.Height) ? (clSize.Width / 2 - PenWidth) : (clSize.Height / 2 - PenWidth);
PointF center = new PointF(clSize.Width / 2, clSize.Height / 2);
for (int i = 0; i < CornerCount; i++)
{
double angleRad = (-90.0 + i * 360.0 / CornerCount) * RadPerDeg;
points[i] = new PointF(
(float)(center.X + radius * Math.Cos(angleRad)),
(float)(center.Y + radius * Math.Sin(angleRad)));
}
Pen thickPen = new Pen(Color.Crimson, PenWidth);
thickPen.LineJoin = System.Drawing.Drawing2D.LineJoin.Round;
e.Graphics.DrawPolygon(thickPen, points);
}
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
なるほど、太らせた外側の多角形を作るのではなく、オリジナルの多角形を太いnピクセル幅の直線で画くわけですね。
助かりました。

お礼日時:2011/02/14 22:01

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!