ADN Open CIS
Сообщество программистов Autodesk в СНГ

05/08/2013

Различия между Curve.Length и Curve.ApproximateLength

Вопрос: Какая разница между свойством Length и ApproximateLength класса Curve?

Я использую их для определения длины стены в форме дуги, но как я вижу, значения этих свойств одинаковые. Так какое все же мне использовать свойство?

Ответ: Все кривые в геометрии Revit являются параметризированными.

Кривая представляет собой бесконечный набор точек в двумерном или трехмерном пространстве.

Для сложных кривых довольно сложно вычислить точную длину. Ее можно вычислить с помощью численного интегрирования, и точность такого вычисления довольно высока. Но это является дорогостоящей операцией с точки зрения производительности. Таким образом, свойство Length класса Curve является точной длиной кривой.

Для вычисления приблизительной длина (свойство ApproximateLength) применяется более простой и более эффективный алгоритм для определения длины кривой без интегрирования.

Однако, как указано в документации результат вычисления точной длины (Length) и приблизительной (ApproximateLength) может значительно отличаться.

Как вы заметили, для прямых линий и дуг нет никакой разницы в значении Length и ApproximateLength так же, как и нет разницы в производительности. По этой же причине, для стен, в обычных условиях, нет никакой разницы значения какого свойство вы возьмете.

Разница появляется только когда используются сложные кривые. В этом случае вы должны решить, что для вас важнее: точность или производительность.

Все же если в вашем проекте вам потребуется создать такие стены, для которых свойства Length и ApproximateLength возвращают различные значения, возможно ваш архитектор сумасшедший :) .

Дополнение: Наглядно понять, как вычисляется точная и приблизительная длина можно прямо в интерфейсе Revit. Создадим перекрытие вот такой незамысловатой формы.

 

Зайдем в режим редактирования границ перекрытия и выделим сложную кривую слева.

 

Приблизительная длина представляет собой сумму длин прямых линий. Точная длина – длина кривой.

Скачать демо-проект можно на GitHub или архивом.

Источник: http://thebuildingcoder.typepad.com/blog/2013/07/curve-length-idling-units-and-revitpythonshell.html#2

Обсуждениеhttp://adn-cis.org/forum/index.php?topic=143.0

 

Опубликовано 05.08.2013
Отредактировано 05.08.2013 в 22:22:26