我正在编写一个迭代点列表的算法,计算它们之间的距离,如果距离太大,则插入额外的点.然而,我似乎缺乏对STL的熟悉,无法提出一个优雅的解决方案.我希望我能学到一些东西,所以我只会告诉你我的代码.你可能会给我一些提示.
for (std::list<PathPoint>::iterator it = ++points_.begin();
it != points_.end(); it++)
{
Vector curPos = it->getPosition();
Vector prevPos = (--it)->getPosition();
Vector vecFromPrev = curPos - prevPos;
float distance = vecFromPrev.abs();
it++;
if (distance > MAX_DISTANCE_BETWEEN_POINTS)
{
int pointsToInsert = (int)(distance / MAX_DISTANCE_BETWEEN_POINTS);
Vector curPos = prevPos;
for (int i = 0; i < pointsToInsert; i++)
{
curPos += vecFromPrev / pointsToInsert;
it = points_.insert(it, PathPoint(curPos, false));
it++;
}
}
}
Run Code Online (Sandbox Code Playgroud)
考虑使用adjacent_find查找迭代器位置,其中连续元素之间的距离太大,然后插入pointsToInsert项目.
http://www.sgi.com/tech/stl/adjacent_find.html
此外,您可以使用generate仿函数来填充中间点.
http://www.sgi.com/tech/stl/generate.html
不确定你想进入STL有多深:)
| 归档时间: |
|
| 查看次数: |
1719 次 |
| 最近记录: |