二维螺旋曲线方程式,弧长计算及作图实现

设R1为内径,n为圈数,d为圈距。

  • 参数方程式如下:

\left\{\begin{matrix} x=(R_1+ndt)cos(n\cdot 2\pi t) & \\ y=(R_1+ndt)sin(n\cdot 2\pi t) & ,t\in [0,1] \end{matrix}\right.

 

  • 极坐标方程如下:

\left\{\begin{matrix} r=(R_1+ndt) & \\\theta =n\cdot 2\pi t& ,t\in [0,1] \end{matrix}\right.

  • 计算长度可近似为:

L=n\pi (2R_1+nd)

  • 举例证明

如果内半径为R1 = 5,并且每转弯处半径增加为d=0.81,圈数n = 7.5。

利用L=n\pi (2R_1+nd)计算得:

L=n\pi (2R_1+nd) =7.5\pi (2*5+7.5*0.81) =378.56625

使用极坐标中曲线的弧长的公式来计算计算得:

L=\int_{0}^{15\pi }\sqrt{r^2+(\frac{dr}{d\theta })^2}d\theta \\ \\=\int_{0}^{15\pi }\sqrt{(R_1+\frac{d\cdot \theta }{2\pi })^2+(\frac{d}{2\pi })^2}d\theta \\ \\=\frac{d}{2\pi } \int_{0}^{15\pi }\sqrt{(\frac{2\pi R_1}{d}+\theta )^2+1}d\theta \\ \\=378.617

两者近似相等。

  • qt作图如下

  • 源码
  // create empty curve objects:
    QCPCurve *fermatSpiral1 = new QCPCurve(m_customPlot->xAxis, m_customPlot->yAxis);
    // set the same step between xAxis and yAxis
    QCPAxisTickerFixed *ticker = new QCPAxisTickerFixed;
    ticker->setTickStep(1);
    m_customPlot->xAxis->setTicker(QSharedPointer<QCPAxisTicker>(ticker));
    m_customPlot->yAxis->setTicker(QSharedPointer<QCPAxisTicker>(ticker));
    // generate the curve data points:
    const int pointCount = 500;
    QVector<QCPCurveData> dataSpiral1(pointCount);
    for (int i=0; i<pointCount; ++i)
    {
        double phi = i/(double)(pointCount-1);
        double N = 7.5;//圈数
        double d_Inner = 5;//内径
        double d = 0.81;//圈距
        double Dis =N*d*phi;//外径 - 内径
        dataSpiral1[i] = QCPCurveData(i, (d_Inner + Dis)*qCos(N*phi*2*M_PI), (d_Inner + Dis)*qSin(N*phi*2*M_PI));
    }
    // pass the data to the curves; we know t (i in loop above) is ascending, so set alreadySorted=true (saves an extra internal sort):
    fermatSpiral1->data()->set(dataSpiral1, true);
    // color the curves:
    fermatSpiral1->setPen(QPen(Qt::blue));

 

 

 

 

 

 

 

  • 6
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值