C# 计算“a”区域的边界点;饼图部分“;及;“子领域”;

C# 计算“a”区域的边界点;饼图部分“;及;“子领域”;,c#,math,gdi+,pie-chart,C#,Math,Gdi+,Pie Chart,背景: 我最近在玩GDI+,画了一张“光盘”,显示360度的颜色变化。(我找到了一些HSL到RGB的代码来循环HSL(1,1,1)->HSL(360,1,1)) 关于这个圆盘,我首先用上面的画了一个完整的实心圆,然后在圆心上画了一个灰色的第二个圆,给出了下面的结果 所以这一切都很好。。。但我意识到GDI+通过FillPie方法将我们与许多棘手的比赛隔离开来。另外,FillPie要求您为饼图提供一个与半径长度相反的边界矩形。它还进行完整段填充,不允许您仅指定该段的一部分 问题: 有没有人能告诉我

背景

我最近在玩GDI+,画了一张“光盘”,显示360度的颜色变化。(我找到了一些HSL到RGB的代码来循环HSL(1,1,1)->HSL(360,1,1))

关于这个圆盘,我首先用上面的画了一个完整的实心圆,然后在圆心上画了一个灰色的第二个圆,给出了下面的结果

所以这一切都很好。。。但我意识到GDI+通过
FillPie
方法将我们与许多棘手的比赛隔离开来。另外,
FillPie
要求您为饼图提供一个与半径长度相反的边界矩形。它还进行完整段填充,不允许您仅指定该段的一部分

问题:

有没有人能告诉我一些数学函数的方向,或者解释一下我需要什么样的公式来计算以下“绿色填充区域”的面积和绘图点:


数学资源的链接很好,但我已经在谷歌上快速搜索了一下Wolfram Math,可以找到我想要的东西。此外,如果有某种方法生成一系列边界(x,y)co或,可以作为
点[]
传递到Graphics.FillPolygon,那也很酷。

希望这有帮助。第二部分提供了一种计算圆扇形面积的方法


圆的一段面积就是圆弧的角度(弧度)乘以半径。所以绿色圆圈的面积显然是:

(B-A) * r2

该面积是外阀瓣和内阀瓣零件的差值。圆盘零件的面积与角度扫描成比例:

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
变化,您需要画线(此伪代码):

对于足够小的角度增量和足够小的半径,这应该是可以的


你要找的点是(x1,y1)和(x2,y2)对于每个角度aa

干杯,我要找的不是单位^2的实际面积,而是定义平面上面积的点。。。我更新了问题主题以反映这一点。干杯,好资源。我们是否假设我们知道点c,角度A和B,半径r1和r2,你想要截距点?e、 g.将A和r1产生的向量加在c上产生的点(得到一个内点,然后Ar1+Ar2+c得到同一路径上的外点…然后B边也是如此?@Jonathan.是的。假设c、A、B、r和r2是某个公式的已知输入,该公式将吐出一个点[]可以用来画一条线的数组,包围该区域。+1埃里克。谢谢。我是否可以假设a和B之间t的增量越小,点的分辨率就越好…例如,如果a是30*,B是45*,那么a和B之间的增量越多,曲线的分辨率就越好…低分辨率=(30,35,40,45)高分辨率=(30,30.5,31,31.5,…44.5,45)是的,理想情况下,增量应对应于外圆上的一些像素数。外圆上点之间的弧长为(r+r2)*dt,其中dt是以弧度为单位的角度增量。@Eoin,请参阅向量构造/运算公式,以了解Eric的公式的来源。@Eric&@Jonathan:非常感谢各位。我认为Eoin使用r2作为外半径,而您使用r2+r。这可能会导致混淆。否则,这会得到很好的解释。
x = cx + r * cos(t)     /     x = cx + (r+r2) * cos(t)
y = cy + r * sin(t)     /     y = cy + (r+r2) * sin(t)
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)