Как правильно задать точность геометрических расчетов, когда метод принимает Geometry.Tolerance ?
С параметром EqualPoint все ясно - если мне надо получить 3 значащих цифры, то делим габарит объекта на 1000 и получили EqualPoint. Например, для отрезка в миллион единиц, мне придется ставить EqualPoint = 1000. Катастрофически неудобный способ настройки, требуется постоянно вычислять габариты, но куда деваться, альтернативы нет.
А вот с EqualVector разобраться не могу. Во всех примерах он берется в 10 раз меньше чем EqualPoint. В документации сказано:
Two vectors, v1 and v2, are equal if
(v1 - v2).length() <= equalVector
т.е. такое же сравнение в лоб, как и для EqualPoint. Значит надо брать EqualVector = EqualPoint. Но! Тут же:
Two vectors, v1 and v2, are parallel if
(v1/v1.length() - v2/v2.length()).length() < equalVector ...
т.е. для углов и направлений используются уже единичные векторы. Их разница не может быть больше двух! Если я назначу EqualVector = 2 и более, то даже противоположные направления будут считаться одинаковыми! Значит EqualVector надо назначать от 0 до 1 и это не зависит от габаритов объектов. Можно прикинуть исходя из этого, что для точности углов в пол градуса EqualVector = 0.0087. Так?
Так сколько же ставить для крупного объекта - 1000 или 0.0087
? Нифига себе разбросик... Как вообще можно в одинаковых единицах мерить и углы и линейные размеры? Я явно что-то не понимаю. И что-бы окончательно разрушить мой мозг, в документации есть примечание:
These rules mean that two lines are close to each other as point sets in the part of the modeling space of diameter diam only if the tolerance equalVector is set tighter than equalPoint/diam.
Что за диаметр, какой набор точек? Я понял только, что EqualVector надо обязательно(?) назначать по жестче, чем EqualPoint. Но почему - не понял.
Спасите, помогите!