我在QT Creator工作。我想找到两点的斜率。对于使用斜率公式
的两个点A(x1,y1),B(x2,y2)m =(y2-y1)/(x2-x1)。
问题:
点数存储在列表p中。我希望从这个列表中一次取两个点,找到两个点的斜率,直到列表末尾。
例如,如果列表包含5个点{a,b,c,d,e}。我想找到斜坡 ab 公元前 3. cd 4. de
代码:
QList< QgsPoint > p;
{
/* some Process */
p.push_front( path->vertex( e.inVertex() ).point() ); /* some points are added to list*/
}
QList< QgsPoint>::iterator it;
for ( it = p.begin(); it != p.end(); ++it )
{
mrbPath->addPoint( *it );
}
答案 0 :(得分:0)
您可以使用java-style iterator:
QListIterator<QgsPoint> i(p);
while(i.hasNext())
{
if(!i.hasPrevious())
{
i.next();
continue;
}
m = (i.peekNext().y() - i.peekPrevious().y()) / (i.peekNext().x()-i.peekPrevious().x());
i.next();
}
答案 1 :(得分:0)
@ itwasntpete的评论是正确的答案。但如果你愿意,可以用一个迭代器来完成:
for( QList< QgsPoint >::iterator it = p.empty() ? p.begin() - 1 : p.begin(); it + 1 != p.end(); ++it )
{
const float slope = ( it[1].y() - it->y() ) / ( it[1].x() - it->x() );
//Do something with slope here
}
答案 2 :(得分:0)
你可以在没有迭代器的情况下完成。可能你会发现这段代码更干净:
for(int i = 0; i <= list.count() - 2; i++) {
QgsPoint a = list[i], b = list[i + 1];
//...
}