经过一些点,画三维3D曲面,贝塞尔曲面

需求:有时间T-轴,频率F-轴,幅度A-轴。同一时间点的,F-轴上有4个频点,35KHz,36KHz,37KHz,38KHz。

这4个频率对应的有不同的幅度A,根据List画出一个频带,表示不同时间,4个频率的幅度值。

本项目是WPF项目,使用到了GitHub的开源项目,helix-toolkit

https://github.com/helix-toolkit/helix-toolkit

网址里面有该开源项目的介绍,说明和使用方法。

话不多说,先上图让大家看看效果。

经过一些点,画三维3D曲面,贝塞尔曲面_第1张图片

经过一些点,画三维3D曲面,贝塞尔曲面_第2张图片

经过一些点,画三维3D曲面,贝塞尔曲面_第3张图片

经过一些点,画三维3D曲面,贝塞尔曲面_第4张图片

前两张图是最终应用程序使用的SurfacePlot库项目的效果,红色的圆点是经过的点,也是我们已知的点,把鼠标悬停在红色点上可以显示该点的z坐标值,同时该点变成金色。下面两张图是开发该项目时使用的Demo,表达可以改变曲面的颜色。

下图是使用如下数据计算出来的曲面。

var hehe = new List {
                new int[4]  { 24499000,2,5,10000000} ,
                new int[4] { 2,1000,10000000,3} ,
                new int[4]  { 5,2,100000000,0 },
                new int[4] {0 ,3 ,3,5} };
            for (int i = 0; i < 3; i++)
            {
                hehe.Add(hehe[i]);
            }

经过一些点,画三维3D曲面,贝塞尔曲面_第5张图片

只取上面数据的第一条显示如下:

经过一些点,画三维3D曲面,贝塞尔曲面_第6张图片

先通过已知的x值相同的4个点,计算4个点中间的点(每两个点之间有9个点)一列一共有31个点。再通过同样的方法计算y轴相同,每两个已知点之间的9个插入点。

4个点可以将曲线分成3段,左右两边的曲线上的点通过二次贝塞尔曲线计算,需要解一元二次方程。中间曲线上的点通过3次贝塞尔曲线计算,需要解一元三次方程。这些算法都在代码中实现。

求贝塞尔曲线控制点算法,来自于 http://blog.csdn.net/bravebean/article/details/51395280

解一元二次,一元三次方程的算法来源,在源代码里面都有注释。

当只有两条数据的时候,没法通过3个点计算两次贝塞尔曲线,所以,我将第二列点,复制到第三列计算曲面。算法如下图:

经过一些点,画三维3D曲面,贝塞尔曲面_第7张图片

该项目发布在码云上 https://gitee.com/yunanzhang/SurfacePlot

如果需要技术支持,可以联系扣扣:592589365,Email:[email protected]

你可能感兴趣的:(WPF,helixtoolkit,三维,贝塞尔曲面,WPF)