题
<强>背景强>:
我最近与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*Pi
,area = 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
从a
到b
变化。
其他提示
希望这有助于。第二部分提供了一种方法,用于计算一个圆的扇区的区
的圆的区段的区域仅仅是圆弧的角度(以弧度为单位)倍的半径。因此,绿色圆圈的面积显然是:
(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
不隶属于 StackOverflow