通过画五角星,回顾啦三角函数
2016-01-30 21:16
197 查看
程序代码:
private void Form1_Paint(object sender, PaintEventArgs e) { Graphics g = e.Graphics; Pen pen = new Pen(Color.Yellow, 3); Brush brush = new SolidBrush(Color.Red); Point[] star = new Point[10]; double angle = Math.PI / 180;
/////////////////////////////////////////////
////////////////////////////////////////////////////
for(int i=0;i<10;i+=2)
{
star[i].X = (int)(150 + 80 * Math.Cos(angle * 36 * (i + 3.5)));
star[i].Y = (int)(90 + 80 * Math.Sin(angle * 36 * (i + 3.5)));
star[i + 1].X = (int)(150 + 30 * Math.Cos(angle * 36 * (i + 4.5)));
star[i + 1].Y = (int)(90 + 30 * Math.Sin(angle * 36 * (i + 4.5)));
}
///////////////////// g.FillPolygon(brush, star); g.DrawPolygon(pen, star); }
中间代码分析:
此处代码作用是得到五角星10个端点坐标,作为FillPolygon和DrawPolygon函数的输入。为得到五角星的十个端点坐标,首先可以分析得到,十个端点与五角星中心点的连线把一圈分成啦10份,每份占36度,这也是angle*36的由来,至于(150, 90)这是中心点的坐标。而 i 之所以加3.5是为了五角星正放置。
这里运用数学及物理中三角函数知识可知,angel*36可以理解成角速度w,每次要旋转多少度,里面 i无论加多少,只是把三角函数图像左右移动而已,不影响图像的形状,至于80和30则是振幅,这里是因为五角星的五个端点离中心点的距离不一样。至于加3.5,是因为最后一个点的坐标是刚好转啦450度,那么该点的横坐标正好与中心点相等,那么图像为正放置。
运行结果:
相关文章推荐
- Spark RDD 转化
- Ubuntu 12.04 Openstack Essex 安装(单节点)
- java循环数组实现队列
- POJ 3085:Quick Change
- MySql避免重复插入记录的几种方法
- x265-1.8版本-common/pixel.cpp注释
- C++Primer学习之二#define,const,constexpr
- eclipse如何查找jsp相对路径
- x265-1.8版本-common/picyuv.h注释
- Linux下使用gem安装软件时遇到的一些坑
- Java文件操作系列[2]——使用JXL操作Excel文件
- 制作U盘多系统(老毛桃WinPE,Ubuntu,MaxDOS,CDlinux,Parted Magic Linux)引导工具
- HDOJ 2578 Dating with girls(1)
- POJ 2636:Electrical Outlets
- Redis安装和常用知识
- x265-1.8版本-common/piclist.h注释
- leetcode20.ValidParentheses
- opencv(1)
- 《笨办法学Python》 第28课手记
- qcow2、raw、vmdk等镜像格式的比较和基本转换