Конференция "Игры" » Получить время, разделив путь S на скорость V [Delphi, Windows]
 
  • Galiaf (26.08.10 14:51) [0]
    V и S - векторы, если перевести в скалярные величины и разделить, то получается много вычислений. Можно ли такую операцию произвести с векторами не переводя их в скаляры и будет ли такой вариант быстрее? Сейчас у меня эта операция со скалярными величинами и выглядит так:

     S:=Abs(Sqrt(Sqr(nPos[0]-pPos[0])+Sqr(nPos[1]-pPos[1])+Sqr(nPos[2]-pPos[2])));//длинна пути
     sV:=sqrt(sqr(V[0])+sqr(V[1])+sqr(V[2]));//скорость скалярная
     DT:=S / sV;//получение времени разделив путь на скорость


    Нашел еще такое:
    Деление вектора на вектор = скалярное произведение векторов, деленное на скаляр, равный квадрату вектора-делителя, результат - скаляр.
    И попробовал записать:

     S:=VDif(pPos, nPos);
     DT:=VDot(S, V) / VDot(V, V);


    Скорее всего я не понял как это правильно сделать, потому что такой вариант не работает.

    Возможно я в корне не правильно смотрю на задачу, по этому опишу подробнее:
    Есть тело со скоростью, текущим положением и следующим положением. Есть третья точка которая лежит на этом отрезке пути, необходимо получить время за которое тело пройдет от текущей точки до точки на этом отрезке. Если переводить величины в скалярные, то все работает, но я не уверен что это правильное решение проблемы.
  • MBo © (26.08.10 15:11) [1]
    если точки лежат на одной прямой, то достаточно разделить изменение одной координаты на составляющую скорости по этой координате (ненулевую!)
    Например, если V[0]  <> 0, то  t=(nPos[0]-pPos[0])/V[0])
  • Galiaf (27.08.10 00:57) [2]
    Да, очень быстрый вариант.
    Большое спасибо. Стыдно, что сам не догадался.
 
Конференция "Игры" » Получить время, разделив путь S на скорость V [Delphi, Windows]
Есть новые Нет новых   [106965   +40][b:0.001][p:0.003]