XNA - Почему он использует Vector2, а не Point? - PullRequest
10 голосов
/ 07 февраля 2010

Я привык к графике WinForms, но я немного увлекался XNA, и я заметил одну вещь: объект Point не очень полезен и, кажется, не очень часто , Для позиционирования различные методы SpriteBatch Draw используют либо Rectangle, либо Vector2. И у Vector2 есть много полезных статических методов и методов экземпляров, тогда как у Point нет ничего, кроме свойств X и Y.

Почему XNA использует Vector2 для представления позиции вместо Point? Я понимаю, что они оба имеют X и Y, но семантически и логически, использование Vector2 вместо Point для представления местоположения не имеет смысла для меня. (Например, если вы нормализуете Vector2, вдруг у вас будет другое местоположение!)

Это так странно, как кажется, или я что-то упустил?

Ответы [ 5 ]

17 голосов
/ 07 февраля 2010

Даже если предположить, что Point использовали значения с плавающей запятой, что бы вы назвали "сложением 2 точек вместе"?Теперь добавление векторов для обновления позиций является хорошо понятной и широко используемой концепцией, поэтому векторы лучше отображаются в описании позиций и скоростей в виртуальном мире.

3 голосов
/ 17 мая 2013

Думаю, я бы поделился небольшой магией расширений, так как я люблю расширения. Я создал метод расширения Point для простого преобразования в Vector2 для подобных SpriteBatch.Draw ()

public static class PointExt
{
    public static Vector2 ToVector2(this Point point)
    {
        return new Vector2(point.X, point.Y);
    }
}

, затем просто вызовите его с помощью myPoint.ToVector2 ().

Не самое значимое использование расширения, но оно немного облегчает мою жизнь.

3 голосов
/ 07 февраля 2010

Семантически, есть небольшая разница между вектором и точкой; они оба представляют смещение от начала координат в некоторой декартовой системе координат. Преимущество векторов состоит в том, что они имеют большую структуру (масштабирование, сложение и т. Д.), Чем точки.

Например, вы можете захотеть найти смещение одного объекта от другого: это просто разность векторов между их соответствующими векторами положения. Они также более универсальны в представлении других величин, таких как скорость. Например, вы можете рассчитать положение объекта с позицией r и скоростью v после интервала времени t; используя векторы, это можно вычислить просто как r + t * v.

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

0 голосов
/ 07 февраля 2010

На определенном уровне вы просто хотите кортеж чисел. Выше вы можете захотеть применить некоторые абстракции и структуру к этим кортежам. Однако, как высокопроизводительная математическая библиотека, XNAMath оставляет эту работу на ваше усмотрение.

0 голосов
/ 07 февраля 2010

Основная причина ... Vector2 использует плавающие поля и поля вместо свойств. Это делает его более точным и эффективным, чем Point, который использует целые числа и свойства.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...