我现在正试图在2D地图路径上生成直接同步点
换句话说,我想在地图上的点A之间溢出距离,例如X:301 Y:679到点B X:360 Y:630,每8个距离单位通过。
每{8}个距离单位由sqrt(pow(a_x - b_x, 2), pow(a_y - b_y, 2))
计算。
我想获取地图上的下一个坐标,例如a_x +距离和b_y +距离。
我试着这样做但它不起作用,x轴没有改变属性
这是我的代码:
float base_x = active->getX();
float base_y = active->getY();
float destx = incoming_packet.get()->getFloat(4);
float desty = incoming_packet.get()->getFloat(8);
float distance = active->distance(destx, desty); // calculated by sqrt(pow(curent character x pos - destx, 2), pow(current character y pos - desty, 2))
float delta_X = active->vDistance(base_x, destx); // calculated by sqrt(pow(base_x - destx, 2))
float delta_Y = active->vDistance(base_y, desty); // calculated by sqrt(pow(base_y - desty, 2))
float cosa = delta_X / distance;
float sina = delta_Y / distance;
int mapx = 1;
int mapy = 1;
if(distance > 8)///active sync
{
for(float dist = 8; dist < distance;dist+=8)
{
base_x += mapx * (cosa * 8);
base_y += mapy * (sina * 8);
BOOST_LOG_TRIVIAL(debug) << "[ACTIVESYNC]NEXT SYNC ACK X : " << base_x << " Y : " << base_y;
}
}
我在这做错了什么?
答案 0 :(得分:1)
“cosa”(和cosb)显然是无量纲的。 (即米/米)
“mapx”(和“mapy”)也是无量纲的。
请注意,在for循环中,base_x,base_y描述地图上的一个点。 并且该循环中有两个有趣的计算
base_x += mapx * (cosa * 8);
base_y += mapy * (sina * 8);
通过尝试向一个点添加无量纲数字,变得无意义。可以通过无量纲数乘以,但将无量纲数添加到地图点是不合理的。
我建议改变cosa和cosb来表示每一步的距离(即米)。
float cosa = delta_X / 8; // size of steps in x direction
float sina = delta_Y / 8; // size of steps in y direction
现在for循环可以适当地添加8步cosa和sina来描述路径点,而cosa和sina都有适当的尺寸用于下一次计算。
for循环可以简化为:
for(int step = 0; step < 8; step += 1)
{
base_x += (mapx * cosa);
base_y += (mapy * sina);
// remove or adapt the following
std::cout << std::setw(10) << std::left << (step+1) << std::setw(10)
<< base_x << std::setw(10) << base_y << std::endl;
// you were using:
//BOOST_LOG_TRIVIAL(debug) << "[ACTIVESYNC]NEXT SYNC ACK X : "
// << base_x << " Y : " << base_y;
}
我的虚拟代码输出:
base x/y 301 679
dest x/y 360 630
delta x/y 59 -49
step_x = 7.375
step_y = -6.125
step base_x base_y
0 301 679
1 308.375 672.875
2 315.75 666.75
3 323.125 660.625
4 330.5 654.5
5 337.875 648.375
6 345.25 642.25
7 352.625 636.125
8 360 630
这些方式点看起来更符合您的需求吗?