原文:WPF 实现繁花曲线

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/nihang1234/article/details/83346919

XAML:

  1. <Window x:Class="FlowerCurve.MainWindow"
  2. xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  3. xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  4. xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
  5. xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
  6. xmlns:local="clr-namespace:FlowerCurve"
  7. mc:Ignorable="d"
  8. Title="MainWindow" Height="800" Width="800" Loaded="Window_Loaded" WindowStartupLocation="CenterScreen">
  9. <Canvas>
  10. <Path Name="path" Stroke="Red" StrokeThickness="1"/>
  11. </Canvas>
  12. </Window>

后台代码:

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Diagnostics;
  4. using System.Linq;
  5. using System.Text;
  6. using System.Threading;
  7. using System.Threading.Tasks;
  8. using System.Windows;
  9. using System.Windows.Controls;
  10. using System.Windows.Data;
  11. using System.Windows.Documents;
  12. using System.Windows.Input;
  13. using System.Windows.Media;
  14. using System.Windows.Media.Imaging;
  15. using System.Windows.Navigation;
  16. using System.Windows.Shapes;
  17. using System.Windows.Threading;
  18. namespace FlowerCurve
  19. {
  20. /// <summary>
  21. /// Interaction logic for MainWindow.xaml
  22. /// </summary>
  23. public partial class MainWindow : Window
  24. {
  25. private Point _bigCircleCenter = new Point(400, 400);
  26. private double _bigRadius = 400;
  27. private double _smallRadius = 260;
  28. private double _d = 110;
  29. DispatcherTimer timer = new DispatcherTimer();
  30. private double _angle = 0;
  31. private PathFigure _figure;
  32. private double _step = 0.05D;
  33. List<Point> _points = new List<Point>();
  34. public MainWindow()
  35. {
  36. InitializeComponent();
  37. }
  38. private void Draw(PathFigure figure, Point point, bool isStartPoint)
  39. {
  40. if (isStartPoint)
  41. {
  42. figure.StartPoint = point;
  43. }
  44. else
  45. {
  46. figure.Segments.Add(new LineSegment(point, true));
  47. }
  48. }
  49. private void Window_Loaded(object sender, RoutedEventArgs e)
  50. {
  51. timer.Interval = TimeSpan.FromMilliseconds(5);
  52. timer.Tick += Timer_Tick;
  53. timer.Start();
  54. PathGeometry curve = new PathGeometry();
  55. path.Data = curve;
  56. //curve.StartPoint = new Point(_bigRadius - _smallRadius - _d, 0);
  57. //curve.mo
  58. _figure = new PathFigure();
  59. curve.Figures.Add(_figure);
  60. }
  61. private void Timer_Tick(object sender, EventArgs e)
  62. {
  63. Point p = Calculate(_angle);
  64. Draw(_figure, p, _angle == 0);
  65. _points.Add(p);
  66. if (_points.Count > 10)
  67. {
  68. bool finished =Math.Abs(p.X-_points[0].X)<2 && Math.Abs(p.Y - _points[0].Y) < 2;
  69. Debug.WriteLine($"{_points[0].X - p.X} || {_points[0].Y - p.Y}");
  70. if (finished)
  71. {
  72. MessageBox.Show("绘制完成");
  73. timer.Stop();
  74. }
  75. }
  76. _angle += _step;
  77. }
  78. private Point Calculate(double angle)
  79. {
  80. double xr = _bigCircleCenter.X + (_bigRadius - _smallRadius) * Math.Cos(angle);
  81. double yr = _bigCircleCenter.Y - (_bigRadius - _smallRadius) * Math.Sin(angle);
  82. double a = _bigRadius * angle / _smallRadius;
  83. double x = xr + _d * Math.Cos(a);
  84. double y = yr + _d * Math.Sin(a);
  85. Point p = new Point(x, y);
  86. return p;
  87. }
  88. }
  89. }

运行效果:

源代码

