我有一个std::vector
包含Point struct
(x,y,z 和其他一些非指针类型) 的。
这些点是用于绘制 bspline 曲线的控制点。我在绘制曲线时没有问题,但是当我必须关闭曲线时会出现复杂情况,这涉及以特定顺序添加控制点(容器内已经存在)。
例如,如果我有 5 个控制点
A B C D E
我必须得到 5 个这样的序列:
A B C D //curve is drawn from B to C
B C D E //curve is drawn from C to D
C D E A //curve is drawn from D to E
D E A B //curve is drawn from E to A
E A B C //curve is drawn from A to B
最初,我选择了std::rotate
,但后来意识到这不是我想要的。
我在执行此操作时遇到了麻烦。我得到的最好的是 C++ 中的非工作版本(失败的原因不是问题,这是一个片段)。
static char letters = 'A';
typedef struct Point{
float x,y,z;
char name;
Point(float x,float y,float z=0):name(letters++){}
}Point;
typedef std::vector<Point> lpoints;
void
rotate(lpoints& points)
{
for (unsigned int i =0;i<5;i++){
lpoints::iterator beg = lista.begin() + (i%5);
lpoints::iterator dernier=lista.begin()+(4+i)%6;
lpoints subseq(beg,dernier); //4 points in subseq
//do stuff with subseq
}
}
有没有办法做到这一点?我知道我可以用许多嵌套的 for 循环来实现它,但我试图避免这种情况,寻找更优雅的东西(如果这个词合适的话)。
提前致谢。