c++ - 如何在2条正弦曲线之间绘制表面

标签 c++ qt qwt

我很想在à两条窦曲线之间绘制表面。两条窦曲线的时间基准相同,这意味着两条窦的第一个点的x相同,第二个点也....

那我该怎么办呢?我的想法是在2个窦性点之间画一堆线,但是我没有在qwt中找到一个函数让我在两个点​​之间绘制具有相同x和y的线。

如果您有更好的主意,我很乐意听,如果有人已经做过,那么拥有一个主意将是完美的

您可以在下面找到我想做的事的一个例子。

灰色部分正是我想要的。谢谢大家的帮助

enter image description here

最佳答案

您可以使用 QwtPlotIntervalCurve :

#include <QtWidgets>

#include <qwt_plot.h>
#include <qwt_plot_curve.h>
#include <qwt_plot_intervalcurve.h>

#include <cmath>

static double f(double x, double A, double W, double B){
    return A * std::sin(W * x) + B;
}

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    const double deltax = .1;
    const int size = 100;
    QVector<QwtIntervalSample> rangeData(size);
    QVector<QPointF> lowData(size);
    QVector<QPointF> upperData(size);

    for(int i=0; i <size; ++i){
        double x = deltax * i;
        double ylow = f(x, 1, 4, -10);
        double yupper = f(x, 1, 2, 10);
        lowData[i] = QPointF(x, ylow);
        upperData[i] = QPointF(x, yupper);
        rangeData[i] = QwtIntervalSample(x, QwtInterval(ylow, yupper));
    }

    QwtPlot plot;

    QColor bg(Qt::gray);
    bg.setAlpha(150);

    QwtPlotCurve lowcurve;
    lowcurve.setRenderHint( QwtPlotItem::RenderAntialiased );
    lowcurve.setPen(QPen(Qt::gray, 5));
    lowcurve.setSamples(lowData);
    lowcurve.attach(&plot);

    QwtPlotCurve uppercurve;
    uppercurve.setRenderHint( QwtPlotItem::RenderAntialiased );
    uppercurve.setPen(QPen(Qt::gray, 5));
    uppercurve.setSamples(upperData);
    uppercurve.attach(&plot);

    QwtPlotIntervalCurve curve;
    curve.setRenderHint( QwtPlotItem::RenderAntialiased );
    curve.setPen(Qt::white);
    curve.setBrush(bg);
    curve.setStyle(QwtPlotIntervalCurve::Tube);
    curve.setSamples( rangeData );
    curve.attach(&plot);

    plot.resize(640, 480);
    plot.show();

    return a.exec();
}

enter image description here

关于c++ - 如何在2条正弦曲线之间绘制表面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60320527/

相关文章:

C++20 模板模板概念语法

c++ - 如何全屏 QGLWidget?

qt - qmake 设置安装目录

plot - 如何限制 QwtPlot 可以缩小的最大范围?

c++ - 用于查看 Wireshark 重置数据包的 C/C++ 应用程序

c++ - 由于错误 C2244 : "unable to match function definition to an existing declaration",智能指针模板运算符重载失败

c++ - boost multi_index - 如何让它按插入排序?

c++ - 在 Qt 上使用 CMake 配置 VSCode - 找不到 ui_*.h 文件

c++ - 在不影响信号/槽机制的情况下处理由于方法内部的动态分配而导致的内存泄漏

c++ - 运行 QWT 示例程序(.pro)并出现 Visual Studio 2010 错误