WPF 实现繁花曲线的更多相关文章

  1. 使用python和pygame绘制繁花曲线

    前段时间看了一期<最强大脑>,里面展示了各种繁花曲线组合成的非常美丽的图形,一时心血来潮,想尝试自己用代码绘制繁花曲线,想怎么组合就怎么组合. 真实的繁花曲线使用一种称为繁花曲线规的小玩意 ...

  2. WPF贝塞尔曲线示例

    WPF贝塞尔曲线示例 贝塞尔曲线在之前使用SVG的时候其实就已经有接触到了,但应用未深,了解的不是很多,最近在进行图形操作的时候需要用到贝塞尔曲线,所以又重新来了解WPF中贝塞尔曲线的绘制. 一阶贝塞 ...

  3. 缓动公式整理(附:C#实现及WPF原版对比)

    前言 缓动在动画效果中应用非常广泛,在合适的时候使用一些缓动效果会使得效果更加符合人的直观感受,简单来说,会显得更加自然. WPF提供了11种缓动效果,涵盖了大部分的使用场景.不过如果需要在非WPF下 ...

  4. WPF绘制光滑连续贝塞尔曲线

    1.需求 WPF本身没有直接把点集合绘制成曲线的函数.可以通过贝塞尔曲线函数来绘制. 贝塞尔曲线类是:BezierSegment,三次贝塞尔曲线,通过两个控制点来控制开始和结束方向. Quadrati ...

  5. 贝塞尔曲线 WPF MVVM N阶实现 公式详解+源代码下载

    源代码下载 效果图: 本程序主要实现: N阶贝塞尔曲线(通用公式) 本程序主要使用技术 MVVM InterAction 事件绑定 动态添加Canvas的Item 第一部分公式: n=有效坐标点数量 ...

  6. WPF 曲线图表控件(自制)(二)

    原文:WPF 曲线图表控件(自制)(二) 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/koloumi/article/details/775218 ...

  7. WPF 曲线图表控件(自制)(一)

    原文:WPF 曲线图表控件(自制)(一) 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/koloumi/article/details/775092 ...

  8. C#WPF 如何绘制几何图形 图示教程 绘制sin曲线 正弦 绘制2D坐标系 有图有代码

    原文:C#WPF 如何绘制几何图形 图示教程 绘制sin曲线 正弦 绘制2D坐标系 有图有代码 C#WPF 如何绘制几何图形? 怎么绘制坐标系?绘制sin曲线(正弦曲线)? 这离不开Path(Syst ...

  9. WPF使用DynamicDataDisplay.dll显示CPU及内存使用曲线

    原文:WPF使用DynamicDataDisplay.dll显示CPU及内存使用曲线 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/wangshub ...

随机推荐

  1. E11 css hack

    E11      识别\0 { color:red; color:blue \0; } chrome下颜色是红色.IE11是蓝色

  2. UVA 11609 - Teams 组合、快速幂取模

    看题传送门 题目大意: 有n个人,选一个或者多个人参加比赛,其中一名当队长,如果参赛者相同,队长不同,也算一种方案.求一共有多少种方案. 思路: 排列组合问题. 先选队长有C(n , 1)种 然后从n ...

  3. POJ 2590 Steps (ZOJ 1871)

    http://poj.org/problem?id=2590 http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1871 题目大 ...

  4. POJ2739_Sum of Consecutive Prime Numbers【筛法求素数】【枚举】

    Sum of Consecutive Prime Numbers Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 19350 Ac ...

  5. [JS Compse] 4. A collection of Either examples compared to imperative code

    For if..else: const showPage() { if(current_user) { return renderPage(current_user); } else { return ...

  6. Windows Phone 8.1 Tiles, Notifications and Action Center

    (1)Tiles Tiles 也就是磁贴,是 Windows Phone 的一大特色. 一个 Tile 其实可以看成是一个 XML,比如: <tile> <visual> &l ...

  7. HDOJ 5001 Walk

    概率DP dp[j][d] 表示不经过i点走d步到j的概率, dp[j][d]=sigma ( dp[k][d-1] * Probability ) ans = sigma ( dp[j][D] ) ...

  8. 用户之间imp的问题

    今天同事说申请了一个从生产导出的dump文件,须要导入測试库进行測试. 之前做的基本都是本库导出,本库导入的操作,比如:imp test/***@test tables=tbl_fuel file=H ...

  9. 【icpc网络赛大连赛区】Sparse Graph

    Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others) Total Submissi ...

  10. [Angular] Organizing Your Exports with Barrels

    From: import {LoadUserThreadsEffectService} from "./store/effects/load-user-threads.service&quo ...