<强>背景

我最近与GDI玩弄+画出一个“盘”显示通过360度的扫颜色变化。 (I通过HSL挖出一些HSL到RGB代码环(1,1,1) - > HSL(360,1,1))

关于光盘,我第一画了一个完整的实心圆使用上述,然后在格雷在中心的第二圆,得到以下

“替代文字”

这就是全部罚款...但我意识到,GDI +是从很多的是这里发生了由FillPie方法来棘手的比赛绝缘我们。此外,FillPie需要你的馅饼提供一个边框,而不是一个半径长度。它也没有一个完整的段填充和犯规让你指定段的一部分而已。

<强>问题:

任何人都可以指出我的一些数学函数的方向,或者提供我需要计算下面的“绿色填充区域”的面积和绘图点什么forumla任何给出的解释:

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.

“替代文字”

链接到数学来源是不错,但我有一个快速谷歌和看沃尔夫勒姆数学和能找到什么,我一直在寻找。此外,如果有一些方法来生成边界的序列(X,Y)共同或可能作为Point[]到Graphics.FillPolygon被传递的,即会是凉爽太

有帮助吗?

解决方案

的区域是外和内盘部分的差异。盘部分的面积正比于角度扫描:

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

a b必须以弧度来表示。 对于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)

其中tab变化。

其他提示

希望这有助于。第二部分提供了一种方法,用于计算一个圆的扇区的区

http://www.wikihow.com/Calculate-the - 面积对的一圆

的圆的区段的区域仅仅是圆弧的角度(以弧度为单位)倍的半径。因此,绿色圆圈的面积显然是:

(B-A) * r2

您需要绘制线(该伪代码):

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)

在角度足够小的增量,和足够小的半径,这应该是OK。

你正在寻找的点是(X1,Y1)和(X2,Y2)为每个角AA

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top