WPF点补间、拟合回归直线

1,path画刷,绘制正弦 点,线;

生成正弦点

                profilePoint.Value =76 * (1 - Math.Sin(i * Math.PI / 92));
                profilePoint.Type = 1;

画点

 1             EllipseGeometry el = new EllipseGeometry();
 2             el.Center = p;
 3             el.RadiusX = 0.5;
 4             el.RadiusY = 0.5;
 5
 6             Path mypath = new Path();
 7             mypath.Stroke = s;
 8             mypath.StrokeThickness = 1;
 9             mypath.Data = el;
10
11             panelCanvas.Children.Add(mypath);

画线

 1             LineGeometry line = new LineGeometry();
 2             line.StartPoint = startPoint;
 3             line.EndPoint = endPoint;
 4
 5             Path mypath = new Path();
 6             mypath.Stroke = s;
 7             mypath.StrokeThickness = 1;
 8             mypath.Data = line;
 9
10             panelCanvas.Children.Add(mypath);

2,回归直线

 1         /// <summary>
 2         /// 最小二乘法计算回归直线
 3         /// </summary>
 4         /// <param name="listPoints">最小二乘法计算单位</param>
 5         /// <returns></returns>
 6         public ApproximateLine calApproximateLine(List<Point> listPoints)
 7         {
 8             ApproximateLine appr = new ApproximateLine();
 9             double total = 0;       //临时变量
10             double averageX = 0;    //X平均值
11             double averageY = 0;    //Y平均值
12             double dispersion = 0;  //协方差
13             double b = 0;  //斜率
14             double a = 0;  //y轴截距
15             //x平均值计算
16             total = 0;
17             for (int i = 0; i < listPoints.Count; i++)
18             {
19                 total += listPoints[i].X;
20             }
21             averageX = total / listPoints.Count;
22             //y平均值计算
23             total = 0;
24             for (int i = 0; i < listPoints.Count; i++)
25             {
26                 total += listPoints[i].Y;
27             }
28             averageY = total / listPoints.Count;
29             //协方差计算
30             total = 0;
31             for (int i = 0; i < listPoints.Count; i++)
32             {
33                 total += ((listPoints[i].Y - averageY)*(listPoints[i].X - averageX));
34             }
35             dispersion = total / listPoints.Count;
36             //斜率计算
37             total = 0;
38             double tmp = 0;
39             for (int i = 0; i < listPoints.Count; i++)
40             {
41                 total += listPoints[i].Y * listPoints[i].X;
42                 tmp += Math.Pow(listPoints[i].X, 2);
43             }
44             b = (total - listPoints.Count*averageX*averageY)/(tmp - listPoints.Count*averageX*averageX);
45             //截距计算
46             a = averageY - b * averageX;
47             //确定起止点坐标
48             ScaleProfilePoint p1 = new ScaleProfilePoint();
49             ScaleProfilePoint p2 = new ScaleProfilePoint();
50             p1.Type = 1;
51             p1.ValueX = listPoints[0].X;
52             p1.ValueZ = a + b * p1.ValueX;
53             p2.Type = 1;
54             p2.ValueX = listPoints[listPoints.Count-1].X;
55             p2.ValueZ = a + b * p2.ValueX;
56             //填充返回值
57             appr.Dispersion = dispersion;
58             appr.Horizontal = true;
59             appr.StartPnt = p1;
60             appr.EndPnt = p2;
61             return appr;
62         }

3,去除canvas内的元素,清空画布

this.panelCanvas.Children.Clear();

附上工程源码

时间: 2024-10-10 02:18:50

WPF点补间、拟合回归直线的相关文章

Android开发之补间动画、

四种补间动画: 1.透明: 2.缩放: 3.位移: 4.旋转: 1 //点击按钮 实现iv 透明的效果 动画 2 public void click1(View v) { 3 //1.0意味着着完全不透明 0.0意味着完全透明 4 AlphaAnimation aa = new AlphaAnimation(1.0f, 0.0f); 5 aa.setDuration(2000); //设置动画执行的时间 6 aa.setRepeatCount(1); //设置重复的次数 7 aa.setRepe

