|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
![]() |
Поиск в этой теме |
|
||||
Дилетант Регистрация: 06.12.2017
Сообщений: 2,934
|
|
|||
![]() |
|
||||
Инженер-философ Регистрация: 24.04.2019
Хабаровск
Сообщений: 2,069
|
В шапке темы как раз один такой лежит. И даже написано, как он получен - копированием. Очевидно, при копировании поменялся порядок примитивов, и команда объединения полилинии соединила отрезки в другом порядке.
Как гарантированно получать правильные площади в таком случае - вопрос интересный. Пока все советы были - "у тебя неправильно, переделай правильно". А как определить, что площадь у второй линии неправильная, если не видеть исходную - правильную? На глаз же не видно, что там геометрия битая. Как быть с такими случаями, где глаза врут: https://ru.wikipedia.org/wiki/Исчезновение_клетки? У меня вот в расчетных схемах похожие вопросы бывают, когда привязки криво легли, и точки контуров "почти совпали"; не заметишь, пока в расчете глюки не полезут. Есть округлялки, но они сами могут геометрию покалечить, хорошая округлялка должна еще кучу тестов выполнить на повреждение геометрии, и предупреждения выдать. По-хорошему, предупреждать о возможных глюках должна команда объединения, но ее такую еще написать надо. |
|||
![]() |
|
||||
Дилетант Регистрация: 06.12.2017
Сообщений: 2,934
|
Цитата:
В то, что автокад при копировании изменил порядок примитивов -не верю (если не случилась авария, испортившая файл) |
|||
![]() |
|
||||
Инженер-философ Регистрация: 24.04.2019
Хабаровск
Сообщений: 2,069
|
Причем тут чудеса и факторы? Полилиния в шапке содержит сегменты, наложившиеся друг на друга. Соединять такие сегменты можно в разной последовательности. При разных последовательностях могут получаться разные результаты. Собственно, они и получились: одна полилиния замкнута, другая - нет.
А в какой последовательности будут соединены сегменты - зависит от того, в какой последовательности их перебирает цикл внутри команды. Например, их можно перебирать в порядке увеличения идентификаторов. Можно - в порядке, в котором они расположены во внутреннем кеше элементов автокада. Можно - в порядке, в котором они лежат в наборе выделения у команды. Порядок в наборе выделения может зависеть от того, в каком порядке щелкали отрезки при выборе. И та же фигня возможна при копировании - команде копирования тоже нужно перебирать объекты и создавать им копии. Так что порядок мог поменяться и в начале - при копировании, и потом - при объединении. Самое главное - что этот порядок (внутри автокада) не виден пользователю. И, если из отрезков нельзя собрать однозначный ответ - значит, при разных условиях будут собираться разные версии. Теоретически команда могла бы об этом предупреждать. Тестирует же Автокад 3D-геометрию на корректность при редактировании. Или можно написать свою команду, которая тестирует объекты на предмет глюков в геометрии. Такая команда могла бы быть честным ответом на вопрос темы. |
|||
![]() |
|
||||
Регистрация: 19.07.2005
Россия
Сообщений: 3,288
|
Самое главное - это прежде всего навести порядок, а потом уже приступать к работе с подобной графикой.
Где-то в последних версиях есть опция авто подсветки (выбора ) совпадающих объектов. С её помощью, с пом. overkil прощупывать все линии... а что поделаешь се ля ви... наверняка lisp какй-нить есть... |
|||
![]() |
|
||||
Дилетант Регистрация: 06.12.2017
Сообщений: 2,934
|
|
|||
![]() |
|
||||
Регистрация: 20.04.2011
Сообщений: 480
|
Цитата:
С математической точки зрения, автокад считает правильно. Неправильно может нарисовать пользователь. Попробуйте построить полилинию которая имеет самопересечение. И такую же вторую (с виду) фигуру. Площадь фигур будет очень сильно отличаться (а длина полилиний совпадать) |
|||
![]() |
|
||||
Инженер-философ Регистрация: 24.04.2019
Хабаровск
Сообщений: 2,069
|
Образец геометрии, у которой не совпадает - в шапке темы. Желающие могут заново взорвать правый контур и объединить его обратно - в зависимости от того, какой сегмент выбрать первым, получится площадь то 33, то 24. Не желающие могут продолжать рассказывать, что в автокаде такое невозможно.
Так ясен пень. У темы даже вопрос такой: "я тут где-то ошибся, и не могу найти где". Радуют ответы: "да у тебя там просто ошибка", "да ты просто все неправильно сделал - переделай правильно", "да ты не ошибайся, тогда и ошибок не будет", "переделай заново - вдруг получится правильно", "покажи пример без ошибки, тогда и поговорим". Узнаю русский форум ![]() Я вот который год с разными программами играюсь - от кадов до блендера, и до сих пор нахожу новые способы прострелить себе ногу. Помнится, у блендера в комплекте поставляются скрипты, среди которых несколько штук как раз контролируют геометрию - замкнутость, гладкость, сонаправленность, полюсность и т.п. - это пользователи постарались. Есть спецшейдеры и спецрежимы визуализации, чтобы глюки в сетке в глаза бросались - это разработчики. Но то художники - что с них возьмешь; даже программировать берутся, лишь бы самим не работать. Инженеры не такие, они ни за что не поручат компьютеру то, что можно сделать вручную ![]() |
|||
![]() |
|
||||
Регистрация: 20.04.2011
Сообщений: 480
|
Хм, надо же! Очень интересно!
![]() Площадь всегда смотрю через надстройку GeomProps А.Ривилиса. Именно она показывает меньшую площадь для полилиний имеющих самопересечение (такая фигура нарисована слева). Выходит, что признаком "косячной" фигуры будет отличие результата площади в этих двух методах подсчёта. |
|||
![]() |
|
||||
Дилетант Регистрация: 06.12.2017
Сообщений: 2,934
|
Вот только хотелось бы знать, что с математической точки зрения автокада является площадью полилинии и как он ее считает.
Во вложении три одинаковых с виду полилинии одинаковой длины, но разной площади |
|||
![]() |
|
||||
Регистрация: 20.04.2011
Сообщений: 480
|
Когда я утверждал про правильность математического подсчёта, то имел ввиду алгоритм метода трапеций. Можете загуглить в Яндексе: "Площадь многоугольника метод трапеций". Этот метод очень красиво программируется и результат вычисляется за один цикл. Главное условие этого метода - отсутствие самопересечений. Судя по всему GeomProps как раз и считает. Как считается в самом автокаде - фиг знает.
|
|||
![]() |
|
||||
Для полилиний GeomProps использует стандартный метод AcDbCurve::getArea.
__________________
Сообщество программистов Autodesk в СНГ - техническая поддержка |
||||
![]() |
|
||||
Инженер-философ Регистрация: 24.04.2019
Хабаровск
Сообщений: 2,069
|
А вот еще смешнее тест. Две фигуры имеют одинаковую геометрию, но разную площадь. Левая фигура получена из правой исправлением координаты первой же точки на 0.00000000000001. В свойствах этого не видно ни при каких LUPREC. Кто свойствам доверяет, тот тратит время зря (с). Интересно, можно ли получать у полилиний произвольную площадь добавлением волшебных невидимых сегментов?
|
|||
![]() |
|
||||
Регистрация: 20.04.2011
Сообщений: 480
|
Цитата:
----- добавлено через ~34 мин. ----- Цитата:
По идее, метод трапеций для симметричной фигуры самопересекающейся фигуры выдаст 0. Сложно утверждать, можно только предположить, что в алгоритме имеется какая-то оптимизация для симметричных фигур. А вот когда фигура не симметричная (на 0.00000000000001), то оптимизации походу дела нет.. |
|||
![]() |
|
||||
Инженер-философ Регистрация: 24.04.2019
Хабаровск
Сообщений: 2,069
|
Бим мне в спецификацию! Она портится даже от переноса. И от копирования через буфер. Но, если скопировать с базовой точкой, и вставить в то же место, то не портится. А еще она не портится, если копировать ее строго вверх или вниз. А еще не портится, если копировать вправо или влево маленькими шажочками; но, если отойти от начального положения слишком далеко (147 влево или 11 вправо), то начнет портиться и от маленьких шагов.
Похоже, мы нащупали гнездо. Где-то совсем рядом та дырка, через которую свежевылупившиеся глюки и расползаются по всему автокаду. ![]() Последний раз редактировалось Нубий-IV, 20.06.2023 в 07:14. |
|||
![]() |
|
||||
Возможно для полилинии в команде AREA AutoCAD использует другой метод (через COM/ActiveX - AcadLWPolyline::get_Area)
__________________
Сообщество программистов Autodesk в СНГ - техническая поддержка |
||||
![]() |
![]() |
|
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Почему лофт не создает тело из двух областей? | Zets | AutoCAD | 10 | 08.04.2024 13:05 |
Почему нагрузка от двух кранов как от одного? | eilukha | Конструкции зданий и сооружений | 16 | 13.03.2024 17:00 |
Площадь застройки здания | Wera222 | Архитектура | 49 | 29.11.2018 11:05 |
Должна ли, площадь проёма (1.2 м) без двери учитываться при подсчёте площади квартиры? | freshman | Архитектура | 12 | 28.05.2014 20:37 |
Как в AutoCAD задать площадь, чтобы площадь сразу была написана на черчеже? | Elbrus | AutoCAD | 10 | 14.01.2010 08:38 |