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

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

  • 参数方程式如下:

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

 

  • 极坐标方程如下:

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

  • 计算长度可近似为:

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

  • 举例证明

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

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

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

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

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

两者近似相等。

  • 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));

 

 

 

 

 

 

 

上一篇:React中使用Echarts


下一篇:Vue 修改数组对象的方法