使用Qt的QPainter绘制阿基米德螺旋线

把笔记 c++绘制极坐标曲线 的代码中的allegro换成Qt的了。 因为自定义的QWidget写在源文件中所以Q_OBJECT注释掉了。

#include <QApplication>
#include <QWidget>
#include <QPainter>

#define _USE_MATH_DEFINES
#include <math.h>

int w=640;
int h=480;

struct vec2d
{
	double x;
	double y;
};

vec2d rsi2xy(double r, double si)
{
	vec2d p;
	double s=si *M_PI/180.0;
	p.x = r*cos(s);
	p.y = r*sin(s);
	return p;
}

double agmd(double si)
{
	return 80.0+0.1*si;
}
 
class GrphWidget : public QWidget
{
    //Q_OBJECT
 
public:
    GrphWidget(QWidget *parent = 0):
    QWidget(parent)
    {
    }
    ~GrphWidget()
    {}
 
    void paintEvent(QPaintEvent* event)
    {
    	int w =this->width();
    	int h = this->height();
    	
        QPainter p(this);
        p.setRenderHint(QPainter::Antialiasing);
    	 
	    // draw axis
	    p.setPen(QPen(Qt::black, 3));
        p.drawLine( 0,h/2,w, h/2   );
        p.drawLine( w/2,0,w/2, h  );
	 
	    
	    // draw helix r= r0+a*si
	    p.setPen(QPen(Qt::blue, 5));
	    double cx=w/2;
	    double cy=h/2;
	    double si = 0.0;
	    double dsi=2.0;
	    double simax=360.0*10+1.0;
	    double r=agmd(si);
	    vec2d  p0=rsi2xy(r,si);
	    si+=dsi;
	    while(si<simax)
	    {
	    	  double r=agmd(si);
	          vec2d  p1=rsi2xy(r,si);
	          p.drawLine(p0.x+cx,cy-p0.y,p1.x+cx,cy-p1.y);
	          p0=p1;
	          si+=dsi;
	    };
    	
        p.end();
    }
 
private:

};

int main(int argc, char* argv[]) 
{
    QApplication app(argc, argv);    
    GrphWidget* w  = new GrphWidget();    
    w->show();
    return app.exec();
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值