Вектор любой ценности должен быть направлен в сторону начала координат. Может ли кто-нибудь помочь мне с математикой? Это необходимо для моей программы, которую я делаю. Я работаю с анимацией, поэтому у меня есть местоположение (x, y) и вектор направления, который добавляется в местоположение каждый раз, когда он анимируется. Я хочу, чтобы вектор направления всегда делал мой объект, который анимируется, всегда плавает к центру экрана, который (0, 0) в моей программе. поэтому, если мое местоположение (1.3, 0.0), я хочу, чтобы вектор направления добавлял что-то вроде (1.3 - 0.2, 0.0) каждый цикл анимации или рамки?Создание вектора в направлении начала координат?
ответ
Это очень простая векторная геометрия. Если у вас есть место (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;
- 1. Поверните трехмерную точку вокруг начала координат/наклона 3D-вектора
- 2. Создание спрайтов в oppsite направлении вектора
- 3. Создание CALayer с системой координат единичного вектора
- 4. Создание системы координат, которая содержит 2 вектора
- 5. Вращение матрицы в направлении вектора?
- 6. Создание точки объекта 2D в направлении вектора единицы
- 7. Проблема для начала координат
- 8. Расширение координат вектора
- 9. Сортировка вектора координат C++
- 10. Конструкция вектора координат 2d
- 11. CoreAnimation, отслеживающий значения начала координат
- 12. 3d вращение вокруг начала координат
- 13. Повернуть точки вокруг начала координат
- 14. Python: создание набора координат вектора или матрицы из многомерного таблицы
- 15. Измените положение начала координат в системе координат PyGame
- 16. Изменение координат с помощью вектора
- 17. Сортировка вектора координат x/y
- 18. Ошибка начала координат оригинала в новом репозитории
- 19. Получение координат сенсорного начала в событии touchhend
- 20. Проецирование координат 3D-вектора в 2D
- 21. масштаб вдоль вектора в новой системе координат
- 22. Поверните 2 вектора координат в матрицу, matlab
- 23. Преобразование вектора координат в двумерную матрицу numpy
- 24. Создание вектора индексов отсортированного вектора
- 25. Создание вектора
- 26. Найти угол, представляющий направление движения от координат начала координат.
- 27. Сортировка массива координат по их расстоянию от начала координат
- 28. Создание вектора (массив) вектора CvSVM
- 29. Создание вектора вектора комплексных чисел
- 30. Создание вектора в R
Вы хотите, чтобы объекты проходили через центр * или вы хотите, чтобы порт просмотра был центрирован *? –
В вашем примере вектор направления указывает * в сторону * от начала координат. Просто используйте (kx, ky), где k <0, и прекратите использовать такой неряшливый язык. – Beta