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 ...
随机推荐
- 超链接a的target属性
<a>标签的target意思很明确就是在哪里打开目标文档. 第一种情况: 默认情况:当我们没有设置超链接属性target的value值时默认是_self,即<a target=&qu ...
- 洛谷U2641 木板面积(area)——S.B.S.
题目背景 一年一次的夏令营又要开始了,卡卡西和小伙伴们早就做好了准备,满心期 待着这趟快乐之旅.在一个阳光明媚的清晨,卡卡西在老师的带领下来到了这次 夏令营的首站——“神奇木材加工厂” . 题目描述 ...
- 《Python核心编程》部分代码习题实践(持续更新)
第三章 3-10 交换异常处理方式 代码: #makeTextFile.py #!/usr/bin/env python 'makeTextFile.py' import os ls = os.lin ...
- 三维网格形变算法(Gradient-Based Deformation)
将三角网格上的顶点坐标(x,y,z)看作3个独立的标量场,那么网格上每个三角片都存在3个独立的梯度场.该梯度场是网格的微分属性,相当于网格的特征,在形变过程中随控制点集的移动而变化.那么当用户拖拽网格 ...
- Putty文件夹蓝色太暗问题
Putty文件夹蓝色太暗问题 用Putty通过ssh登陆Linux服务器时,有时候会发现系统默认的蓝色字体太暗,具体解决方法如下: (1)打开putty客户端,选择某登陆Session,然后load: ...
- USB Type-C 接口有什么优点?
USB Type-C 接口有什么优点? 提到USB Type-C接口(以下简称为USB-C),大家第一个能想到的是USB-C接口能正反插,用起来很舒服.了解更多的可能还支持USB-C接口速度更快, 达 ...
- 转:[版本控管]TortoiseSVN 使用,抓出兇手,使用 Blame 查看每一行最後修改的人是誰
类似的官方的使用手段有: https://tortoisesvn.net/docs/nightly/TortoiseSVN_zh_CN/tsvn-dug-blame.html from: http:/ ...
- 网络攻防比赛PHP版本WAF
这次去打HCTF决赛,用了这个自己写的WAF,web基本上没被打,被打的漏洞是文件包含漏洞,这个功能在本人这个waf里确实很是捉急,由于只是简单检测了..和php[35]{0,1},导致比赛由于文件包 ...
- 在脚本中使用export导出变量值
LD_LIBRARY_PATH环境变量可以用于设置Linux动态库的位置,常见的用法如export LD_LIBRARY_PATH=/home/username/foo:$LD_LIBRARY_PAT ...
- appid账号创建及A D-U-M-S码创建
APPID 企业账号创建流程及A D-U-N-S® Number 码创建(需要等2到3周时间,可以先创建成个人账号然后升级成公司账号) 021 26107504 邓白氏编码 1.需要VISI ...