ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

直线段-两点线性插值及可视化

2019-10-20 23:03:44  阅读:325  来源: 互联网

标签:font Eigen Vector3d 线性插值 GrphWidget 可视化 QWidget 两点 include


    已知直线段AB,线性插值求插值点C的公式为:C = A*(1.0 - t) + B* t,下面是用QPainter可视化

GrphWidget.h
#ifndef GRPHWIDGET_H
#define GRPHWIDGET_H

#include <QWidget>
#include "ui_grphwidget.h"

class GrphWidget : public QWidget
{
    Q_OBJECT

public:
    GrphWidget(QWidget *parent = 0);
    ~GrphWidget();

    void paintEvent(QPaintEvent* event);

private:
    Ui::GrphWidget ui;
};

#endif // GRPHWIDGET_H

 

GrphWidget.cpp
#include "grphwidget.h"
#include <QPainter>
#include <QPen>
#include <QFont>
#include <Eigen/Eigen>

//////////////////////////////////////////////////////////////////////////

Eigen::Vector3d linerInperpo(Eigen::Vector3d& a, Eigen::Vector3d& b, double t)
{
    return a*(1.0 - t) + b*t;
}
//////////////////////////////////////////////////////////////////////////

GrphWidget::GrphWidget(QWidget *parent)
    : QWidget(parent)
{
    ui.setupUi(this);
}

GrphWidget::~GrphWidget()
{

}

void GrphWidget::paintEvent(QPaintEvent* event)
{
    // 计算
    Eigen::Vector3d A(50.0,50.0,0);
    Eigen::Vector3d B(400.0,360.0,0);
    Eigen::Vector3d C = linerInperpo(A, B, 0.618);

    // 绘制
    QPainter p(this);
    p.drawLine(A(0),A(1),B(0),B(1));

    p.setPen(QPen(Qt::black, 4));
    QFont font = p.font();
    font.setPointSize(14);
    p.setFont(font);
    int textoffx = 4;

    p.drawPoint(A(0),A(1));
    p.drawPoint(B(0),B(1));
    p.drawPoint(C(0),C(1));

    p.setPen(QPen(Qt::blue, 2));
    p.drawText(A(0)+textoffx,A(1),QString("A"));
    p.drawText(B(0)+textoffx,B(1),QString("B"));
    p.drawText(C(0)+textoffx,C(1),QString("C"));

    p.end();
}

 

执行结果,QWidget 屏幕坐标是x水平朝右,y竖直朝下的, 其中点及三维向量计算用的是Eigen库,很小而且只需要配置头文件目录,不需要编译为库就行,开源常称为header-only

 

 

 

标签:font,Eigen,Vector3d,线性插值,GrphWidget,可视化,QWidget,两点,include
来源: https://www.cnblogs.com/abcstar/p/11710733.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有