Я пытаюсь проверить два нормальных вектора для равенства. Мой нормальный вектор представлен как список из трех элементов, один элемент для каждой пространственной координаты (X, Y и Z). Все координаты округлены до 4 знаков после запятой. Я хочу, чтобы проверить, если две поверхности имеют одинаковое нормальное, так что у меня есть что-то вроде следующего:Как переопределить сравнение для float в списке в Python?
if (surface1.normal in [surface2.normal, self.NegatedNormal(surface2.normal)]):
# do stuff here
Проблема заключается в мои нормалей выглядеть следующим образом:
surface1.normal: [0.9947, 0.0155, 0.1015]
surface2.normal: [0.9947, 0.0155, 0.1014]
Обратите внимание, что г-координата выкл. на 0.0001. Итак, есть ли способ переопределить оператор equals для принятия ответов в пределах 0.0001 друг от друга, который совместим со сравнением в других структурах данных (например, в моем случае)? У меня такое чувство, что мне придется написать свой собственный метод __eq__, но я не совсем уверен, как это сделать.
Также, если это не лучший способ действий, является ли их лучшим способом сравнить два списка поплавков в пределах данного допуска?
Вы можете написать пользовательский объект с плавающей точкой, который наследуется от обычного поплавка, но написать свои собственные функции для своих операторов (например, '__ge __() является> =') – SuperBiasedMan
@SuperBiasedMan Это является интересным подходом. К сожалению, это потребует рефакторинга большого количества кода, поэтому я не решаюсь его попробовать, но я не знал, что вы можете наследовать от примитивных типов, так что хорошо помнить о будущем. – samalamma708
Да, вы можете по существу сделать подкласс примитива, а затем переписать только те функции, которые вы хотите вести по-разному. – SuperBiasedMan