Я привык к графике WinForms, но я баловался XNA, и одна вещь, которую я заметил, состоит в том что Point
объект не очень полезен, и, кажется, не используется очень. Для расположения, различного SpriteBatch
Привлеките использование методов любой a Rectangle
или a Vector2
. И Vector2
имеет много полезных статических методов и методов экземпляра, тогда как Point
не имеет в основном ничего кроме свойств X and Y.
Почему XNA использует a Vector2
представить положение вместо a Point
? Я понимаю, что у них обоих есть X и Y, но семантически и логически, с помощью a Vector2
вместо a Point
представить местоположение не имеет никакого смысла мне. (Например, если Вы нормализуете Vector2
, внезапно Вы имеете другое расположение!)
Действительно ли это столь странно, как это кажется, или я пропускаю что-то?
Даже если предположить, что Point
использовали значения с плавающей запятой, какой смысл вы дали бы «сложению двух точек»? Теперь добавление векторов для обновления позиций - это хорошо понимаемая и широко используемая концепция, поэтому векторы лучше соответствуют описанию позиций и скоростей в виртуальном мире.
Основная причина ... Vector2 использует числа с плавающей запятой и поля вместо свойств. Это делает его более точным и эффективным, чем Point, который использует целые числа и свойства.
На определенном уровне вам просто нужен набор чисел. Выше вы можете применить некоторые абстракции и структуру к этим кортежам. Однако, будучи высокопроизводительной математической библиотекой, XNAMath оставляет эту работу на ваше усмотрение.
Семантически нет большой разницы между вектором и точкой; они оба представляют смещение от начала координат в некоторой декартовой системе координат. Преимущество векторов в том, что они имеют больше структуры (масштабирования, сложения и т. Д.), Чем точек.
Например, вы можете захотеть найти смещение одного объекта от другого: это просто разность векторов между их соответствующими векторами положения. Они также более универсальны в представлении других величин, таких как скорость. Например, вы можете рассчитать положение объекта с положением r
и скоростью v
после временного интервала t
; используя векторы, это можно вычислить просто как r + t * v
.
Ваш пример нормализации может быть полезен, если вы хотите указать направление к объекту от начала координат (или какой-либо другой точки).