Android开发实战之补间动画和属性动画

说起动画,其实一点也不陌生,在使用一款app的时候为了优化用户体验,多多少少的,都会加入动画. 安卓中的动画,分为两大类:补间动画和属性动画.本篇博文会详细介绍总结这两大动画,希望本篇博文对你的学习和生活有所帮助. **补间动画** 补间动画分为四类:平移动画,旋转动画,缩放动画和渐变动画.这几类动画用法都差不多,只是对象参数不同这里我统一展示出来.以下是效果图: 实现代码很简单: btn1.setOnClickListener(new View.OnClickListener() { @Ove

Android开发之Tween(补间动画)完全解析(下)

欢迎转载,转载请注明出处:http://blog.csdn.net/dmk877/article/details/51980734 在上一篇文章中,我们详细讨论了Tween动画的xml的实现以及interpolator的使用,相信通过上篇文章大家对Tween动画的xml属性的配置会有一个详细的理解,当然这篇文章也是承接上篇文章,所以强烈建议先阅读上篇文章:Android开发之Tween(补间动画)完全解析(上),这篇文章将从代码的角度实现上篇文章的效果.如有疑问请留言,如有谬误欢迎批评指正. T

android 动画(1) 补间动画

android动画: 3.0以前,android支持两种动画模式,tween animation,frame animation, 3.0中又引入了一个新的动画系统:property animation, 这三种动画模式在SDK中被称为 property animation,        属性动画: view animation,   补间动画:  给出两个关键帧,通过一些算法将给定属性值在给定的时间内在两个关键帧间渐变. (Tween animation) drawable animatio

Android动画--帧动画和补间动画

帧动画 首先我们定义在drawable文件夹下定义一个xml文件 里面包含我们要播放的动画的图片,以及每一帧动画的播放的时长 <?xml version="1.0" encoding="utf-8"?> <animation-list xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@mi

实现逐帧动画和补间动画两种动画效果

1.逐帧动画(Frame Animation)通常在Android项目的res/drawable/目录下面定义逐帧动画的XML模板文件.编码的时候,需要在动画模板文件的<animation-list>标签中依次放入需要播放的图片,并设置好播放的间隔时间. <animation-list xmlns:android="http://schemas.android.com/apk/res/android" android:oneshot="false"

深入学习Phaser补间动画

Tweens是什么? Tweens通常被称为补间动画.补间动画是指在确定好两个关键帧之后,由计算机自动生成这两帧之间插补帧,从而实现动画的过程.例如,物体从当前位置在两秒内向右移动200个像素,只要设置好目标位置(当前位置的右边200像素)和时长(两秒),则计算机会自动生成补间动画,在两秒内使物体从当前位置移到目标位置. 创建一个Tween 补间的目标对象 最常见的创建一个补间动画的语句如下所示: var tween =this.game.add.tween(this.sprite).to({ 

Android中的补间动画(tween)的简单使用

相对帧动画,补间动画(tween)可以这么理解:我们不必像帧动画一样指定动画的每一帧,只需定义一个动画的开始和结束关键帧,而中间变化的帧由系统帮我们计算. tween动画可以分为下面几种: AlphaAnimation(透明渐变动画): 示例:res/anim/alpha.xml <?xml version="1.0" encoding="utf-8"?> <alpha xmlns:android="http://schemas.andr

高速上手Unity中最好的补间动画插件DFTween

?? 出处:http://blog.csdn.net/u010019717 author:孙广东      时间:2015.3.17   23:00 DFTween 是一个在 Unity 游戏引擎中高速和easy使用的animation动画库. 它支持不论什么对象的tweening补间的属性, 并能够轻松地进行工作与您自己自己定义数据类型.API 非常简单可是功能非常强大,使其易于创建复杂的tweens补间和sequences序列.它已被优化从优秀性能.同一时候具有低内存和低CPU 要求. ·高