Различия между Curve.Length и Curve.ApproximateLength
Вопрос: Какая разница между свойством Length и ApproximateLength класса Curve?Я использую их для определения длины стены в форме дуги, но как я вижу, значения этих свойств одинаковые. Так какое все же мне использовать свойство?
Ответ: Все кривые в геометрии Revit являются параметризированными.
Кривая представляет собой бесконечный набор точек в двумерном или трехмерном пространстве.
Для сложных кривых довольно сложно вычислить точную длину. Ее можно вычислить с помощью численного интегрирования, и точность такого вычисления довольно высока. Но это является дорогостоящей операцией с точки зрения производительности. Таким образом, свойство Length класса Curve является точной длиной кривой.
Для вычисления приблизительной длина (свойство ApproximateLength) применяется более простой и более эффективный алгоритм для определения длины кривой без интегрирования.
Однако, как указано в документации результат вычисления точной длины (Length) и приблизительной (ApproximateLength) может значительно отличаться.
Как вы заметили, для прямых линий и дуг нет никакой разницы в значении Length и ApproximateLength так же, как и нет разницы в производительности. По этой же причине, для стен, в обычных условиях, нет никакой разницы значения какого свойство вы возьмете.
Разница появляется только когда используются сложные кривые. В этом случае вы должны решить, что для вас важнее: точность или производительность.
Все же если в вашем проекте вам потребуется создать такие стены, для которых свойства Length и ApproximateLength возвращают различные значения, возможно ваш архитектор сумасшедший :) .
Дополнение: Наглядно понять, как вычисляется точная и приблизительная длина можно прямо в интерфейсе Revit. Создадим перекрытие вот такой незамысловатой формы.
Зайдем в режим редактирования границ перекрытия и выделим сложную кривую слева.
Приблизительная длина представляет собой сумму длин прямых линий. Точная длина – длина кривой.
Скачать демо-проект можно на GitHub или архивом.
Обсуждение: http://adn-cis.org/forum/index.php?topic=143.0
Отредактировано 05.08.2013 в 22:22:26