• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:C#、太らせた多角形を塗りつぶす方法)

C#で太らせた多角形を塗りつぶす方法

このQ&Aのポイント
  • C#で点列で囲まれる多角形を塗りつぶす方法としてFillPolygonを使うことができますが、多角形をnピクセル太らせた領域を塗りつぶすにはどうしたらよいでしょうか。
  • 一つのアイデアは、多角形を太らせた新しい多角形を作り、元の多角形の角に半径nの円を描く方法です。
  • 例えば、三角形ABCの場合、A'B'B''C''A''の六角形を作り、A、B、Cの中心に半径nの円を描くことになります。しかし、ABを太らせるために平行移動したA'B''を求めるのは面倒であるため、もっと簡単な方法があるかどうか質問しました。

質問者が選んだベストアンサー

  • ベストアンサー
  • sygh
  • ベストアンサー率76% (42/55)
回答No.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); }

usatan2
質問者

お礼

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

すると、全ての回答が全文表示されます。

関連するQ&A