WPF 实现繁花曲线
原文:WPF 实现繁花曲线
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/nihang1234/article/details/83346919
XAML:
<Window x:Class="FlowerCurve.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:FlowerCurve"
mc:Ignorable="d"
Title="MainWindow" Height="800" Width="800" Loaded="Window_Loaded" WindowStartupLocation="CenterScreen">
<Canvas>
<Path Name="path" Stroke="Red" StrokeThickness="1"/>
</Canvas>
</Window>
后台代码:
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Windows.Threading;
namespace FlowerCurve
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
private Point _bigCircleCenter = new Point(400, 400);
private double _bigRadius = 400;
private double _smallRadius = 260;
private double _d = 110;
DispatcherTimer timer = new DispatcherTimer();
private double _angle = 0;
private PathFigure _figure;
private double _step = 0.05D;
List<Point> _points = new List<Point>();
public MainWindow()
{
InitializeComponent();
}
private void Draw(PathFigure figure, Point point, bool isStartPoint)
{
if (isStartPoint)
{
figure.StartPoint = point;
}
else
{
figure.Segments.Add(new LineSegment(point, true));
}
}
private void Window_Loaded(object sender, RoutedEventArgs e)
{
timer.Interval = TimeSpan.FromMilliseconds(5);
timer.Tick += Timer_Tick;
timer.Start();
PathGeometry curve = new PathGeometry();
path.Data = curve;
//curve.StartPoint = new Point(_bigRadius - _smallRadius - _d, 0);
//curve.mo
_figure = new PathFigure();
curve.Figures.Add(_figure);
}
private void Timer_Tick(object sender, EventArgs e)
{
Point p = Calculate(_angle);
Draw(_figure, p, _angle == 0);
_points.Add(p);
if (_points.Count > 10)
{
bool finished =Math.Abs(p.X-_points[0].X)<2 && Math.Abs(p.Y - _points[0].Y) < 2;
Debug.WriteLine($"{_points[0].X - p.X} || {_points[0].Y - p.Y}");
if (finished)
{
MessageBox.Show("绘制完成");
timer.Stop();
}
}
_angle += _step;
}
private Point Calculate(double angle)
{
double xr = _bigCircleCenter.X + (_bigRadius - _smallRadius) * Math.Cos(angle);
double yr = _bigCircleCenter.Y - (_bigRadius - _smallRadius) * Math.Sin(angle);
double a = _bigRadius * angle / _smallRadius;
double x = xr + _d * Math.Cos(a);
double y = yr + _d * Math.Sin(a);
Point p = new Point(x, y);
return p;
}
}
}
运行效果:
源代码
WPF 实现繁花曲线的更多相关文章
- 使用python和pygame绘制繁花曲线
前段时间看了一期<最强大脑>,里面展示了各种繁花曲线组合成的非常美丽的图形,一时心血来潮,想尝试自己用代码绘制繁花曲线,想怎么组合就怎么组合. 真实的繁花曲线使用一种称为繁花曲线规的小玩意 ...
- WPF贝塞尔曲线示例
WPF贝塞尔曲线示例 贝塞尔曲线在之前使用SVG的时候其实就已经有接触到了,但应用未深,了解的不是很多,最近在进行图形操作的时候需要用到贝塞尔曲线,所以又重新来了解WPF中贝塞尔曲线的绘制. 一阶贝塞 ...
- 缓动公式整理(附:C#实现及WPF原版对比)
前言 缓动在动画效果中应用非常广泛,在合适的时候使用一些缓动效果会使得效果更加符合人的直观感受,简单来说,会显得更加自然. WPF提供了11种缓动效果,涵盖了大部分的使用场景.不过如果需要在非WPF下 ...
- WPF绘制光滑连续贝塞尔曲线
1.需求 WPF本身没有直接把点集合绘制成曲线的函数.可以通过贝塞尔曲线函数来绘制. 贝塞尔曲线类是:BezierSegment,三次贝塞尔曲线,通过两个控制点来控制开始和结束方向. Quadrati ...
- 贝塞尔曲线 WPF MVVM N阶实现 公式详解+源代码下载
源代码下载 效果图: 本程序主要实现: N阶贝塞尔曲线(通用公式) 本程序主要使用技术 MVVM InterAction 事件绑定 动态添加Canvas的Item 第一部分公式: n=有效坐标点数量 ...
- WPF 曲线图表控件(自制)(二)
原文:WPF 曲线图表控件(自制)(二) 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/koloumi/article/details/775218 ...
- WPF 曲线图表控件(自制)(一)
原文:WPF 曲线图表控件(自制)(一) 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/koloumi/article/details/775092 ...
- C#WPF 如何绘制几何图形 图示教程 绘制sin曲线 正弦 绘制2D坐标系 有图有代码
原文:C#WPF 如何绘制几何图形 图示教程 绘制sin曲线 正弦 绘制2D坐标系 有图有代码 C#WPF 如何绘制几何图形? 怎么绘制坐标系?绘制sin曲线(正弦曲线)? 这离不开Path(Syst ...
- WPF使用DynamicDataDisplay.dll显示CPU及内存使用曲线
原文:WPF使用DynamicDataDisplay.dll显示CPU及内存使用曲线 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/wangshub ...
随机推荐
- (6)uboot具体解释——关闭缓存和mmu
uboot具体解释--关闭缓存和mmu 当设置完时钟分频以后,uboot就会运行cpu_init_crit汇编函数,这个函数的主要作用就是关闭缓存和mmu.然后调用lowlevel_init函数进行系 ...
- IDEA 创建Web项目并在Tomcat中部署运行(转)
原文地址:https://www.cnblogs.com/tufujie/p/5738250.html IDEA 14.0.5 apache-tomcat-8.0.32 步骤:File->New ...
- 在此页上的 ActiveX 控件和本页上的其它部份的交互可能不安全
版权声明:转载时请以超链接形式标明文章原始出处和作者信息http://xqy266.blogbus.com/logs/66258230.html 在EOS6的项目中,如果采用VC++开发的Active ...
- [Ionic2] Device Interaction in an Ionic App with Cordova Plugins
In this lesson, we are going to learn how to interact with native components through Cordova plugins ...
- JAVA学习路线图---(JAVA1234) 分类: B1_JAVA 2013-10-05 10:22 502人阅读 评论(1) 收藏
转自:http://blog.csdn.net/pplcheer/article/details/12276999 第一阶段-Java基础 这一阶段很重要,关系到你后面阶段的学习,所以务 ...
- 使用Apache FtpServer搭建FTP服务器 [FlashFXP]
<server xmlns="http://mina.apache.org/ftpserver/spring/v1" xmlns:xsi="http://www.w ...
- valgrind,arm-linux交叉编译
1. 下载及解压valgrind-3.9.0 2.CC=/opt/hisi-linux/x86-arm/arm-hisiv200-linux/target/bin/arm-hisiv200-linux ...
- Unity3d优化包的大小
http://wenku.baidu.com/link?url=MEUtNP6k1W7gXK2LcHdKXGqwoTD4HZDsBpsu9iFYjuL3WCIXgl2-rBHhBWP_zo5Xm4Yx ...
- 关于CoordinatorLayout与Behavior的一点分析
Behavior是Android新出的Design库里新增的布局概念.Behavior只有是CoordinatorLayout的直接子View才有意义.可以为任何View添加一个Behavior.Be ...
- 使用AJAX实现页面跳转
$.ajax({ type:"POST", url: //你的请求程序页面随便啦 async:false,//同步:意思是当有返回值以后才会进行后面的js程序. data://请求 ...