2015-04-13 7 views
-4

Вектор любой ценности должен быть направлен в сторону начала координат. Может ли кто-нибудь помочь мне с математикой? Это необходимо для моей программы, которую я делаю. Я работаю с анимацией, поэтому у меня есть местоположение (x, y) и вектор направления, который добавляется в местоположение каждый раз, когда он анимируется. Я хочу, чтобы вектор направления всегда делал мой объект, который анимируется, всегда плавает к центру экрана, который (0, 0) в моей программе. поэтому, если мое местоположение (1.3, 0.0), я хочу, чтобы вектор направления добавлял что-то вроде (1.3 - 0.2, 0.0) каждый цикл анимации или рамки?Создание вектора в направлении начала координат?

+0

Вы хотите, чтобы объекты проходили через центр * или вы хотите, чтобы порт просмотра был центрирован *? –

+1

В вашем примере вектор направления указывает * в сторону * от начала координат. Просто используйте (kx, ky), где k <0, и прекратите использовать такой неряшливый язык. – Beta

ответ

1

Это очень простая векторная геометрия. Если у вас есть место (x, y), это означает, что (x, y) - это вектор от начала координат до места. Вектор в противоположном направлении, означающий от места до начала координат, представляет собой просто вектор с перевернутым знаком, который равен (-x, -y).

Другой способ получения такого же значения: вектор от точки p до точки q - разница между двумя точками, q - p. Поэтому вектор от точки (x, y) до точки (0, 0) составляет (0, 0) - (x, y), что равно (0 - x, 0 - y), или снова (-x, -y).

В зависимости от того, как вы используете этот вектор, вам, возможно, придется его нормализовать. Например, если вы хотите двигаться в этом направлении с заданной скоростью v, длина вектора должна быть v. Это делается путем деления вектора на длину, которая равна sqrt(x * x + y * y), а затем умножая ее на v. При этом результирующий вектор вычисляется как:

s = v/sqrt(x * x + y * y); 
vx = - s * x; 
vy = - s * y; 

Чтобы применить это как часть анимации, вы будете умножать этот вектор к тому времени, которое прошло с момента последнего обновления, и добавить результат в текущей позиции , Обычно это будет выглядеть примерно так:

currentTime = getTime(); // system specific function for getting current time 
deltaTime = currentTime - lastTime; 
lastTime = currentTime; // save current time for next update 

// Update position by adding delta time multiplied by velocity vector 
x += deltaTime * vx; 
y += deltaTime * vy; 
Смежные вопросы