c#-计算“饼段”和“子区域”区域的边界点

背景:

我最近正在和GDI一起玩,以绘制一个“圆盘”,该圆盘显示360度全方位的颜色变化. (我将一些HSL转换为RGB代码以遍历HSL(1,1,1)-> HSL(360,1,1))

关于光盘,我首先使用上述方法绘制了一个完整的实心圆,然后在中心上方绘制了第二个灰色圆,以得出以下内容:

所以这一切都很好…但是我意识到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.

链接到Math数据源很好,但是我有一个快速的Google&看一下Wolfram Math,就能找到我想要的东西.另外,如果有某种方法可以生成边界(x,y)的co-or序列,可以将Point []作为Point []传递给Graphics.FillPolygon,那也很酷.

最佳答案
面积是外圆盘部分和内圆盘部分的差.圆盘部分的面积与角度扫描成正比:

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

a和b必须以弧度表示.
对于b-a = 2 * Pi,面积= 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变化.

点击查看更多相关文章

转载注明原文:c#-计算“饼段”和“子区域”区域的边界点 - 乐贴网