C# Rotating Oval
This program is used to show how to generate an oval.
The moon's orbit around the sun is an oval two.
锘縰sing System; using System.Windows.Forms; using System.Drawing; using System.Collections.Generic; class Haha : Form { Haha() { WindowState = FormWindowState.Maximized; Paint += draw; Timer t = new Timer(); t.Tick += delegate { Invalidate(); }; init(); t.Interval = 200; t.Start(); Activated += delegate { t.Start(); }; SizeChanged += delegate { if (WindowState == FormWindowState.Minimized) t.Stop(); }; } const int period=100; int now=0; Bitmap[] bit=new Bitmap[period]; void init() { double the=Math.PI*2/period; LinkedList<Point> mark = new LinkedList<Point>(); var p = new Pen(new SolidBrush(Color.Tomato), 1); for (int i = 0; i < bit.Length; i++) { bit[i] = new Bitmap(200,200); var g = Graphics.FromImage(bit[i]); int R = Math.Min(bit[i].Width, bit[i].Height) >> 1; int x = bit[i].Width >> 1; int y = bit[i].Height >> 1; g.DrawEllipse(p, x - R, y - R, R << 1, R << 1); int RR = R >> 1; double xx = x + RR * Math.Cos(the * i); double yy = y + RR * Math.Sin(the * i); g.DrawEllipse(p, (float)(xx - RR), (float)(yy - RR), RR << 1, RR << 1); double r = RR * 0.5; double xxx = xx + r * Math.Cos(-the * i); double yyy = yy + r * Math.Sin(-the * i); mark.AddLast(new Point((int)xxx, (int)yyy)); g.DrawEllipse(p, (float)(xxx - r), (float)(yyy - r), (float)r * 2, (float)r * 2); foreach (var point in mark) { g.FillEllipse(new SolidBrush(Color.Tomato), point.X, point.Y, 2, 2); } g.DrawLine(p, (float)xxx, (float)yyy, (float)xx, (float)yy); g.DrawLine(p, (float)xx, (float)yy, (float)x, (float)y); } } void draw(object o,PaintEventArgs e) { now = (now + 1) % period; int w = Math.Min(ClientSize.Width, ClientSize.Height); e.Graphics.DrawImage(bit[now],0,0,w,w); } static void Main() { Application.Run(new Haha()); } }
The oval rotates around its own corner.
using System; using System.Windows.Forms; using System.Drawing; class Haha : Form { Haha() { Text = "椭圆焦点极坐标方程:顺时针旋转减去旋转角,逆时针旋转加上旋转角"; Paint += draw; WindowState = FormWindowState.Maximized; } double a, b, w, h; double c, e, k; double fx(double the, double phi) { + e * Math.Cos(the - phi)) * Math.Cos(the); } double fy(double the, double phi) { + e * Math.Cos(the - phi)) * Math.Sin(the); } Point mix, miy, corner; double minX(double phi) { , r = Math.PI / * ; ) { ; double lm = l + d; double rm = r - d; if (fx(lm, phi) > fx(rm, phi)) l = lm; else r = rm; } mix.X = (int)fx(l, phi); miy.Y = (int)fy(l, phi); return fx(l, phi); } double minY(double phi) { ; ) { ; double lm = l + d; double rm = r - d; if (fy(lm, phi) > fy(rm, phi)) l = lm; else r = rm; } miy.X = (int)fx(l, phi); miy.Y = (int)fy(l, phi); return fy(l, phi); } void draw(object o, PaintEventArgs pe) { /; Text = ; pe.Graphics.Clear(Color.Wheat); ); * Math.PI / ; a=Math.Min(ClientSize.Width,ClientSize.Height)>>; b=0.618*a; k=b*b/a; c=Math.Sqrt(a*a-b*b); e=c/a; ; ; ; i< * Math.PI; i += the) { +e*Math.Cos(i-phi))*Math.Cos(i); + e * Math.Cos(i-phi)) * Math.Sin(i); pe.Graphics.FillEllipse(,); } pe.Graphics.FillEllipse(,); minX(phi); minY(phi); corner.X=mix.X; corner.Y=miy.Y; mix.X += centerX; mix.Y += centerY; miy.X += centerX; miy.Y += centerY; corner.X += centerX; corner.Y += centerY; pen.Color = Color.Black; pe.Graphics.DrawLine(pen, mix, corner); pen.Color = Color.Blue; pe.Graphics.DrawLine(pen, miy, corner); pe.Graphics.FillEllipse(, ); } static void Main() { Application.Run(new Haha()); } }
C# Rotating Oval的更多相关文章
- Rotating Image Slider - 图片旋转切换特效
非常炫的图片旋转滑动特效,相信会给你留下深刻印象.滑动图像时,我们会稍稍旋转它们并延缓各元素的滑动.滑块的不寻常的形状是由一些预先放置的元素和使用边框创建.另外支持自动播放选项,鼠标滚轮的功能. 在线 ...
- Java对象校验框架之Oval
只要有接口,就会有参数的校验,目前开源的校验框架已经非常多了,不过不得不提一下Oval.OVal 是一个可扩展的Java对象数据验证框架,验证的规则可以通过配置文件.Annotation.POJO ...
- 【POJ 3335】 Rotating Scoreboard (多边形的核- - 半平面交应用)
Rotating Scoreboard Description This year, ACM/ICPC World finals will be held in a hall in form of a ...
- Python Tkinter canvas oval原理
Ovals, mathematically, are ellipses, including circles as a special case. The ellipse is fit into a ...
- poj 3335 Rotating Scoreboard - 半平面交
/* poj 3335 Rotating Scoreboard - 半平面交 点是顺时针给出的 */ #include <stdio.h> #include<math.h> c ...
- Android - shape圆形画法(oval)
shape圆形画法(oval) 本文地址: http://blog.csdn.net/caroline_wendy 1. 创建一个目录drawable, 用于存放xml类型的图片资源; 2. 在dra ...
- poj 3335 Rotating Scoreboard(半平面交)
Rotating Scoreboard Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 6420 Accepted: 25 ...
- 山东省ACM多校联盟省赛个人训练第六场 poj 3335 D Rotating Scoreboard
山东省ACM多校联盟省赛个人训练第六场 D Rotating Scoreboard https://vjudge.net/problem/POJ-3335 时间限制:C/C++ 1秒,其他语言2秒 空 ...
- 通过groovy表达式拓展oval——实现根据同一实体中的其他属性值对某个字段进行校验
在java的参数校验中,开源验证框架OVAL基本能够满足所有需求,如下面通过简单的添加注解,就可实现对参数的非空和长度校验. @NotNull(message="计息周期月数不能为空&quo ...
随机推荐
- android中的数据存取-方式一:preference(配置)
这种方式应该是用起来最简单的Android读写外部数据的方法了.他的用法基本上和J2SE(java.util.prefs.Preferences)中的用法一样,以一种简单. 透明的方式来保存一些用户个 ...
- python class对象转换成json/字典
# -*- encoding: UTF-8 -*- class Student: name = '' age = 0 def __init__(self, name, age): self.name ...
- ZBrush中文版ZBrushCore震撼来袭
北京时间2016年9月30日,Pixologic公司召开新闻发布会,宣布ZBrush精简版ZBrushCore正式发布.该版本不仅支持中文,还支持多国语言,包括法语.西班牙语等.简单点来说,ZBrus ...
- (六)责任链模式-C++实现
使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系.将这些对象连成一条链,并沿着这条链传递请求,直到有一个对象处理它为止. 责任链模式是使用多个对象处理用户请求的成熟模式,它的关键 ...
- POJ3666Making the Grade[DP 离散化 LIS相关]
Making the Grade Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 6445 Accepted: 2994 ...
- Vijos1053 Easy sssp[spfa 负环]
描述 输入数据给出一个有N(2 <= N <= 1,000)个节点,M(M <= 100,000)条边的带权有向图. 要求你写一个程序, 判断这个有向图中是否存在负权回路. 如果从一 ...
- NOIP2000进制转换
题目描述 我们可以用这样的方式来表示一个十进制数: 将每个阿拉伯数字乘以一个以该数字所处位置的(值减1)为指数,以10为底数的幂之和的形式.例如:123可表示为 1*10^2+2*10^1+3*10^ ...
- u-boot移植初步尝试-tiny4412
获取u-boot源代码 在u-boot官方网站下载uboot源码.ftp://ftp.denx.de/pub/u-boot/ 因为是第一次移植uboot,所以这里选的版本是 u-boot-2013.0 ...
- 利用MySQL存储过程分割字符串
(转)http://tec.5lulu.com/detail/104krn1e6p2w78d77.html 现有一段字符串,如apple,banana,orange,pears,grape,要把它按照 ...
- java 28 - 7 JDK8的新特性 之 接口可以使用方法
JDK8的新特性: http://bbs.itcast.cn/thread-24398-1-1.html 其中之一:接口可以使用方法 interface Inter { //抽象方法 public a ...