Воскресенье, 17 Ноября 2024, 16:44

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Математика движения по отрезку прямой в пространстве
SavalinДата: Среда, 10 Августа 2011, 18:25 | Сообщение # 1
уже был
Сейчас нет на сайте
Приветствую!
У меня вопрос по большей части каксающийся высшей математики.

Задача следующая:
Имеем 2 точки в пространстве A(x0, y0, z0) и B(x1, y1, z1). необходимо из точки А передвигаться в точку B равными промежутками.

Я использовал систему параметрических уравнений прямой:
x = kt + x0,
y = lt + y0,
z = mt + z0

где (x0, y0, z0) - известная (начальная) точка на прямой, p(k, l, m) - направляющий вектор (значения реально вычислить, зная начальную и конечную точку).

Пример кода на javascript:

Code
var cameraMoving = setInterval( function() {

//в начале каждой итерации изменяем значение t, которое и будет давать новую точку на прямой
t += 0.01;

k = (endPoint[0] - camera.position.x) / t;
l = (endPoint[1] - camera.position.y) / t;
m = (endPoint[2] - camera.position.z) / t;

camera.position.x = k * t + camera.position.x;
camera.position.y = l * t + camera.position.y;
camera.position.z = m * t + camera.position.z;

//для определения попали ли мы в область назначения находим расстояние от текущей до конечной точки
dist = Math.pow( (camera.position.x-endPoint[0]),2 ) + Math.pow( (camera.position.y-endPoint[1]),2 ) + Math.pow( (camera.position.z-endPoint[2]),2 );

//если мы близко к точке назначения - останавливаемся
if ( dist < 10 )
clearInterval(cameraMoving);

}, 100);


Этот код срабатывает мгновенно, т.е. движения как такового не происходит, а я тут же оказываюсь в точке назначения.

Кто-нибудь может либо указать на ошибку в коде, либо предложить другой алгоритм вычисления (просто ход рассуждений)?

Заранее спасибо
DemeronДата: Среда, 10 Августа 2011, 18:43 | Сообщение # 2
User created in C++
Сейчас нет на сайте
Инициализация:
x = x0,
y = y0,
z = z0

В кадре:
x += kt
y += lt
z += mt

можно еще умножать на Delta Time и скорость, то есть x += kt *dt *speed, это обезпечит плавное передвижение на всех машинах
SavalinДата: Среда, 10 Августа 2011, 19:05 | Сообщение # 3
уже был
Сейчас нет на сайте
Я как раз зашел написать, что нашел ошибку в своем коде:
при нахождении направляющего вектора нет необходимости делить на t - иначе в цикле все будет всегда одним и тем же конечным значением.

Demeron, спасибо за ответ!
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг