Qt用演算法畫平滑曲線(cubicTo)

2021-08-17 11:36:33 字數 1366 閱讀 4578

qt 中可以使用 qpainterpath::cubicto() 函式繪製如下的平滑曲線

函式原型:void qpainterpath::​cubicto(const qpointf & c1, const qpointf & c2, const qpointf & endpoint)

使用c1和c2指定的控制點在當前位置和給定端點之間新增三次貝塞爾曲線,新增曲線後,當前位置將更新為曲線的終點

繪製平滑曲線的關鍵是控制點的計算,sp 為線段的起始點,ep 為線段的終點,c1,c2 為貝塞爾曲線的控制點,其座標計算如下

上**:

標頭檔案:

#ifndef widget_h

#define widget_h

#include

namespace ui

class widget : public qwidget

;#endif // widget_h

cpp檔案:

#include "widget.h"

#include "ui_widget.h"

#include

widget::widget(qwidget *parent) :

qwidget(parent),

ui(new ui::widget)

widget::~widget()

void widget::paintevent(qpaintevent *)

qpainter painter(this);

//設定渲染提示為消除鋸齒

painter.setrenderhint(qpainter::antialiasing, true);

//設定畫筆顏色和寬度

painter.setpen(qpen(qt::black, 2));

//將座標系轉換為向量

painter.translate(40, 130);

//繪製path

painter.drawpath(path);

// 繪製曲線上的點

painter.setbrush(qt::gray);

//繪製曲線上的點

for (int i = 0; i < points.size(); ++i)

}

原文:

Qt畫平滑曲線

初學qt繪圖,使用drawling 繪製的直線在兩端點間距離較小時總是出現折點 鋸齒 非常不美觀。後來發現使用qpainter setrenderhint qpainter antialiasing 能消除鋸齒。setrenderhint用於設定呈現樣式,antialiasing是反鋸齒。例 qpa...

畫平滑的roc曲線

使用matlab畫roc曲線 本來malab曲線的平滑有2種方法 clc,clear a 1 1 6 橫座標 b 8.0 9.0 10.0 15.0 35.0 40.0 縱座標 plot a,b,b 自然狀態的畫圖效果 hold on 第一種,畫平滑曲線的方法 c polyfit a,b,2 進行擬...

Qt 繪製平滑Bezier曲線

1 二階bezier static qpointf quadvalue const qpointf p0,const qpointf p1,const qpointf p2,qreal t static qpointf quadderived const qpointf p0,const qpoin...