C#窗体程序画倾斜一定角度的椭圆
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Ellipse
{
public partial class Form1 : Form
{
PointF xyPoint = new PointF(); //左上角的X,Y坐标
PointF centerPoint = new PointF();//椭圆的中心点
PointF movePoint = new PointF();
PointF xiePointF=new PointF();
PointF xiedPointF = new PointF();//倾斜一定角度后的点
private double perAngle = 0;
private double nowAngle;
PointF[] pointFs=new PointF[201];
PointF[] pointFs1=new PointF[201];//与pointFs对称的点数组,椭圆是对称的
PointF[] xiePointFs=new PointF[201];//倾斜的椭圆上半部分
PointF[] xiePointFs1 = new PointF[201];//倾斜的椭圆下半部分,对称的部分
private float a =200;
private float b =100;
private float stepLength = 2;//通过X坐标逐次加2计算出Y坐标,将所有坐标存在数组中,用DrawCurve连接
private float xLength = 0;//点到坐标Y轴的线段距离
private float yLength = 0;//颠倒坐标X轴的线段距离
private float dbYlength = 0;
private float xiedLength = 0;//点到椭圆中心点的线段长度
private int angle = 0;//倾斜的角度
public Form1()
{
InitializeComponent();
}
private void panel1_Paint(object sender, PaintEventArgs e)
{
}
private void panel1_MouseClick(object sender, MouseEventArgs e)////画布鼠标键点击事件,重画图形
{
if (e.Button != MouseButtons.Left)
{
return;
}
if (this.textBox1.Text == "")
{
this.errorProvider1.SetError(this.textBox1, "请输入倾斜的角度");
return;
}
else
{
this.errorProvider1.SetError(this.textBox1, "");
}
xyPoint.X = this.panel1.Width/2-200;
xyPoint.Y = this.panel1.Height/2-100;
centerPoint.X = xyPoint.X + a;
centerPoint.Y = xyPoint.Y + b;
Graphics graphics = this.panel1.CreateGraphics();
graphics.SmoothingMode = SmoothingMode.HighQuality;
graphics.Clear(this.panel1.BackColor);
Pen pen = new Pen(Color.Red);
for (int index = 0; index < pointFs.Length; index++)
{
movePoint.X = index * stepLength + xyPoint.X;
xLength = centerPoint.X - movePoint.X;
yLength = (float)(Math.Sqrt((1 - (xLength * xLength) / 40000) * 10000));
movePoint.Y = b - yLength + xyPoint.Y;
pointFs[index] = movePoint;
}
graphics.DrawCurve(pen, pointFs, 1.5f);
for (int index = 0; index < pointFs1.Length; index++)
{
dbYlength = centerPoint.Y - pointFs[index].Y;
pointFs1[index].Y = centerPoint.Y + dbYlength;
pointFs1[index].X = pointFs[index].X;
}
graphics.DrawCurve(pen, pointFs1, 1.5f);
for (int index = 0; index < pointFs.Length; index++)
{
xiePointF = pointFs[index];
double startAngle = Math.Atan2(xiePointF.Y - centerPoint.Y, xiePointF.X - centerPoint.X);
string jiaodu = this.textBox1.Text;
perAngle = int.Parse(jiaodu) * Math.PI / 180;
nowAngle = startAngle + perAngle;
xiedLength = (float)Math.Sqrt(Math.Pow(xiePointF.X - centerPoint.X, 2) + Math.Pow(xiePointF.Y - centerPoint.Y, 2));
xiedPointF.X = centerPoint.X - (float)(xiedLength * Math.Cos(nowAngle));
xiedPointF.Y = centerPoint.Y + (float)(xiedLength * Math.Sin(nowAngle));
xiePointFs[index] = xiedPointF;
}
graphics.DrawCurve(pen, xiePointFs, 1.5f);
for (int index = 0; index < pointFs1.Length; index++)
{
xiePointF = pointFs1[index];
double startAngle = Math.Atan2(xiePointF.Y - centerPoint.Y, xiePointF.X - centerPoint.X);
string jiaodu = this.textBox1.Text;
perAngle = int.Parse(jiaodu) * Math.PI / 180;
nowAngle = startAngle + perAngle;
xiedLength = (float)Math.Sqrt(Math.Pow(xiePointF.X - centerPoint.X, 2) + Math.Pow(xiePointF.Y - centerPoint.Y, 2));
xiedPointF.X = centerPoint.X - (float)(xiedLength * Math.Cos(nowAngle));
xiedPointF.Y = centerPoint.Y + (float)(xiedLength * Math.Sin(nowAngle));
xiePointFs1[index] = xiedPointF;
}
graphics.DrawCurve(pen, xiePointFs1, 1.5f);
}
private void button1_Click(object sender, EventArgs e)//倾斜角度,每次递增10度
{
angle += 10;
this.textBox1.Text = angle.ToString();
if (this.textBox1.Text == "")
{
this.errorProvider1.SetError(this.textBox1, "请输入倾斜的角度");
return;
}
else
{
this.errorProvider1.SetError(this.textBox1, "");
}
xyPoint.X = this.panel1.Width / 2-200;
xyPoint.Y = this.panel1.Height / 2-100;
centerPoint.X = xyPoint.X + a;
centerPoint.Y = xyPoint.Y + b;
Graphics graphics = this.panel1.CreateGraphics();
graphics.SmoothingMode = SmoothingMode.HighQuality;
graphics.Clear(this.panel1.BackColor);
Pen pen = new Pen(Color.Red);
for (int index = 0; index < pointFs.Length; index++)
{
movePoint.X = index * stepLength + xyPoint.X;
xLength = centerPoint.X - movePoint.X;
yLength = (float)(Math.Sqrt((1 - (xLength * xLength) / 40000) * 10000));
movePoint.Y = b - yLength + xyPoint.Y;
pointFs[index] = movePoint;
}
graphics.DrawCurve(pen, pointFs, 1.5f);
for (int index = 0; index < pointFs1.Length; index++)
{
dbYlength = centerPoint.Y - pointFs[index].Y;
pointFs1[index].Y = centerPoint.Y + dbYlength;
pointFs1[index].X = pointFs[index].X;
}
graphics.DrawCurve(pen, pointFs1, 1.5f);
for (int index = 0; index < pointFs.Length; index++)
{
xiePointF = pointFs[index];
double startAngle = Math.Atan2(xiePointF.Y - centerPoint.Y, xiePointF.X - centerPoint.X);
string jiaodu = this.textBox1.Text;
perAngle = int.Parse(jiaodu) * Math.PI / 180;
nowAngle = startAngle + perAngle;
xiedLength = (float)Math.Sqrt(Math.Pow(xiePointF.X - centerPoint.X, 2) + Math.Pow(xiePointF.Y - centerPoint.Y, 2));
xiedPointF.X = centerPoint.X - (float)(xiedLength * Math.Cos(nowAngle));
xiedPointF.Y = centerPoint.Y + (float)(xiedLength * Math.Sin(nowAngle));
xiePointFs[index] = xiedPointF;
}
graphics.DrawCurve(pen, xiePointFs, 1.5f);
for (int index = 0; index < pointFs1.Length; index++)
{
xiePointF = pointFs1[index];
double startAngle = Math.Atan2(xiePointF.Y - centerPoint.Y, xiePointF.X - centerPoint.X);
string jiaodu = this.textBox1.Text;
perAngle = int.Parse(jiaodu) * Math.PI / 180;
nowAngle = startAngle + perAngle;
xiedLength = (float)Math.Sqrt(Math.Pow(xiePointF.X - centerPoint.X, 2) + Math.Pow(xiePointF.Y - centerPoint.Y, 2));
xiedPointF.X = centerPoint.X - (float)(xiedLength * Math.Cos(nowAngle));
xiedPointF.Y = centerPoint.Y + (float)(xiedLength * Math.Sin(nowAngle));
xiePointFs1[index] = xiedPointF;
}
graphics.DrawCurve(pen, xiePointFs1, 1.5f);
}
private void button2_Click(object sender, EventArgs e)//倾斜角度,每次递减10度
{
angle -= 10;
this.textBox1.Text = angle.ToString();
if (this.textBox1.Text == "")
{
this.errorProvider1.SetError(this.textBox1, "请输入倾斜的角度");
return;
}
else
{
this.errorProvider1.SetError(this.textBox1, "");
}
xyPoint.X = this.panel1.Width / 2-200;
xyPoint.Y = this.panel1.Height / 2-100;
centerPoint.X = xyPoint.X + a;
centerPoint.Y = xyPoint.Y + b;
Graphics graphics = this.panel1.CreateGraphics();
graphics.SmoothingMode = SmoothingMode.HighQuality;
graphics.Clear(this.panel1.BackColor);
Pen pen = new Pen(Color.Red);
for (int index = 0; index < pointFs.Length; index++)
{
movePoint.X = index * stepLength + xyPoint.X;
xLength = centerPoint.X - movePoint.X;
yLength = (float)(Math.Sqrt((1 - (xLength * xLength) / 40000) * 10000));
movePoint.Y = b - yLength + xyPoint.Y;
pointFs[index] = movePoint;
}
graphics.DrawCurve(pen, pointFs, 1.5f);
for (int index = 0; index < pointFs1.Length; index++)
{
dbYlength = centerPoint.Y - pointFs[index].Y;
pointFs1[index].Y = centerPoint.Y + dbYlength;
pointFs1[index].X = pointFs[index].X;
}
graphics.DrawCurve(pen, pointFs1, 1.5f);
for (int index = 0; index < pointFs.Length; index++)
{
xiePointF = pointFs[index];
double startAngle = Math.Atan2(xiePointF.Y - centerPoint.Y, xiePointF.X - centerPoint.X);
string jiaodu = this.textBox1.Text;
perAngle = int.Parse(jiaodu) * Math.PI / 180;
nowAngle = startAngle + perAngle;
xiedLength = (float)Math.Sqrt(Math.Pow(xiePointF.X - centerPoint.X, 2) + Math.Pow(xiePointF.Y - centerPoint.Y, 2));
xiedPointF.X = centerPoint.X - (float)(xiedLength * Math.Cos(nowAngle));
xiedPointF.Y = centerPoint.Y + (float)(xiedLength * Math.Sin(nowAngle));
xiePointFs[index] = xiedPointF;
}
graphics.DrawCurve(pen, xiePointFs, 1.5f);
for (int index = 0; index < pointFs1.Length; index++)
{
xiePointF = pointFs1[index];
double startAngle = Math.Atan2(xiePointF.Y - centerPoint.Y, xiePointF.X - centerPoint.X);
string jiaodu = this.textBox1.Text;
perAngle = int.Parse(jiaodu) * Math.PI / 180;
nowAngle = startAngle + perAngle;
xiedLength = (float)Math.Sqrt(Math.Pow(xiePointF.X - centerPoint.X, 2) + Math.Pow(xiePointF.Y - centerPoint.Y, 2));
xiedPointF.X = centerPoint.X - (float)(xiedLength * Math.Cos(nowAngle));
xiedPointF.Y = centerPoint.Y + (float)(xiedLength * Math.Sin(nowAngle));
xiePointFs1[index] = xiedPointF;
}
graphics.DrawCurve(pen, xiePointFs1, 1.5f);
}
private void textBox1_TextChanged(object sender, EventArgs e)//输入倾斜的角度
{
angle = int.Parse(this.textBox1.Text);
}
}
}
C#窗体程序画倾斜一定角度的椭圆的更多相关文章
- 如何给windows窗体程序打包成一个安装包
http://blog.csdn.net/xyy410874116/article/details/6341787 给windows窗体程序打包成一个安装包:具体操作在:http://hi.baidu ...
- 学习java随笔第十一篇:java窗体程序
要开java的窗体程序,就要下载开发窗体的工具. 这里我用的是的myeclipse,可以直接在网上下载安装即可. 我用的是10.0版本的,如果需要汉化的话,可以看一下这篇文章:myeclipse.10 ...
- VS2010 win32项目windows窗体程序 向导生成代码解析
目录: 1.Win32项目的windows窗体程序的向导生成了如下代码 2.手工生成代码如下 3.当消息队列中没有消息需要处理,我们可以利用这段时间处理我们自己的任务 1.Win32项目的window ...
- 使用控制台调试WinForm窗体程序
.程序代码结构 .Win32DebuggerHelper.cs using System.Runtime.InteropServices; /* TODO:使用方法 Win32.AllocConsol ...
- 两种方法:VS2008下C++窗体程序显示控制台的方法——在QT程序中使用cout和cin
老蔡写了一个基于QT的窗体程序,而过去写的类的调试信息都是用cout显示的,苦于窗体程序无法显示cout信息很多信息都看不到,于是就想到让控制台和窗体同时显示.显示控制台方法如下 1.项目(或者叫“工 ...
- C#窗体程序与sql sever 数据库链接
一.所用工具 Visual Studio 2017和SQL Server Management Studio 2012 二.连接 打开SQL Server Management Studio 2012 ...
- winform窗体程序运行后怎样隐藏?
运行winform窗体,我们是怎样隐藏的呢? 例子: 1)创建简单winform窗体 2)编写隐藏窗体程序的代码 3)效果演示 1)创建一个简单的winform窗体MainForm,
- MFC窗体程序中添加调试控制台
在编写复杂程序的过程中,我们经常需要将一些信息输出到文件或者屏幕上.较控制台应用程序,MFC窗体程序要显得麻烦一些! 下面有2种方法来实现为MFC窗体程序添加调试控制台,方便程序员调试程序和了解当前程 ...
- c# WinForm窗体编程中对窗体程序设置快捷键
c# WinForm窗体编程中对窗体程序设置快捷键http://www.cnblogs.com/bison1989/archive/2011/09/19/2180977.html /// <su ...
随机推荐
- [置顶] Linux高编之进程--------fork函数的同步与异步(兄弟子进程和父子孙进程示列)
前面讲述的fork函数的基本用法,下面通过两个程序来说明fork函数同步与异步之间的关系: <1>通过fork函数实现在父进程下的四个兄弟子进程(即异步) : 函数实现代码: #inclu ...
- Linux安装sonarQube
安装sonarQube之前,需要先安装JDK和mysql 服务器/home/azrlnx04/下创建三个文件夹,/java ./mysql. /sonar 一:安装JDK (1)打开http://ww ...
- SQL ID自增列从1开始重新排序 分类: SQL Server 2014-05-19 14:46 652人阅读 评论(0) 收藏
数据库中把ID自增长重置成1: 一般做法:(太麻烦) 复制表数据->删除原表.新建一张表->粘贴: 新方法: 数据库中:新建查询->复制.粘贴一下代码->修改表名,执行即可(先 ...
- java中main函数解析(转载)
从写java至今,写的最多的可能就是主函数 public static void main(String[] args) {} 但是以前一直都没有问自己,为什么要这么写,因为在c语言中就没有这样子的要 ...
- 树莓派(raspberry)启用root账户 分类: 服务器搭建 Raspberry Pi 2015-04-12 18:45 95人阅读 评论(0) 收藏
树莓派使用的linux是debian系统,所以树莓派启用root和debian是相同的. debian里root账户默认没有密码,但账户锁定. 当需要root权限时,由默认账户经由sudo执行,Ras ...
- highgui.h备查 分类: C/C++ OpenCV 2014-11-08 18:11 292人阅读 评论(0) 收藏
/*M/////////////////////////////////////////////////////////////////////////////////////// // // IMP ...
- Instruction (hdu 5083)
Instruction Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tota ...
- 解决error:could not open ...jvm.cfg
出现error:could not open '...jvm.cfg'大多是以前安装jdk或者jre的时候在注册表里注册过,现在安装的文件夹不在或者换了名字,有很多解决方法,最简单的一招是删除java ...
- Java基础知识强化之集合框架笔记29:使用LinkedList实现栈数据结构的集合代码(面试题)
1. 请用LinkedList模拟栈数据结构的集合,并测试: 题目的意思是: 你自己的定义一个集合类,在这个集合类内部可以使用LinkedList模拟,使用LinkedList功能方法封装成 ...
- 关于oracle的函数,存储过程,触发器,序列,视图,左右连接一些的应用 带案例
CREATE TABLE STUDENT( --创建学生表 ID NUMBER(10) PRIMARY KEY, --主键ID NAME VARCHAR2(20), CLASSNAME VA ...