C#Windows窗体界面设计_01_绘制三角函数_五点作图法
binzhouweichao@163.com
Visual Stutio 2010 C#开发环境
五点作图绘制三角函数,以正弦函数为例,选取一个周期[0, 2π]上的五个特殊的点,也就是横坐标0, π/2, π, 3π/2, 2π这五个点绘制图形,对应的纵坐标为0, 1, 0, -1, 0。
1. 新建Windows窗体应用程序
文件-->新建-->项目,选择Windows窗体应用程序,项目位置和名称自定义。
2. 更改设计文件名称
在右侧解决方案资源管理器中,将默认的Form1.cs改为TriPaint.cs,在弹出的警示框中点击确定。
3.窗体属性设置
设置窗体显示的名称为TriPaint。
选中TriPaint.cs[设计]文件中的Form1窗体,右键-->属性,在右下角弹出的属性窗口中,找到Text属性,将其值修改为TriPaint。
可以看到,上方的Size属性为300, 300,即默认窗口大小为300*300。
这里的其他属性先不做修改。
4. 查看代码
在资源管理器中选中TriPaint.cs,右键-->查看代码。
5. 完善代码
出于简单考虑,只在TriPaint类的构造函数中进行,也就是public TriPaint()函数中添加其他代码。
5.1 建立五个点的数据
使用Point类型写入5个点的数据。Point是System.Drawing中的类,其基本的结构就是点坐标,包含X和Y两个数据。
声明点坐标数组:
Point[] data = new Point[5];//声明一个Point数组data,共5个元素,每个元素为一个Point类型数据。
初始化各点:
注:窗体上的坐标系是以左上角为原点,右方正向为x正方向,下方正向为y正方向。窗体默认大小为300*300,不妨设一个周期2π对应在窗体上的长度为200,即放大倍数为200/2π = 100/π,这样可得五个点的横坐标映射关系为:
设置一个放大倍数变量,方便计算:
double times = 200 / 2 / Math.PI;//放大倍数
由于窗体坐标系只有正的坐标点,需要将Y平移,不妨令最高点为0,有
即向正方向平移100/π。
注:由于Point中,坐标点为int类型,而sin函数或者π为double类型,所以不可避免的要强制类型转换,将double转换成int。而强制类型转换不可避免的会丢失小数点后面的数据。所以在计算sin()函数值时,最好不要使用data.X。但这里data.X的转换前的数据均为整数,与double转换时不会丢失数据,所以可以直接用。。
类型转换:http://blog.csdn.net/sduweichao/article/details/12677357
使用for循环赋值:
for (int i = 0; i < data.Length; i++)
{
data[i].X = (int)(i * Math.PI / 2 * times);//强制类型转换,将double转为int,可能会丢失数据
data[i].Y = (int)(times * Math.Sin(data[i].X / times) + times * 1);
}
5.2 建立画板与画笔
建立画板:
Graphics g = this.CreateGraphics();
通过Graphics类,在当前窗体上建立画板,this指针是当前类的隐藏指针,也就是此类所指的窗体的指针。
窗体属性默认隐藏,需要显示:
this.Show();//显示
建立画笔:
Pen p = new Pen(Color.Blue, 1);
通过Pen类建立画笔,属性为蓝色,线条粗细为1。
5.3 开始绘图
由于是五点绘图,就是把这五个点用直线连接起来,使用DrawLines()函数,函数的参数为画笔和点坐标数组。
g.DrawLines(p, data);//五点绘图,直线连接
6. 结果
按F5运行
TriPaint.cs代码文件中的最终代码:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms; namespace TriPaint_20131013
{
public partial class TriPaint : Form
{
public TriPaint()
{
InitializeComponent();
//在这里添加代码
Point[] data = new Point[5];//声明一个Point数组data,共5个元素,每个元素为一个Point类型数据。
double times = 200 / 2 / Math.PI;//放大倍数
for (int i = 0; i < data.Length; i++)
{
data[i].X = (int)(i * Math.PI / 2 * times);//强制类型转换,将double转为int,可能会丢失数据
data[i].Y = (int)(times * Math.Sin(data[i].X / times) + times * 1);
} Graphics g = this.CreateGraphics();//画板
this.Show();//显示
Pen p = new Pen(Color.Blue, 1);//画笔 g.DrawLines(p, data);//五点绘图,直线连接 }
}
}
参考:
C#中的数学函数:http://blog.163.com/w_jingli/blog/static/3825536920114303635977/
C#绘图技术:http://wenku.baidu.com/view/9ffdce166edb6f1aff001fd1.html
C#Windows窗体界面设计_01_绘制三角函数_五点作图法的更多相关文章
- C#Windows窗体界面设计_01_绘制三角函数_附强制类型转换
binzhouweichao@163.com 今天开始学习C#windows窗体界面设计. 首先说一下类型转换. 参考http://www.csharpwin.com/csharpspace/6848 ...
- C#Windows窗体界面设计_05_添加菜单栏 工具栏 状态栏 按钮
- 简单的Windows登陆界面设计
要求: 1.用户名必须为字母. //限定用户名必须为字母 private void txtName_KeyPress(object sender, KeyPressEventArgs e) { if ...
- JavaScript实现五子棋的界面设计
五子棋的界面设计包括绘制棋盘.绘制棋子及黑白棋轮流落子. 涉及的知识点主要有canvas绘制直线.设置画笔颜色:canvas画圆.填充渐变色 1.绘制棋盘 先设定棋盘的宽.高:然后利用for循环,根据 ...
- C#实例:5个.net经典例子(窗体与界面设计)
实例001 带历史信息的菜单 实例说明 在开发图纸管理软件时,要求在菜单上记录用户最近打开的档案或图纸,以方便下次使用.如图1.1所示,单击“文件”菜单下的“打开文件”子菜单,打开需要查阅的图纸.下 ...
- WPF界面设计技巧(1)—不规则窗体图文指南
原文:WPF界面设计技巧(1)-不规则窗体图文指南 初到园子,奉上第一篇入门级教程,请勿见笑. 以往WinForm编程中,实现不规则窗体是有一定难度的,更难的是不规则窗体的边缘抗锯齿及局部透明处理.而 ...
- C#学习笔记-Windows窗体基本功能(Login登录界面)
本菜鸟由于实习工作的原因,不得不快速接触C#语言,刚刚好又要做毕业设计,所以就通过自学的方式一举两得地完成这两件事情. 故此文字记录或代码中的各种文件名之类均是以毕业设计为模版记录的,看着不方便之处请 ...
- 窗体背景的绘制(Windows窗体每次都会重绘其窗体背景,所以我们可以通过拦截窗体重绘背景的消息(WM_ERASEBKGND),并自定义方法来实现重绘窗体背景)
核心思想:由于Windows窗体每次都会重绘其窗体背景,所以我们可以通过拦截窗体重绘背景的消息(WM_ERASEBKGND),并自定义方法来实现重绘窗体背景.通过TImage组件也可以实现,但是重写W ...
- Java界面设计 Swing(1)
Java界面设计的用途 开发者可以通过Java SE开发丰富并且强大的具有图形界面的桌面应用程序.也可以设计一些提高效率的工具软件,帮助自己处理机械性工作. Java 的图形界面工具包,可以用于工具类 ...
随机推荐
- Web内容管理系统 Magnolia 介绍-挖掘优良的架构(1)
Magnolia简介: Magnolia CMS是一家瑞士公司自2003年起发布的一个基于Java的开源内容管理系统.它适合且已被使用在以下领域:电子商务(例如:COOP.Migros.Rossman ...
- C#将HTML导出Excel
首先这个 不能用ajax 操作,不过 我现在讲的 这个方法和ajax 的效果一样. 你在你需要导出的页面写个方法 function DaoChu () { location.href = " ...
- 纯css做的安卓开机动画
随着css3的发展,越来越多的负责绚丽的效果可以由纯css来完成了.用css3实现的动画效果丝毫不必js实现的逊色,而且浏览器对css渲染的速度远比js快,大多数时候css的体积也不js小.其中css ...
- HelloX操作系统与中国移动OneNET物联网平台成功完成对接
HelloX成功与中国移动物联网平台对接 经过HelloX项目组同仁的努力,尤其是Tywin(@飓风)的努力下,HelloX最新版本V1.78已成功与中国移动OneNET(open.iot.10086 ...
- liux之sed用法
sed是一个很好的文件处理工具,本身是一个管道命令,主要是以行为单位进行处理,可以将数据行进行替换.删除.新增.选取等特定工作,下面先了解一下sed的用法sed命令行格式为: sed ...
- 小技巧--让JS代码只执行一次
有时候实在是没办法,就像我这个比赛系统中,有一个弹出框,这个弹出框之外都是模糊的(这是在ajax写出弹出框时,加了一个水印). 然而遇到的问题,也是蹊跷古怪,因为这个弹出框的事件是数据查询事件,但是因 ...
- android.view.ViewRootImpl$CalledFromWrongThreadException错误处理
一般情况下,我们在编写android代码的时候,我们会将一些耗时的操作,比如网络访问.磁盘访问放到一个子线程中来执行.而这类操作往往伴随着UI的更新操作.比如说,访问网络加载一张图片 new Thre ...
- 关于java异常的一点思考
关于异常的一点思考 异常生命周期 异常的来源 所有的异常都是抛出来的 有底层api抛出的 有自定义抛出的 异常的处理 1, 运行时异常 不做任何处理仍可编译通过 不建议捕获(不建议用异常来做流程控制, ...
- 我是面试官--"自我介绍"
工作10余年,经历过很多次面试,也面试了N多人.这些年来,已经有好些位朋友(或同事)与我聊起相关话题,涉及面试,更关乎职业生涯规划.感触颇多,就借助自媒体的浪潮,与更多的程序员一起共谈面试经历,希望可 ...
- [LeetCode] Ugly Number (A New Question Added Today)
Write a program to check whether a given number is an ugly number. Ugly numbers are positive numbers ...