@Acaunt

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

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

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

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

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

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

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

Войти через центр авторизации
Похожие вопросы