3

背景

我最近在玩 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.

替代文字

数学资源的链接很好,但我快速搜索了一下 Wolfram Math,可以找到我想要的东西。此外,如果有某种方法可以生成可以作为 a 传递Point[]给 Graphics.FillPolygon 的边界 (x,y) 坐标序列,那也很酷。

4

4 回答 4

3

面积是外圆盘部分和内圆盘部分的差异。圆盘部分的面积与角度扫描成正比:

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)

ta到不等b

于 2009-05-31T10:46:57.990 回答
0

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

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 回答
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 回答