Как реализовать операторы в классе математического вектора?
Ради спортивного интереса я делаю векторную математику на C++ и у меня возникло несколько вопросов при реализации класса вектора.
Например, вектор можно умножать или делить на некоторое число, при этом каждую координату умножают или делят на это число. Но что делать с операторами сложения, вычитания и присваивания? На мой взгляд, кажется, что здесь нужно увеличивать, уменьшать или установить длину вектора равной определенному числу. Чтобы удостовериться, правильно ли я думаю, я решил посмотреть готовое решение в библиотеке GLM. Там выполняются все эти действия, так же как и с умножением и делением. Мне показалось, что это неправильно. Хотя в принципе я понимаю, что то, что я хотел сделать, можно реализовать просто с нормализованным вектором.
Также у меня возник вопрос при реализации операторов сравнения. С операторами равенства и неравенства в целом понятно - можно просто сравнивать каждую координату. Но что насчет операторов меньше и больше? Что можно сравнивать в таком случае? Мне пришло в голову, что можно сравнивать длины векторов. Однако это приводит к противоречию с операторами равенства и неравенства. Кажется странным, что операторы сравнения сравнивают разные величины. Снова я обратился к библиотеке GLM, и там реализованы только операторы равенства и неравенства именно для координат. Опять же, то, что я хотел сделать, можно было бы вручную вычислить длины векторов и провести сравнения.
На мой взгляд, кажется, что здесь нужно увеличивать, уменьшать или установить длину вектора равной определенному числу.
1. ИМХО не стоит придумывать те операторы, которых не существует и которые врядли кому-то пригодятся.
2. Складывание и вычитание векторов вполне определено.
Кажется странным, что операторы сравнения сравнивают разные величины.
Значит просто не надо такой оператор вводить.
Однако можно их ввести для сортировки покомпонентно.
Со сравнением по длине вроде бы ломается сломается сортировка, тк ломается свойство "если А меньше Б, а Б меньше В, то А меньше В"
Вектора можно складывать. Покомпонентно. Сложение векторов разного размера или вектора и числа бессмысленны.
Вектора можно перемножать. Скалярное или вектороное произведения. Чаще скалярное ставят на operator*, а векторное на какое-нибудь operator^
Операторы сравнения обычно делают лексикографически, покомпонентно. Сравнили первое число - у какого вектора больше - тот и больше. Если числа равны, сравниваем вторые компоненты. И т.д. Но это делают редко, потому что смысла вектора сортировать особо нет. Лексикографический порядок пользы особо не приносит.
Acaunt, Что именно в GLM реализовано? Изменение размерности вектора? Это полезная операция. Она там есть. Сложение векторов, я уверен, там происходит покомпонентно, как я и описал. А число к вектору, скорее всего, прибавить нельзя.