|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
![]() |
Поиск в этой теме |
![]() |
#1 | |
Почему различна площадь двух "одинаковых" многоугольников?
Регистрация: 29.01.2016
Сообщений: 720
|
||
Просмотров: 4120
|
|
||||
Регистрация: 19.07.2005
Россия
Сообщений: 3,288
|
Цитата:
Метод или подход к задаче - неверный. Последний раз редактировалось VitalyAF, 11.06.2023 в 12:14. |
|||
![]() |
|
||||
Регистрация: 29.01.2016
Сообщений: 720
|
Цитата:
---------------------------------------------------------------- А какой метод или подход к задаче - верный? |
|||
![]() |
|
||||
Регистрация: 29.01.2016
Сообщений: 720
|
VitalyAF,
Во-первых, ещё раз спасибо. А во-вторых, даже не знаю, что ещё рассказать. Строил отрезками по координатам точек. Первый отрезок вводил координаты обоих концов, а затем, для последующих отрезков только по одной дополнительной точке. В конце концов, объединил отрезки в полилинию и посмотрел свойства. Только и всего. Последний раз редактировалось Юрий_Нд, 12.06.2023 в 07:32. |
|||
![]() |
|
||||
Регистрация: 19.07.2005
Россия
Сообщений: 3,288
|
Зачем мне промежуточная задача? Вы можете сказать, для чего понадобилось строить линии, конвертировать в полилинию, замыкать и всё прочее. Для чего это, просто площадь узнать? ... Пробуйте решить ту же задачу другими способами, чтобы исключить ручные построения...
Других рекомендаций из этого набора слов не могу дать! Последний раз редактировалось VitalyAF, 12.06.2023 в 10:47. |
|||
![]() |
|
||||
Регистрация: 29.01.2016
Сообщений: 720
|
Уважаемый Тир, как я уже говорил в седьмом сообщении, Ты видишь только вершину айсберга, на которой я "споткнулся".
Определить площадь многоугольника - это не цель, это промежуточная задача. Поэтому, если я задам многоугольник полилинией, я лишусь ещё одной, очень интересной для меня промежуточной задачи. То есть во время построения, мне нужно ещё и контролировать длины сторон многоугольника. --- Уважаемый Виталий, кто же спорит, что я "заблудился в трёх соснах"? И в очередной раз спасибо Вам, что помогли разобраться. В отношении формулирования задачи в трёх словах не получается, минимум пять:"определить площадь многоугольника, заданного вершинами". --- п.с. Профессионал сам выбирает для себя ту моральную черту, которая позволяет ему глумиться над учениками. ... и вообще, есть ли эта черта? --- Несмотря ни на что, С благодарностью и уважением __________ Юрий. Последний раз редактировалось Юрий_Нд, 13.06.2023 в 06:04. |
|||
![]() |
|
||||
Инженер-философ Регистрация: 24.04.2019
Хабаровск
Сообщений: 2,071
|
Вершины не определяют многоугольник однозначно. Надо еще и ребра в правильном порядке задать. Если же просто накидать ребер, Автокад имеет полное моральное право соединить их в том порядке, в каком команда объединения перебирает их где-то внутри программы.
А еще Автокад показывает площади незамкнутых полилиний, додумывая им последний сегмент из первой точки в последнюю. Пример:
Частично от таких глюков помогает команда overkill - она чистит дублирующиеся сегменты. Но, если узлы не совсем совпадают, может что-то и проморгать, а на глаз в таких вытянутых фигурах сложно рассмотреть, все там почищено, или что еще осталось. |
|||
![]() |
|
||||
Регистрация: 19.07.2005
Россия
Сообщений: 3,288
|
Вершины чего, отрезков? Естественно, acad их никак не сортирует, они расположены в файле в порядке построения и редактирования.
Взамен используйте (много)прямоугольник + можно ограничить зависимостями. Можно вместо штриховки попробовать изпользовать площади Autocad Architecture, их можно настроить, в т.ч. на точность измерения и проч... А вообще, если ваша графика откуда-то пришла - чужая, то возни (ручной работы, гемора) НЕ избежать!! Autocad в таком случае - плохой помошник, это кульман и карандаш. Для такой специфической задачи - выпрямления кривой графики, мне кажется нет софта, если сразу не сделано грамотно, в правильном софте, то это беда для того, кто с этим работает! Offtop: PS Но, допустим, нужно сделать невозможное, например векторные контурные карты... Амеры в таком случае посадят тысячи китаянок и те, буквально в голом акаде могут рисовать и править быстро и много Ps (впрочем для карт есть какой-то НЕ Autodesk софт, не уверен, что он векторный) Последний раз редактировалось VitalyAF, 13.06.2023 в 11:24. |
|||
![]() |
|
||||
Дилетант Регистрация: 06.12.2017
Сообщений: 2,934
|
|
|||
![]() |
|
||||
Инженер-философ Регистрация: 24.04.2019
Хабаровск
Сообщений: 2,071
|
В шапке темы как раз один такой лежит. И даже написано, как он получен - копированием. Очевидно, при копировании поменялся порядок примитивов, и команда объединения полилинии соединила отрезки в другом порядке.
Как гарантированно получать правильные площади в таком случае - вопрос интересный. Пока все советы были - "у тебя неправильно, переделай правильно". А как определить, что площадь у второй линии неправильная, если не видеть исходную - правильную? На глаз же не видно, что там геометрия битая. Как быть с такими случаями, где глаза врут: https://ru.wikipedia.org/wiki/Исчезновение_клетки? У меня вот в расчетных схемах похожие вопросы бывают, когда привязки криво легли, и точки контуров "почти совпали"; не заметишь, пока в расчете глюки не полезут. Есть округлялки, но они сами могут геометрию покалечить, хорошая округлялка должна еще кучу тестов выполнить на повреждение геометрии, и предупреждения выдать. По-хорошему, предупреждать о возможных глюках должна команда объединения, но ее такую еще написать надо. |
|||
![]() |
|
||||
Дилетант Регистрация: 06.12.2017
Сообщений: 2,934
|
Цитата:
В то, что автокад при копировании изменил порядок примитивов -не верю (если не случилась авария, испортившая файл) |
|||
![]() |
|
||||
Инженер-философ Регистрация: 24.04.2019
Хабаровск
Сообщений: 2,071
|
Причем тут чудеса и факторы? Полилиния в шапке содержит сегменты, наложившиеся друг на друга. Соединять такие сегменты можно в разной последовательности. При разных последовательностях могут получаться разные результаты. Собственно, они и получились: одна полилиния замкнута, другая - нет.
А в какой последовательности будут соединены сегменты - зависит от того, в какой последовательности их перебирает цикл внутри команды. Например, их можно перебирать в порядке увеличения идентификаторов. Можно - в порядке, в котором они расположены во внутреннем кеше элементов автокада. Можно - в порядке, в котором они лежат в наборе выделения у команды. Порядок в наборе выделения может зависеть от того, в каком порядке щелкали отрезки при выборе. И та же фигня возможна при копировании - команде копирования тоже нужно перебирать объекты и создавать им копии. Так что порядок мог поменяться и в начале - при копировании, и потом - при объединении. Самое главное - что этот порядок (внутри автокада) не виден пользователю. И, если из отрезков нельзя собрать однозначный ответ - значит, при разных условиях будут собираться разные версии. Теоретически команда могла бы об этом предупреждать. Тестирует же Автокад 3D-геометрию на корректность при редактировании. Или можно написать свою команду, которая тестирует объекты на предмет глюков в геометрии. Такая команда могла бы быть честным ответом на вопрос темы. |
|||
![]() |
|
||||
Регистрация: 19.07.2005
Россия
Сообщений: 3,288
|
Самое главное - это прежде всего навести порядок, а потом уже приступать к работе с подобной графикой.
Где-то в последних версиях есть опция авто подсветки (выбора ) совпадающих объектов. С её помощью, с пом. overkil прощупывать все линии... а что поделаешь се ля ви... наверняка lisp какй-нить есть... |
|||
![]() |
|
||||
Дилетант Регистрация: 06.12.2017
Сообщений: 2,934
|
|
|||
![]() |
|
||||
Регистрация: 20.04.2011
Сообщений: 480
|
Цитата:
С математической точки зрения, автокад считает правильно. Неправильно может нарисовать пользователь. Попробуйте построить полилинию которая имеет самопересечение. И такую же вторую (с виду) фигуру. Площадь фигур будет очень сильно отличаться (а длина полилиний совпадать) |
|||
![]() |
|
||||
Инженер-философ Регистрация: 24.04.2019
Хабаровск
Сообщений: 2,071
|
Образец геометрии, у которой не совпадает - в шапке темы. Желающие могут заново взорвать правый контур и объединить его обратно - в зависимости от того, какой сегмент выбрать первым, получится площадь то 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,071
|
А вот еще смешнее тест. Две фигуры имеют одинаковую геометрию, но разную площадь. Левая фигура получена из правой исправлением координаты первой же точки на 0.00000000000001. В свойствах этого не видно ни при каких LUPREC. Кто свойствам доверяет, тот тратит время зря (с). Интересно, можно ли получать у полилиний произвольную площадь добавлением волшебных невидимых сегментов?
|
|||
![]() |
|
||||
Регистрация: 20.04.2011
Сообщений: 480
|
Цитата:
----- добавлено через ~34 мин. ----- Цитата:
По идее, метод трапеций для симметричной фигуры самопересекающейся фигуры выдаст 0. Сложно утверждать, можно только предположить, что в алгоритме имеется какая-то оптимизация для симметричных фигур. А вот когда фигура не симметричная (на 0.00000000000001), то оптимизации походу дела нет.. |
|||
![]() |
|
||||
Инженер-философ Регистрация: 24.04.2019
Хабаровск
Сообщений: 2,071
|
Бим мне в спецификацию! Она портится даже от переноса. И от копирования через буфер. Но, если скопировать с базовой точкой, и вставить в то же место, то не портится. А еще она не портится, если копировать ее строго вверх или вниз. А еще не портится, если копировать вправо или влево маленькими шажочками; но, если отойти от начального положения слишком далеко (147 влево или 11 вправо), то начнет портиться и от маленьких шагов.
Похоже, мы нащупали гнездо. Где-то совсем рядом та дырка, через которую свежевылупившиеся глюки и расползаются по всему автокаду. ![]() Последний раз редактировалось Нубий-IV, 20.06.2023 в 07:14. |
|||
![]() |
|
||||
Возможно для полилинии в команде AREA AutoCAD использует другой метод (через COM/ActiveX - AcadLWPolyline::get_Area)
__________________
Сообщество программистов Autodesk в СНГ - техническая поддержка |
||||
![]() |
|
||||
Инженер-философ Регистрация: 24.04.2019
Хабаровск
Сообщений: 2,071
|
В свойствах на панели выводится одно и то же правильное значение. А если смотреть через GeomProps - разные. У меня еще своя считалка суммарной длины есть, написанная, когда ковырял программирование под ObjectARX. Она тоже работает через getArea, и тоже показывает разные площади.
Интересу ради, простейшая команда, которая считает площадь через: - AcDbCurve::getArea - AcDbPolyline::getArea (на всякий случай, вдруг она переопределенная) - честным суммированием трапеций: Код:
P.S. Которые в Лиспе сильны - предложите и вашу версию. А то, кто Автокад сиплюсплющит, тот его не лиспует. |
|||
![]() |
![]() |
|
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Почему лофт не создает тело из двух областей? | 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 |