标签:customPlot yAxis 弧长 方程式 作图 int setTicker xAxis ticker
设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));
标签:customPlot,yAxis,弧长,方程式,作图,int,setTicker,xAxis,ticker
来源: https://blog.csdn.net/qq_23516957/article/details/105709206
本站声明:
1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。