@Acaunt

Как реализовать операторы в классе математического вектора?

Ради спортивного интереса я делаю векторную математику на C++ и у меня возникло несколько вопросов при реализации класса вектора.

Например, вектор можно умножать или делить на некоторое число, при этом каждую координату умножают или делят на это число. Но что делать с операторами сложения, вычитания и присваивания? На мой взгляд, кажется, что здесь нужно увеличивать, уменьшать или установить длину вектора равной определенному числу. Чтобы удостовериться, правильно ли я думаю, я решил посмотреть готовое решение в библиотеке GLM. Там выполняются все эти действия, так же как и с умножением и делением. Мне показалось, что это неправильно. Хотя в принципе я понимаю, что то, что я хотел сделать, можно реализовать просто с нормализованным вектором.

Также у меня возник вопрос при реализации операторов сравнения. С операторами равенства и неравенства в целом понятно - можно просто сравнивать каждую координату. Но что насчет операторов меньше и больше? Что можно сравнивать в таком случае? Мне пришло в голову, что можно сравнивать длины векторов. Однако это приводит к противоречию с операторами равенства и неравенства. Кажется странным, что операторы сравнения сравнивают разные величины. Снова я обратился к библиотеке GLM, и там реализованы только операторы равенства и неравенства именно для координат. Опять же, то, что я хотел сделать, можно было бы вручную вычислить длины векторов и провести сравнения.
  • Вопрос задан
  • 141 просмотр
Решения вопроса 1
wataru
@wataru Куратор тега Математика
Разработчик на С++, экс-олимпиадник.
Вектора можно складывать. Покомпонентно. Сложение векторов разного размера или вектора и числа бессмысленны.

Вектора можно перемножать. Скалярное или вектороное произведения. Чаще скалярное ставят на operator*, а векторное на какое-нибудь operator^

Операторы сравнения обычно делают лексикографически, покомпонентно. Сравнили первое число - у какого вектора больше - тот и больше. Если числа равны, сравниваем вторые компоненты. И т.д. Но это делают редко, потому что смысла вектора сортировать особо нет. Лексикографический порядок пользы особо не приносит.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы