我有一个有4个坐标点的矢量,浮点型。从向量中读取值并将其存储在4个不同的变量中。我想从四个点找到最小的x坐标值并将其指定为第一个变量。剩余变量遵循与原点相同的顺序。
例如:p1到p4表示坐标点
P1 =(319.402,213.309)
p2 =(184.437,312.164)
p3 =(54.9806,183.36)
P4 =(187.458,95.2848)
最小x坐标为54.9806。找到最小值后,我想以新的顺序为新变量分配坐标值
p1_new =(54.9806,183.36)
p2_new =(187.458,95.2848) - 之前是p4
p3_new =(319.402,213.309) - 之前是p1
p4_new =(184.437,312.164) - 之前是p2
最小值可以从一次迭代到另一次迭代不同
谢谢你的帮助。
答案 0 :(得分:1)
让我们将问题分成几个部分: a)找到最小x值 b)一旦建立,你就可以在模拟向量的大小
中获得向量中的位置代码:(而不是过分强调正确的风格)
vector<pair<double, double>> vec = { {319.402,213.309} ,{184.437,312.164 },{54.9806,183.36} ,{187.458,95.2848} }
, vec2;
double minX = vec[0].first;
int minIndx = 0;
for (int i = 1; i < static_cast<int>(vec.size()); i++)
if (vec[i].first < minX)
{
minIndx = i; //saves the index
minX = vec[i].first; //saves the minX value
}
vec2.emplace_back(vec[minIndx]); //put it in the result vector (vec2)
//emplace everything else to the result vector modulu vec.size()
for (int i = minIndx + 1; i != minIndx; i = (i + 1) % static_cast<int>(vec.size()))
vec2.emplace_back(vec[i]);
//prints the result
for (const auto &v: vec2)
cout << "(" <<v.first << ", " <<v.second << ")\n";