这是我的代码:
void spin(double angle) {
// Convert degrees to radians
angle = get_radians(angle);
vector<complex<double>> coordinate_list;
coordinate_list.push_back(co1);
coordinate_list.push_back(co2);
coordinate_list.push_back(co3);
coordinate_list.push_back(co4);
// Origin point
complex<double> origin(0,0);
for (int i = 0; i < coordinate_list.size(); ++i)
{
complex<double> current = coordinate_list[i];
double x = current.real();
double y = current.imag();
// Assuming all rectangles origins are at (0,0)
float temp_x = origin.real() - x;
float temp_y = origin.imag() - y;
x = round(temp_x * cos(angle) - temp_y * sin(angle));
y = round(temp_x * sin(angle) + temp_y * cos(angle));
complex<double> rotated(x,y);
coordinate_list[i] = rotated;
}
co1 = coordinate_list[0];
co2 = coordinate_list[1];
co3 = coordinate_list[2];
co4 = coordinate_list[3];
}
我正在寻找一种方法来避免循环后的部分。我已经有了co1-4值,可以在任何点调用此方法来旋转坐标。我宁愿直接访问这些值,而不是将它们粘贴在列表中,更改它们,然后将它们分配回来。
有办法做到这一点吗?
答案 0 :(得分:3)
使用指针和引用:
vector<complex<double> *> coordinate_list;
coordinate_list.push_back(&co1);
coordinate_list.push_back(&co2);
coordinate_list.push_back(&co3);
coordinate_list.push_back(&co4);
// Origin point
complex<double> origin(0,0);
for (int i = 0; i < coordinate_list.size(); ++i)
{
complex<double> ¤t = *coordinate_list[i];
...
complex<double> rotated(x,y);
current = rotated;
}
答案 1 :(得分:2)
如何使用单独的函数而不是for循环:
void rotate(complex<double> &co)
{
// rotate it in place
}
// then just do something like this
rotate(co1);
rotate(co2);
rotate(co3);
rotate(co4);
答案 2 :(得分:0)
更改矢量&lt; complex&lt; double&gt; &GT;到向量&lt; reference_wrapper&lt; complex&lt; double&gt; &GT; &GT;然后你不需要循环后的部分。其余代码将保持不变。