![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
言語は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"を求めるのが結構面倒なので、そもそももっと簡便な方法があるかと思い、質問しました。
![](http://oshiete.xgoo.jp/images/v2/common/profile/M/noimageicon_setting_08.png?5a7ff87)
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);
}
回答ありがとうございます。
なるほど、太らせた外側の多角形を作るのではなく、オリジナルの多角形を太いnピクセル幅の直線で画くわけですね。
助かりました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 数学 点Oを中心とし、半径が5である円Oがある。この円周上に2点A、B をAB=6となるようにとる。また、 5 2023/08/16 23:32
- 数学 場合の数、確率 30 円周上の鋭角三角形(偶数等分) 2 2023/07/07 04:56
- 数学 『弧は弦より長し』 8 2022/04/18 10:23
- ノートパソコン Open Office.orgのDrawで描いた図形の塗りつぶしをしたい 1 2022/03/22 19:24
- 数学 半径6の円Kを底面とする半球がある。半球の底面に平行な平面が半球と交わっており、交わりの円Lの半径は 6 2022/06/24 06:34
- 数学 三角形ABCの辺BCを4 : 3に内分する点をTとし、点Tを接点として辺BCに接する円が点Aで直線A 3 2023/02/12 21:03
- 数学 AB=2,BC=3,∠ABC=60°の三角形がある。 点Aから辺BCに垂線を下ろし辺BCとの交点をD 4 2023/02/02 15:55
- 中学校 直角三角形ABCがあり、 ∠A=90度、 ∠B=60度、∠C=30度の時、 3点、A、B、Cを通る円 2 2022/05/19 18:52
- 数学 中3 円周角の定理の問題です 3 2022/06/29 22:21
- 数学 場合の数、確率 29 導入問題 ( 円周上の鋭角三角形) 4 2023/07/06 18:00
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語を実行すると-infが出てき...
-
doubleの変数にintとintの割り...
-
c言語で、繰り返し文の中で、0....
-
float型とdouble型の変数の違い...
-
プログラムでの数字につく”f”の...
-
C言語の型による処理速度の違い
-
C 開放してるのにエラー(doubl...
-
c言語 標準体重計算のプログラ...
-
C言語 関数プロトタイプ宣言の...
-
方程式を2分法を用いて解くプロ...
-
至急です! マクロ定義で #defi...
-
C言語でポインタを用いた平均,...
-
浮動小数点の定数
-
関数プロトタイプ無しで、引数...
-
C言語で
-
遺伝的アルゴリズムのプログラム
-
C言語の構造体の問題が分かりま...
-
C言語のデバック 領域の二重解...
-
C言語で台形公式を使った二重積...
-
指数の表示
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
プログラムでの数字につく”f”の...
-
C言語を実行すると-infが出てき...
-
float型とdouble型の変数の違い...
-
doubleの変数にintとintの割り...
-
c言語で、繰り返し文の中で、0....
-
C言語 関数プロトタイプ宣言の...
-
関数におけるif文とreturn文に...
-
C 開放してるのにエラー(doubl...
-
C言語の型による処理速度の違い
-
至急です! マクロ定義で #defi...
-
doubleは常に%lfとするべきなのか
-
Cで3乗根を求める方法
-
-1.#IND00と出てしまうのですが...
-
C言語で-23乗を取り扱うには
-
C++で外積
-
2次方程式の解を求めるプログ...
-
方程式を2分法を用いて解くプロ...
-
ニュートン法
-
c言語のコンパイルエラー canno...
-
difftime()について
おすすめ情報