我现在正在尝试在2D地图路径上生成直线同步点。
换句话说,我想在地图上的点A(例如X:301 Y:679)到B点X:360 Y:630之间散布距离,每经过8个单位的距离。sqrt(pow(a_x - b_x, 2), pow(a_y - b_y, 2))
计算的每8个距离单位。我想获取地图上的下一个坐标,例如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;
}
}
我在这里做什么错了?
最佳答案
“ cosa”(和cosb)显然是无量纲的。 (即米/米)
“ mapx”(和“ mapy”)也是无量纲的。
请注意,在for循环中,base_x,base_y描述了地图上的一个点。
还有该循环中的2个有趣的计算
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
这些路标看起来是否更符合您的需求?