2014-01-10 3 views
0

Теперь я пытаюсь создать прямые точки синхронизации на моем пути 2D-карты.
Другими словами, я хочу проливать расстояние между точкой А на карте, например, 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 + distance и b_y + distance.
Я попытался это сделать, но это не сработало, ось x не изменилась должным образом.
Вот мой код:Генератор путевых точек между 2 точками на карте 2d

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; 
     } 
    } 

Что я здесь делаю неправильно?

ответ

1

«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 

Теперь цикл можно добавить 8 шагов козы и сина надлежащим образом описать путь путевых точек, и коза и син оба имеют соответствующие размеры для следующего вычисления.

для цикла может упростить:

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  

ли эти пункты способа выглядеть то, что вы ищете?

+0

Большое вам спасибо, но я хотел пролить путь каждые 8 ​​U дистанции. – user3126089

+0

Мой фиктивный код создал 8 равных шагов между начальной и конечной точками, а сумма из 8 шагов должна составлять «расстояние». Так что же такое U? Вы думаете, что U –

+0

U не понимал, когда у меня 16 дистанций, я хочу, чтобы он провалился на 2 шага (16/8 = 2), но я понял, что он принадлежит, спасибо за базовый код. – user3126089

Смежные вопросы