WPF特效-绘制实时2D激光雷达图

原文:WPF特效-绘制实时2D激光雷达图

接前两篇:

https://blog.csdn.net/u013224722/article/details/80738619

https://blog.csdn.net/u013224722/article/details/80738995

除了c# GDI 、Opencv(c++)、 c# Emgu绘图外,其实c#? WPF绘图功能也很强大。上文中之所以最终使用了Emgu绘图 ,只是因为在踩坑过程中尝试使用了Emgu的图像处理函数。 即首先将List<double>的数据集合处理成DrawingImage然后得到RenderTargetBitmap,再转换为System.Drawing.Bitmap 再转换为Emgu.CV.Image。 所以后续的实验中直接就使用了Emgu绘图,处理完成后转换为BitmapSource在WPF界面呈现。其实完全使用WPF的绘图方式也能实现实时雷达图效果。

如:

绘制效率也挺不错的。上面的Gif,每秒10帧,每帧760个数据点。? 显示成弧形是因为我将数据截断了,即设定了最大值范围,超过了则等于设定的最大值。

 #region Data Processing

        private DrawingGroup DrawingGroup;

        private void InitRadarVisualDraw()
        {
            this.DrawingGroup = new DrawingGroup();
            DrawingImage oImgSrc = new DrawingImage(this.DrawingGroup);
            this.ImgMainZm.Source = oImgSrc;

            this.ImgMainZm.Height = this.RadarRadius;
            this.ImgMainZm.Width = this.RadarRadius * 1920d / 1080d;
            this.IntervalDegree = 240d / 760d;
        }

        private double RadarRadius = 1000d;
        private double IntervalDegree = 0;

        private void DrawRadarDatas(List<double> ltDistances)
        {
            try
            {
                this.Dispatcher.BeginInvoke(DispatcherPriority.Normal, (Action)(() =>
                {
                    using (DrawingContext oDrawContent = this.DrawingGroup.Open())
                    {
                        oDrawContent.DrawRectangle(new SolidColorBrush(Colors.Black), new Pen(),
                            new Rect(0, 0, this.ImgMainZm.Width, this.ImgMainZm.Height));
                        oDrawContent.DrawEllipse(new SolidColorBrush(Colors.Green), new Pen(),
                               new Point(this.ImgMainZm.Width/2d, this.ImgMainZm.Height-10), 10, 10);
                        for (int i = 0; i < ltDistances.Count; i++)
                        {
                            double lDistance = ltDistances[i];
                            double dDegree = -120d + i * this.IntervalDegree;
                            double dRadian = Utilitys.ConvertToRads(dDegree);
                            double dX = this.ImgMainZm.Width / 2d + lDistance * Math.Sin(dRadian);
                            if (dX < 0)
                                dX = 0;
                            if (dX > this.ImgMainZm.Width)
                                dX = this.ImgMainZm.Width;
                            double dY = lDistance * Math.Cos(dRadian);

                            oDrawContent.DrawEllipse(new SolidColorBrush(Colors.Green), new Pen(),
                                new Point(dX, dY), 3, 3);
                        }
                    }
                }));

            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
        }

        #endregion

原文地址:https://www.cnblogs.com/lonelyxmas/p/9472710.html

时间: 2024-11-09 14:03:14

WPF特效-绘制实时2D激光雷达图的相关文章

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

C#WPF 如何绘制几何图形? 怎么绘制坐标系? 这离不开Path(System.Windows.Shapes)和StreamGeometry(System.Windows.Media)类. 一.建立WPF工程 二.添加代码 MainWindow.xaml 中代码 <Window x:Class="WPFDrawingTraning.MainWindow"         xmlns="<a target=_blank href="http://sche

WPF中使用amCharts绘制股票K线图

原文:WPF中使用amCharts绘制股票K线图 本想自己用GDI绘图, 通过数据直接绘制一张蜡柱图, 但觉得这样子的功能比较少, 所以到网上搜索一些能画出K线图的控件. 发现DynamicDataDisplay挺好的, 在它的开发截图里也发现可以绘制蜡柱图, 但文档好像做的不是很好, 不知道怎么用它来画, 在寻找它比较好的例子的时候发现有人推荐用amCharts绘制, 所以便去看了一下, 发现挺好用的, 效果如下: 准备工作 先要去这里下载amCharts Stock Chart for WP

【HAPPY FOREST】用Unreal Engine4绘制实时CG影像

用Unreal Engine绘制实时CG影像 近年来,对实时CG的关心热度越来越高,但要想弥补与预渲染方式的差异并不是那么容易.这里就有影像业界的先锋进行挑战的MARZA ANIMATION PLANET.本文中通过Demo Movie的制作,来看看实时CG的可能性. 对应现状的问题意识与先见之明相结合的实验性项目 近年来的实时CG的品质的提升特别显著,最新的影像出现使得CG影像的相关人员兴奋起来,不光是影像的美丽程度,还感到了这种技术的可能性.这次介绍的MARZA ANIMATION PLAN

如何绘制酷炫折线图? 视频教程 + 源码

利用LightningChart 绘制折线图教程: https://pan.baidu.com/s/1slslor7 源代码: https://www.arction.com/wp-content/uploads/2017/12/WpfAppLinePlotDemo.zip 查看更多详情: http://arction.cn/ LightningChart是Visual Studio插件,為Windows Forms及WPF最快的2D/3D數據可視化SDK.由原廠Arction製作的教學影片,提

2D激光雷达如何实现3D应用?

2D激光雷达除了实现定位.建图.多点触摸等应用外,还能用来做3D建模与环境扫描.肯定会有人好奇,2D激光雷达扫描出来的图像应该是平面图,怎么将2D平面图变为三维的立体图呢? 目前市面上实现这种效果的方式主要有两种: 一种是采用现状激光器,将原先的一个点变成一条线型光,如下图的效果: 另一种方式是使用一个2D激光雷达扫描,同时在另一个轴进行旋转,从而扫描出3D信息. 以下主要为大家介绍第二种方法,通过激光雷达的不断扫描,不需反射棱镜即可快速获取各转角情况下目标物体扫描截面到扫描仪的具体点云数据,同

.NET实时2D渲染入门&#183;动态时钟

.NET实时2D渲染入门·动态时钟 从小以来"坦克大战"."魂斗罗"等游戏总令我魂牵梦绕.这些游戏的基础就是2D实时渲染,以前没意识,直到后来找到了Direct2D.我的2D实时渲染入门,是从这个动态时钟开始的. 本文将使用我写的"准游戏引擎"FlysEngine完成.它是对Direct2D和.NET库SharpDX浅层次的封装,隐藏了一些细节,简化了一些调用.同时还保留了Direct2D的原汁原味. 本文的最终效果如下: 绘制动态时钟 要绘制动

用canvas绘制的饼状图,6等分,颜色随机

都说程序员懒,生活还是不能懒的,比如洗头.洗脸,当然也包括是分享咯.下面分享一下我用H5的新标签canvas绘制的饼状图,颜色是随机生成的,动态生成6等分,我还做了随机生成数据的, 配上文字,每份所占的比例就显而意见.,这点用在分析数据还是挺好的.图片如下; canvas 是 HTML5 提供的一个用于展示绘图效果的标签. canvas 原意画布, 帆布. 在 HTML 页面中用于展示绘图效果. 最早 canvas 是苹果提出的一个方案, 今天已经在大多数浏览器中实现.. 基本使用语法: 使用

Asp.net mvc 实时生成缩率图到硬盘

之前对于缩率图的处理是在图片上传到服务器之后,同步生成两张不同尺寸的缩率供前端调用,刚开始还能满足需求,慢慢的随着前端展示的多样化,缩率图已不能前端展示的需求,所以考虑做一个实时生成图片缩率图服务. 每次调用实时生成缩率图,不缓存着实有点浪费,所以在生成缩率的同时缓存到硬盘一份,效率提高很多. 之前从网上看了一下有人用nginx + lua实现的,效率那是没什么可说的,但是时间紧迫,自己也没时间去研究,所以暂时先用aps.net mvc4来实现 一个,以后有时间了,再慢慢修改. 用自己熟悉的.n

canvas 2d 贴图技术实践

最近在公司内部的技术协会论坛里闲逛的时候,无意中发现了一篇手淘前端大牛岑安两年前写的博文,讲述了canvas的2d贴图技术.看到后觉得相当神奇.于是就自己实现了一下.不过岑安前辈的那篇博文也只是大概讲述了一下实现思路,整个逻辑还是自己慢慢摸索出来的,过程还是挺心酸的,所以在此记录一下并且分享一下,让跟我一样喜欢canvas的人有所收获吧. 废话不说,先把demo贴出来,好歹让大伙看看我们要实现怎样的效果: 第一个demo: 图像拉扯变形demo_1 第二个demo: 图像3d变形demo_2 看