Lightning Chart
LightningChart是一款图表显示框架,可以显示2维平面,3维模型以及极坐标图,基于微软自己的图形引擎DirectX(主流图形显示引擎为OpenGL和DirectX),性能十分强大。
1.调用库:LightningChart的库分为好几组,有的是Mvvm模式的,有的是非绑定模式的,所以需要按照需求调用。
2.使用方法:Arction公司提供了中文用户手册如下,包含了所有用法。
CN-Lightningchart-NET-User-manual 10.1.1.pdf
-
3.注意事项
图表标题:所有的lightningChart图表加进界面时拥有Arction公司的默认标题,但是如果点进属性中看可以看到Title是空的,要在xaml的后台代码中加入这一句话更改标题。
var chartTitle = new ChartTitle(); chartTitle.Font = new WpfFont("Times New Roman",24);//图表标题字体的大小和字体名称 chartTitle.Text = "This is Chart Title"; //CurrentChart为图表的名称。 CurrentChart.Title = chartTitle;
-
4.常规图表
LightningChart的所有图表都源于LightningChart控件,区别是在ActiveView设置具体的图表类型,大多数图表相关的属性都是一样的,如标题,背景,填充等等.不一样的是不同的图表所用到的数据是不同的类,如xy用的是SeriesPoint而极坐标图用到的是PolarSeriesPoint.所有的图表都具有自己的轴Axes.
(1)XY点图:
XY图具有XAxis和YAxis的集合,通过往这些集合中添加元素,可以生成很多轴,默认XAxis中的元素是X轴,X轴是横向的,可以生成许多,默认情况下创建ViewXY后要添加X轴和Y轴所组成的图表,其他自己新建的轴可以自定义放置的位置,要添加至少一个X轴和Y轴之后图表才可以显示出来,这时就可以画图了ViewXY.AxisLayout.XAxisAutoPlacement这个属性就是用来控制X轴的放置方式,Y轴同理
添加元素比较简单,实用绑定或者直接添加元素的方法都可以,我用的是MvvM框架,所以可以绑定元素,比较方便.,直接创建seriesPoint数组来存放数据即可,只需提供最基础的X坐标和Y坐标,图表控件会将这些点连起来
(2)极坐标图:
除了笛卡尔坐标系,LightningChart该提供了极坐标系,如果用来展示圆锥曲线,极坐标系将变得非常方便,而且有很多直角坐标公式十分复杂而极坐标公式就相对简单的图形,用极坐标表示起来也很合适.圆度仪测出的数据用极坐标来表示就比较方便,因为知道了角度和幅度可以直接画出来图形.与之相对应的,极坐标图中也要添加相应的轴Axes,它是一个集合,与直角坐标系不同,极轴不区分x和y,值得注意的是,需要至少创建一个axe才可以显示点图。与之相对的点集合为PolarSeriesPoint,只需要给它赋值,就可以显示出来这些点集合连起来的线,也可以在图表属性中设置是否闭合这些点连成的线。每一个PolarSeriesPoint对象都需要赋值角度和幅度,也有其他一些属性比如颜色等等,但是要显示在图表上则至少需要知道这两个值。(3)坐标转换:
当然,经常会有只有极坐标数据或者只有笛卡尔坐标数据的情况,而又想用另一种图表显示出来,这是需要用到坐标转换。LightningChart似乎并没有提供坐标转换的功能,这个自己实现起来也并不复杂。遵序如下的对应关系:
x = ρ ∗ c o s θ x=ρ*cosθ x=ρ∗cosθ
y = ρ ∗ s i n θ y=ρ*sinθ y=ρ∗sinθ
极坐标转换为直角坐标遵循以上的转换关系,其中ρ代表sqrt(x2+y2),即为P点的模。θ为P点与原点的连线与X轴的夹角(逆时针为正方向)。代码中即为
XCoords = (float)(p.Amplitude * Math.Cos(p.Angle * Math.PI / 180)); YCoords = (float)(p.Amplitude * Math.Sin(p.Angle * Math.PI / 180));
C#的Math类库中对角度的表示都是弧度制*/rads,而计算公式应该用的是角度制,所以要乘一个系数 p i / 180 pi/180 pi/180。
而直角坐标转换极坐标则要复杂许多。在第一象限和第四象限中, θ = a r c t a n ( y / x ) θ=arctan(y/x) θ=arctan(y/x),但在二和三象限的点就需要做一些转换了,但ρ永远表示该点的模值。遵循如下的公式:
ρ = x 2 + y 2 \rho=\sqrt{x^2+y^2} ρ=x2+y2
第一象限:
θ = arctan y / x \theta=\arctan{y/x} θ=arctany/x
第二、三象限:
θ = π + arctan y / x \theta=\pi+\arctan{y/x} θ=π+arctany/x
代码中表现为:
if ((xyP.XCoords > 0 && xyP.YCoords > 0) || (xyP.XCoords > 0 && xyP.YCoords < 0))//第一/四象限 { data.Angle = Math.Atan(xyP.YCoords / xyP.XCoords) * parameter; } else if (xyP.XCoords < 0 && xyP.YCoords > 0 || xyP.XCoords < 0 && xyP.YCoords < 0)//第二,三象限 { data.Angle = Math.Atan(xyP.YCoords / xyP.XCoords) * parameter + 180; } else if (xyP.XCoords == 0 && xyP.YCoords > 0) { data.Angle = 90; } else if (xyP.XCoords == 0 && xyP.YCoords < 0) { data.Angle = 270; }