- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
图形和图像编程-同济大学计算机基础教研室
* * * * * * * * * * * * * * * * * * 绘制阿基米德螺旋线 阿基米德螺旋线参数方程: x = j*Cos(j); y = j*Sin(j);j∈[0,4π)。 坐标系原点(x0,y0) : x0 = this.ClientRectangle.Width/2; y0 = this.ClientRectangle.Height/2; TranslateTransform(x0,y0); (0,0) (x0,y0) x0 y0 x = j * Cos(j); y = - j * Sin(j); 因为此时Y轴的方向与用户坐标系Y轴方向相反 * 基本方法: 确定用户坐标系原点,将坐标系平移到坐标原点,绘制坐标轴; 计算函数的各取样点坐标(注意纵坐标反向),并绘制函数曲线图; 为便于观察,通常对曲线的各点坐标值进行相应缩放. x0 = this.ClientRectangle.Width/2; y0 = this.ClientRectangle.Height/2; g.TranslateTransform(x0, y0); g.DrawLine(Pens.Black, -x0, 0, x0, 0);//绘制X轴 g.DrawLine(Pens.Black, 0, -y0, 0, y0);//绘制Y轴 x = j * Cos(j); y = - j * Sin(j); g.DrawCurve(Pens.Blue, pt); 阿基米德螺旋线参数方程: x = j*Cos(j); y = j*Sin(j);j∈[0,4π)。 (0,0) (x0,y0) x0 y0 实现: 因为此时Y轴的方向与用户坐标系Y轴方向相反 8.3.3 绘制统计图 扇形统计图:圆内各个扇形的大小表示各部分数量占总数量的百分比。 圆心角的度数=百分比×360° * 绘制扇形图 绘制直方图 直方图:用一定的长度表示单位数量,然后根据各部分数量的多少而绘制成相应长度的直方条。 直方条的高度=数量×单位数量的直方图高度 例8.7 绘制统计图。 * * 绘制扇形图步骤 用数组amount统计各部分的数量 设置起始角度 start = 0; 在循环中: 计算当前扇形的圆心角: sweep = amount [i] / amount.Sum() * 360; 绘制扇形: g.FillPie(brush2, rect1, start, sweep); 求下一个起始角:start += sweep; 思考:如何在饼图处加各块百分比 start sweep 主要代码 * Rectangle rect1 = new Rectangle(50, 10, 180, 180);//扇形图所在矩形 float start = 0; //绘制扇形图的起始角度 Random rnd = new Random(); for (int i = 0; i amount.Length; i++) { Color crnd = Color.FromArgb(rnd.Next(256), rnd.Next(256), rnd.Next(256)); //通过得到的随机色创建填充扇形的笔刷 SolidBrush brush2 = new SolidBrush(crnd); float sweep = amount[i] / amount.Sum()* 360 ; //当前扇形圆心角 g.FillPie(brush2, rect1, start, sweep) ; //绘制当前水果所在扇形 start += sweep ;//当前扇形的结束角度作为下一扇形的起始角度 } /*初始化*/ /*针对每个类别绘制其扇形图*/ /*产生随机色、计算圆心角并绘制当前扇形*/ /*调整起始角度*/ * 绘制直方图步骤 平移坐标系到直方图坐标系原点并绘制坐标轴 g.TranslateTransform(0, h); 求数据最大值max,计算单位值所占高度:mul = h/max 在循环中: 计算每个直方条的左上角(x,y)值, 其中: x在横轴上等分,y乘以单位值高度 y = - amount[i] * mul; 绘制直方条 (宽为25) g.FillRectangle(brush2, x, y, 25, -y); x,y y (20,h-20) (h-30)/max * 主要代码 g.TranslateTransform (20, h - 20);//平移坐标系 g.DrawLine(pen1, 0, 0, w - 30, 0);//绘制坐
文档评论(0)