用QT绘制阿基米德螺线

1. 阿基米德螺线

阿基米德螺线的极坐标方程为:

r=a+bθ

其中:

  • r 是螺旋线上点到原点的距离(径向距离),
  • θ 是点的角度,
  • a 是起始半径(当 θ=0 时的半径),
  • b 是螺旋线的扩展系数或密度系数。

2. 代码

#include <QtWidgets>

class ArchimedeanSpiralWidget : public QWidget
{
public:
    ArchimedeanSpiralWidget(QWidget *parent = nullptr) : QWidget(parent) {}

protected:
    void paintEvent(QPaintEvent *event) override
    {
        Q_UNUSED(event);
        QPainter painter(this);
        painter.setRenderHint(QPainter::Antialiasing);

        int centerX = width() / 2;
        int centerY = height() / 2;
        int numPoints = 10000;
        qreal a = 1; // 起始半径
        qreal b = 2; // 扩展系数

        painter.translate(centerX, centerY); // 将坐标系原点移到窗口中心

        // 绘制阿基米德螺线
        painter.setPen(Qt::blue);
        qreal theta = 0;
        qreal step = 20 * M_PI / numPoints; // 0到4π之间均匀分布的角度

        QVector<QPointF> points;
        for (int i = 0; i < numPoints; ++i) {
            qreal r = a + b * theta;
            qreal x = r * qCos(theta);
            qreal y = r * qSin(theta);
            points.append(QPointF(x, y));
            theta += step;
        }

        painter.drawPolyline(points);
    }
};

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

    ArchimedeanSpiralWidget widget;
    widget.resize(400, 400);
    widget.show();

    return app.exec();
}

3. 结果

  • 6
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值