4.4.2.2 绘制饼图部分

728 篇文章 1 订阅
349 篇文章 0 订阅

4.4.2.2 绘制饼图部分

 

清单 4.8 实现的函数 drawPieSegment,用随机颜色,填充图表指定部分。这个函数在后面的应用程序中,被执行绘图的函数在两个阶段调用;处理函数绘制每一部分都将调用它,并将获得作为参数值所需的所有信息。

 

清单 4.8 绘制饼图的一个部分 (F#)

let drawPieSegment(gr:Graphics, title,startAngle, occupiedAngle) =

  letbr = randomBrush()

  gr.FillPie

    (br,170, 70, 260, 260,  <-- 指定饼图的中点和大小

     startAngle,occupiedAngle)

  br.Dispose()

 

函数的参数写成一个大的元组,有四个要素,增加了代码的可读性;函数的第一个参数,有类型批注,指定类型为 Graphics,它是一个 System.Drawing 类,提供了绘图功能,我们在函数中使用它的 FillPie 的方法,但这就是编译器有关gr 值所能知道的全部信息,因此,无法推断出类型,这就是我们需要类型批注的原因;元组中接下来的三个元素分别是标题文本(在代码中不使用,但对绘制标签很重要),饼图部分的起始角和这部分的角度(以度为单位)。注意,绘制一旦完成,就要释放笔刷,F# 中有一种更好的做法,我们将在第九章讨论。

 

选择写函数的语法

 

已经目前为止,我们已经用了有两种方法,来写有多个参数的函数:函数的参数既可以写成在括号中、以逗号分隔的列表,也可以写成以空格分隔的值列表。注意,第一种风格无论如何不是很特别的:

 

let add(a, b) = a + b

 

这个函数的参数为元组,表达式 (a, b) 是常规模式(usual pattern),在第三章我们用它来分解元组。问题是哪种方法更好。不幸的是,没有一个权威的答案,全凭个人喜好。唯一重要的是保持一致。

在本书,我们通常把函数的参数写成元组,尤其是写一些更复杂的使用 .NET 库的工具函数,这能保持代码的语法与调用 .NET 方法时所使用的一致。在写简单的工具函数,且主要是处理 F# 值时,我们会使用空格。

当调用或声明的函数只有一个参数时,我们也写上括号,例如, sin(x),虽然括号是可选的,也可以写成 sin x。这一决定既符合函数通常的数学式,也符合调用有多个参数的 .NET 方法。我们会在第五和第六章,再回到这个主题,届时,将更详细地讨论函数;此外,还将讨论实现和使用高阶函数。

 

前面的清单中的 drawPieSegment 函数是两个绘图函数中的一个,它将作为函数 drawStep 的参数值,将迭代并绘制饼图的所有部分。在看 drawStep 的代码之前,我们要先看一下它的类型。虽然,在代码中我们不需要写出类型,但是,了解代码中所使用值的类型还是有用的。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值