qwt的极坐标画雷达方向图

qwt的极坐标画天线方向图
请先看这位博主的专业文章,上面有权威讲解
qwt的极坐标画雷达方向图_第1张图片
方向图 曲线方程:matlab,引用博主的公式

 f=3e10;
 lamda=(3e8)/f;
 beta=2.*pi/lamda; 
 n=2; 
 t=0:0.01:2*pi;
 d=lamda/4; 
 W=beta.*d.*cos(t);
 z1=((n/2).*W)-n/2*beta*d;
 z2=((1/2).*W)-1/2*beta*d;
 F1=sin(z1)./(n.*sin(z2));
 K1=abs(F1);
 polar(t,K1);

开始绘画
qwt的极坐标:

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include "PolarData.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
//整个if(1)在设置坐标
if(1)
{
        // 设置标题
       ui->qwtPolarPlot->setTitle(QStringLiteral("qwtPolarPlot"));
        //  设置背景颜色
       ui->qwtPolarPlot->setPlotBackground (QBrush( Qt::yellow, Qt::SolidPattern ));
           // 设置网格效果属性
       QwtPolarGrid *grid = new QwtPolarGrid();
       grid->setFont(QFont("Microsoft YaHei UI Light", 16, QFont::Bold));
       grid->setPen(QPen(Qt::blue, 1, Qt::SolidLine));

       // 设置坐标数值样式
       grid->setAxisPen(QwtPolar::AxisTop,QPen(Qt::red));
       grid->setAxisPen(QwtPolar::AxisRight,QPen(Qt::black));
       grid->attach(ui->qwtPolarPlot);

       // 添加数值(不设置网格,看不到效果)
       //圆环的角度范围,0-360度,间隔30度
       ui->qwtPolarPlot->setScale(QwtPolar::ScaleAzimuth, 0, 360, 30);  // 圆环数值范围
       //圆环半径0-100,间隔5
       ui->qwtPolarPlot->setScale(QwtPolar::ScaleRadius, 0, 100, 5);     // 半径范围
       //显示网格
       grid->showGrid(QwtPolar::AxisRight,false);
      //显示坐标轴
       grid->showAxis(QwtPolar::AxisLeft,true);
       grid->showAxis(QwtPolar::AxisTop,true);
       grid->showAxis(QwtPolar::AxisBottom,false);
  }
//整个if(2)在绘制第一条方向图
if(2)
{
      // 画第一条方向图
       QwtPolarCurve *polarCurve = new QwtPolarCurve();
       // polarCurve->setPen(QPen(Qt::darkGray,5));
       polarCurve->setPen(QPen(Qt::red,4));
      //PolarData存放第一条曲线
       //这个类PolarData,存放第二条方向图的数据
      这里这里这里就是下面那个类
       PolarData *data = new PolarData();
       polarCurve->setData(data);
       polarCurve->attach(ui->qwtPolarPlot);
}
//整个if(3)在绘制第二条方向图
if(3)
{
      // 画第二条方向图
        QwtPolarCurve *polarCurve1 = new QwtPolarCurve();
        polarCurve1->setPen(QPen(Qt::darkGray,5));
        polarCurve1->setPen(QPen(Qt::green,4));
      //这个类PolarData1,存放第二条方向图的数据
      这里这里这里就是下面那个类
        PolarData1 *data1 = new PolarData1();
        polarCurve1->setData(data1);
        
        polarCurve1->attach(ui->qwtPolarPlot);
}
}
MainWindow::~MainWindow()
{
    delete ui;
}

要新建一个类存放数据:重写3个虚函数
每画一条曲线,就新建一个类

#ifndef POLARDATA_H
#define POLARDATA_H
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include
#include
#include 
//第一条方向图
class PolarData:public QwtSeriesData
{
  public:
	//这里的size是角度最大360
    virtual size_t size() const
    {
        return 360;
    }
	//这里很重要,在这里填充数据
    virtual QwtPointPolar sample(size_t size) const
    {
    	//下面是曲线
        double data;
        data = (size)/180.0 *M_PI;
        float t=data;

        double lamda=0.01;
        double beta=200*M_PI;
        int  n=10;                 //天线阵元数目
        double d=lamda/4;  //0.01/4         //假设阵元间距为波长的四分之一

        double  W=beta*d*cos(t);
        double  z1=5*(W-0.5*M_PI);
        double  z2=0.5*(W-0.5*M_PI);

        double F1=sin(z1)/(10*sin(z2));
        F1=abs(F1);         //函数对数组元素进行绝对值处理的函数
        int K3=F1*100; //我去掉了小数点取整

		//极坐标坐标点
        return QwtPointPolar(size,K3);
    }

    virtual QRectF boundingRect() const
    {
        return QRectF(5.0,5.0,10,10);
    }

};
//第二条方向图
class PolarData1:public QwtSeriesData
{
  public:

    virtual size_t size() const
    {
        return 540;
    }

    virtual QwtPointPolar sample(size_t size) const
    {
        double data;
        data = (size-180)/180.0 *M_PI;
        float t=data;

        double lamda=0.01;
        double beta=200*M_PI;
        int  n=16;                 //天线阵元数目
        double d=lamda/4;  //0.01/4         //假设阵元间距为波长的四分之一

        double  W=beta*d*cos(t);
        double  z1=5*(W-0.5*M_PI);
        double  z2=0.5*(W-0.5*M_PI);

        double F1=sin(z1)/(10*sin(z2));
        F1=abs(F1);         //函数对数组元素进行绝对值处理的函数
        int K3=F1*100; //我去掉了小数点取整
        return QwtPointPolar(size,K3);
    }

    virtual QRectF boundingRect() const
    {
        return QRectF(5.0,5.0,10,10);
    }

};
#endif // POLARDATA_H

你可能感兴趣的:(qt)