3

背景:

私は最近、GDI+ をいじって、360 度にわたる抜本的な色の変化を表示する「ディスク」を描画しました。(HSL(1,1,1) -> HSL(360,1,1) をループする HSL から RGB へのコードをいくつか掘り下げました)

ディスクに関しては、最初に上記を使用して完全な黒丸を描き、次に中心の上に灰色で2番目の円を描き、次のようにします

代替テキスト

これで問題ありません... しかし、GDI+ は、FillPieメソッドを介してここで行われている多くのトリッキーな一致から私たちを隔離していることに気付きました。また、FillPie半径の長さではなく、円の境界の四角形を指定する必要があります。また、完全なセグメント塗りつぶしを行い、そのセグメントの一部のみを指定することはできません。

質問:

誰かが私をいくつかの数学関数の方向に向けたり、次の「緑で塗りつぶされた領域」の面積とプロットポイントを計算するために必要なフォーラムについて説明したりできますか?

Point `c` - an x,y co-ordinate
Angle `A` - an angle from horizontal
Angle `B  - an angle from horizontal where `B` - `A` == the sweep angle
Length `r` - a distance from `c`
Length `r2` - a distance from `c` where `r2` - `r` == the `height` of the segment to be filled.

代替テキスト

数学ソースへのリンクは問題ありませんが、Google で簡単に検索して Wolfram Math を調べたところ、探していたものを見つけることができました。Point[]また、 Graphics.FillPolygon に渡すことができる境界 (x,y) co-or のシーケンスを生成する何らかの方法があれば、それもすばらしいでしょう。

4

4 に答える 4

3

面積は、外側と内側のディスク部分の差です。円板部分の面積は角度スイープに比例します。

area = (b-a)*((r+r2)^2-r^2)/2

abラジアンで表す必要があります。についてはb-a = 2*Piarea = Pi*(r+r2)^2 - Pi*r^2外側と内側のディスクの面積の差です。

を使用して、内側/外側の円にポイントを生成できます

x = cx + r * cos(t)     /     x = cx + (r+r2) * cos(t)
y = cy + r * sin(t)     /     y = cy + (r+r2) * sin(t)

からまでの場所がt異なります。ab

于 2009-05-31T10:46:57.990 に答える
0

線を引く必要があります (この疑似コード):

for aa from A to B
  set color to required color // you could use aa in an equation with HSL to get something like your sample
  x1=r*cos(aa)+x
  y1=r*sin(aa)+y
  x2=r1*cos(aa)+x
  y2=r1*sin(aa)+y
  draw line between (x1,y1) and (x2,y2)

角度の増分が十分に小さく、半径が十分に小さい場合、これで問題ありません。

探しているポイントは、各角度 aa の (x1,y1) と (x2,y2) です。

于 2009-05-31T11:20:44.337 に答える
0

お役に立てれば。2番目の部分は、円の扇形の面積を計算する方法を提供します

http://www.wikihow.com/Calculate-the-Area-of-a-Circle

于 2009-05-31T10:34:26.533 に答える
0

円のセグメントの面積は、単純に円弧の角度 (ラジアン) に半径を掛けたものです。したがって、緑色の円の面積は明らかに次のとおりです。

(B-A) * r2
于 2009-05-31T10:36:22.380 に答える