基于QCustomPlot实现的Nyquist图、Nichols图
目录
1.前言
2.底图预览
2.1Nyquist图
2.2Nichols图
3.附着标记点实现
4.代码附录
1.前言
Nyquist(奈奎斯特)图、Nichols(尼科尔斯)图是两种频率分析图表,与之相近的还有Bode图。由于其业务特性特性,除开X-Y轴数据以外,这两种图表有很多辅助内容需要去绘制,比如M圆/等值线、N圆/等值线等,这些内容本文统一称之为底图。
底图的内容是固定的,由纯粹的数学公式推导出,而与实际X-Y数据无关。本文基于QCustomPlot、Qt、C++代码,绘制出了Nyquist、Nichols底图,可以方便使用作为图表背景,继而接入个人所需数据,从而快速的实现两种图表效果。
本文还附带提供了基于两种业务场景的标记点实现。
2.底图预览
2.1Nyquist图
要素内容:
(1)XY轴(实轴、虚轴)
(2)M圆(蓝色圆)
(3)N圆(粉色圆)
(4)单位圆(绿色圆)
(5)零点,(-1,0)极值点
2.2Nichols图
要素内容:
(1)M等值线、N等值线
(2)临界点
(3)周期特性。图表初始时绘制-720度至360度,三个周期的Nichols底图,该范围外的底图只有在可视时,才会被创建
3.附着标记点实现
QCPCurve:QCustomPlot中的一个曲线类,通过输入一系列的散点(实际点),在界面上拟合、显示出一条曲线。
实现了两个标记点两个业务需求:
(1)对于图表上的任意一条QCPCurve曲线,仅存在一个凸显的标记点。该标记点对应曲线上实际点位置;该标记点可以被鼠标拖动至不同位置。
(2)对于图表上的任意一条QCPCurve曲线,可以存在多个凸显的标记点。该标记点通过alt+left mouse添加、删除;该标记点对应曲线上实际点位置;该标记点可以被鼠标拖动至不同位置。
4.代码附录
代码压缩包见文章开头,有三类文件:
(1)nyquist_chart.h/cpp:nyquist底图的实现代码。
(2)nichols_chart.h/cpp:nichols底图实现代码。
(3)curve_data_marker.h/cpp:标记点实现代码。
备注:以上代码需要引入QCustomPlot开源库,需自行下载。
