Как получить пару точек, хранящихся в списке

Я работаю в QT Creator. Я хочу найти наклон двух точек. Для двух точек A (x1, y1), B (x2, y2) используется формула наклона

m = (y2-y1) / (x2-x1).

Проблема:

Очки хранятся в списке с. Я хочу взять две точки за один раз из этого списка и найти наклон двух точек до конца списка.

Например, если список содержит 5 пунктов {a, b, c, d, e}. Я хочу найти склон
1. ab
2. до н. Э.
3. кд
4. де

Код:

    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

Решение

Вы можете сделать это без итераторов. Может быть, вы найдете этот код более чистым:

for(int i = 0; i <= list.count() - 2; i++) {
QgsPoint a = list[i], b = list[i + 1];
//...
}
0

Другие решения

Вы могли бы использовать итератор в стиле Java:

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();
}
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
}
0
По вопросам рекламы [email protected]