Почему различна площадь двух "одинаковых" многоугольников?
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Почему различна площадь двух "одинаковых" многоугольников?

Почему различна площадь двух "одинаковых" многоугольников?

Ответ
Поиск в этой теме
Непрочитано 11.06.2023, 10:33 #1
Почему различна площадь двух "одинаковых" многоугольников?
Юрий_Нд
 
Регистрация: 29.01.2016
Сообщений: 720

Доброго дня Уважаемые.
Сегодня такой вопрос:
- слева я начертил многоугольник, который в начале состоял из множества не объединённых отрезков;
- затем я скопировал все отрезки вправо и объединил в полилинию;
- и в конце концов объединил левые отрезки в полилинию.
Вопрос:"Почему площади левого и правого многоугольника различные? Примерно 33 и 24 м²"
Спасибо ____________ Юрий.
https://dropmefiles.com/s3o9y
Просмотров: 4120
 
Непрочитано 11.06.2023, 11:44
1 | #2
VitalyAF


 
Регистрация: 19.07.2005
Россия
Сообщений: 3,288


Цитата:
Сообщение от Юрий_Нд Посмотреть сообщение
Вопрос:"Почему площади левого и правого многоугольника различные? Примерно 33 и 24 м²
Разберитесь сначала с контурами (правым, например), в нём полно совпадающих линий, возможно отсюда и результат...!
Метод или подход к задаче - неверный.

Последний раз редактировалось VitalyAF, 11.06.2023 в 12:14.
VitalyAF вне форума  
 
Автор темы   Непрочитано 11.06.2023, 12:19
#3
Юрий_Нд


 
Регистрация: 29.01.2016
Сообщений: 720


Цитата:
Сообщение от VitalyAF Посмотреть сообщение
Разберитесь сначала с одним контурами (правым, например), в нём полно совпадающих линий, возможно отсюда и результат...!
Спасибо, разобрался.
----------------------------------------------------------------
Цитата:
Сообщение от VitalyAF Посмотреть сообщение
Метод или подход к задаче - неверный.
А какой метод или подход к задаче - верный?
Юрий_Нд вне форума  
 
Непрочитано 11.06.2023, 21:01
#4
VitalyAF


 
Регистрация: 19.07.2005
Россия
Сообщений: 3,288


Цитата:
Сообщение от Юрий_Нд Посмотреть сообщение
А какой метод или подход к задаче - верный?
... Тот, что исключит действия приведшие к таким результатам.
Если подробнее расскажете, то м.б. и я конкретнее отвечу.
VitalyAF вне форума  
 
Автор темы   Непрочитано 12.06.2023, 06:14
#5
Юрий_Нд


 
Регистрация: 29.01.2016
Сообщений: 720


Цитата:
Сообщение от VitalyAF Посмотреть сообщение
Если подробнее расскажете, то м.б. и я конкретнее отвечу.
VitalyAF,
Во-первых, ещё раз спасибо.
А во-вторых, даже не знаю, что ещё рассказать.
Строил отрезками по координатам точек.
Первый отрезок вводил координаты обоих концов, а затем, для последующих отрезков только по одной дополнительной точке.
В конце концов, объединил отрезки в полилинию и посмотрел свойства.
Только и всего.

Последний раз редактировалось Юрий_Нд, 12.06.2023 в 07:32.
Юрий_Нд вне форума  
 
Непрочитано 12.06.2023, 09:16
#6
VitalyAF


 
Регистрация: 19.07.2005
Россия
Сообщений: 3,288


Цитата:
Сообщение от Юрий_Нд Посмотреть сообщение
Только и всего.
...Зачем? Какая цель, в чём задача?
VitalyAF вне форума  
 
Автор темы   Непрочитано 12.06.2023, 09:20
#7
Юрий_Нд


 
Регистрация: 29.01.2016
Сообщений: 720


Задач очень много.
Всего не расскажешь.
Специально для этого вопроса убрал из чертежа почти всё, оставил порядка 1-2%.
Промежуточная цель/задача, определить площадь.
С этим вопросом и обратился.
Юрий_Нд вне форума  
 
Непрочитано 12.06.2023, 10:41
#8
VitalyAF


 
Регистрация: 19.07.2005
Россия
Сообщений: 3,288


Зачем мне промежуточная задача? Вы можете сказать, для чего понадобилось строить линии, конвертировать в полилинию, замыкать и всё прочее. Для чего это, просто площадь узнать? ... Пробуйте решить ту же задачу другими способами, чтобы исключить ручные построения...
Других рекомендаций из этого набора слов не могу дать!

Последний раз редактировалось VitalyAF, 12.06.2023 в 10:47.
VitalyAF вне форума  
 
Автор темы   Непрочитано 12.06.2023, 11:20
#9
Юрий_Нд


 
Регистрация: 29.01.2016
Сообщений: 720


"... Пробуйте решить ту же задачу другими способами, чтобы исключить ручные построения...",
- ... очень странная рекомендация, но в любом случае, я Вам очень благодарен.
С уважением _________ Юрий.
Юрий_Нд вне форума  
 
Непрочитано 12.06.2023, 11:33
#10
trir


 
Регистрация: 18.12.2010
Сообщений: 5,107


Цитата:
слева я начертил многоугольник, который в начале состоял из множества не объединённых отрезков;
Цитата:
Строил отрезками по координатам точек.
Построй полилинию по координатам - задача на пару кликов
trir вне форума  
 
Непрочитано 12.06.2023, 18:25
#11
VitalyAF


 
Регистрация: 19.07.2005
Россия
Сообщений: 3,288


Цитата:
Сообщение от Юрий_Нд Посмотреть сообщение
... очень странная рекомендация, но в любом случае, я Вам очень благодарен.
странно - запутаться в 3-х соснах и не уметь сформулировать задачу 2-3-мя словами!
VitalyAF вне форума  
 
Автор темы   Непрочитано 13.06.2023, 05:58
#12
Юрий_Нд


 
Регистрация: 29.01.2016
Сообщений: 720


Уважаемый Тир, как я уже говорил в седьмом сообщении, Ты видишь только вершину айсберга, на которой я "споткнулся".
Определить площадь многоугольника - это не цель, это промежуточная задача.
Поэтому, если я задам многоугольник полилинией, я лишусь ещё одной, очень интересной для меня промежуточной задачи. То есть во время построения, мне нужно ещё и контролировать длины сторон многоугольника.
---
Уважаемый Виталий, кто же спорит, что я "заблудился в трёх соснах"? И в очередной раз спасибо Вам, что помогли разобраться.
В отношении формулирования задачи в трёх словах не получается, минимум пять:"определить площадь многоугольника, заданного вершинами".
---
п.с. Профессионал сам выбирает для себя ту моральную черту, которая позволяет ему глумиться над учениками.
... и вообще, есть ли эта черта?
---
Несмотря ни на что,
С благодарностью и уважением __________ Юрий.

Последний раз редактировалось Юрий_Нд, 13.06.2023 в 06:04.
Юрий_Нд вне форума  
 
Непрочитано 13.06.2023, 08:43
#13
Нубий-IV

Инженер-философ
 
Регистрация: 24.04.2019
Хабаровск
Сообщений: 2,071


Вершины не определяют многоугольник однозначно. Надо еще и ребра в правильном порядке задать. Если же просто накидать ребер, Автокад имеет полное моральное право соединить их в том порядке, в каком команда объединения перебирает их где-то внутри программы.

А еще Автокад показывает площади незамкнутых полилиний, додумывая им последний сегмент из первой точки в последнюю. Пример:


  1. Честный квадрат
    Такой получается, если сразу чертить полилинию в режиме прямоугольника. Или начертить три сегмента, и замкнуть. Или начертить три отрезка, объединить и замкнуть. Площадь в свойствах будет ровно та, что видна на глаз.
  2. Незамкнутый квадрат
    Тут автокад додумывает невидимый сегмент 1-4, и показывает площадь, которая совпадает с площадью квадрата.
  3. Глюкавый незамкнутый квадрат
    По ошибке дорисован сегмент 4-5. На глаз такая полилиния выглядит как вторая, но замыкание Автокад сделает по диагонали, и покажет только половину площади квадрата вместо целой.
  4. Глюкавый незамкнутый квадрат, который выглядит замкнутым
    Тут целых три дополнительных сегмента, которые повторяют ранее построенные. На глаз это настоящий квадрат, как в первом случае, но площадь в свойствах у него будет нулевая.
В чертеже у правой полилинии - глюк третьего-четвертого типа. Если замкнуть ее в свойствах, станет видно дополнительную линию, которая идет по диагонали. А если заштриховать ее после замыкания, будет видно, какую площадь Автокад учел.

Частично от таких глюков помогает команда overkill - она чистит дублирующиеся сегменты. Но, если узлы не совсем совпадают, может что-то и проморгать, а на глаз в таких вытянутых фигурах сложно рассмотреть, все там почищено, или что еще осталось.
Миниатюры
Нажмите на изображение для увеличения
Название: AC.png
Просмотров: 614
Размер:	11.1 Кб
ID:	256617  
Нубий-IV вне форума  
 
Непрочитано 13.06.2023, 11:01
#14
VitalyAF


 
Регистрация: 19.07.2005
Россия
Сообщений: 3,288


Цитата:
Сообщение от Нубий-IV Посмотреть сообщение
Вершины не определяют многоугольник однозначно.
Вершины чего, отрезков? Естественно, acad их никак не сортирует, они расположены в файле в порядке построения и редактирования.
Взамен используйте (много)прямоугольник + можно ограничить зависимостями.
Можно вместо штриховки попробовать изпользовать площади Autocad Architecture, их можно настроить, в т.ч. на точность измерения и проч...
А вообще, если ваша графика откуда-то пришла - чужая, то возни (ручной работы, гемора) НЕ избежать!!
Autocad в таком случае - плохой помошник, это кульман и карандаш. Для такой специфической задачи - выпрямления кривой графики, мне кажется нет софта, если сразу не сделано грамотно, в правильном софте, то это беда для того, кто с этим работает!
Offtop: PS
Но, допустим, нужно сделать невозможное, например векторные контурные карты...
Амеры в таком случае посадят тысячи китаянок и те, буквально в голом акаде могут рисовать и править быстро и много
Ps (впрочем для карт есть какой-то НЕ Autodesk софт, не уверен, что он векторный)

Последний раз редактировалось VitalyAF, 13.06.2023 в 11:24.
VitalyAF вне форума  
 
Непрочитано 13.06.2023, 11:14
#15
trir


 
Регистрация: 18.12.2010
Сообщений: 5,107


Цитата:
впрочем для карт есть какой-то НЕ Autodesk софт, не уверен, что он векторный
ГИС, векторные
trir вне форума  
 
Непрочитано 13.06.2023, 11:22
#16
VitalyAF


 
Регистрация: 19.07.2005
Россия
Сообщений: 3,288


Цитата:
Сообщение от trir Посмотреть сообщение
ГИС, векторные
Это там, где в зависимости от масштаба подгружается/выгружается графика
VitalyAF вне форума  
 
Непрочитано 13.06.2023, 11:57
1 | #17
trir


 
Регистрация: 18.12.2010
Сообщений: 5,107


Цитата:
Это там, где в зависимости от масштаба подгружается/выгружается графика
В смысле?
trir вне форума  
 
Непрочитано 13.06.2023, 12:10
#18
VitalyAF


 
Регистрация: 19.07.2005
Россия
Сообщений: 3,288


Цитата:
Сообщение от trir Посмотреть сообщение
В смысле?
Название не помню... нашёл - MapInfo...
VitalyAF вне форума  
 
Непрочитано 13.06.2023, 12:11
#19
trir


 
Регистрация: 18.12.2010
Сообщений: 5,107


В ГИС можно настроить стиль отображения в зависимости от масштаба
MapInfo векторная

Последний раз редактировалось trir, 13.06.2023 в 12:21.
trir вне форума  
 
Непрочитано 13.06.2023, 20:29
#20
VitalyAF


 
Регистрация: 19.07.2005
Россия
Сообщений: 3,288


+
Цитата:
Сообщение от Нубий-IV Посмотреть сообщение
Вершины не определяют многоугольник однозначно.
+ выложите более большой, необработанный кусок файла, р-ром с пачку сигарет примерно...
VitalyAF вне форума  
 
Непрочитано 13.06.2023, 23:50
#21
Старый Дилетант

Дилетант
 
Регистрация: 06.12.2017
Сообщений: 2,934


Цитата:
Сообщение от Юрий_Нд Посмотреть сообщение
"Почему площади левого и правого многоугольника различные?
Потому, что многоугольники разные.
Посмотрите свойства:
-длины полилиний разные,
-левая замкнутая, правая - нет.
- у левой 8 вершин, у правой - 11
Старый Дилетант вне форума  
 
Непрочитано 14.06.2023, 01:50
#22
Нубий-IV

Инженер-философ
 
Регистрация: 24.04.2019
Хабаровск
Сообщений: 2,071


Цитата:
Сообщение от VitalyAF Посмотреть сообщение
выложите более большой, необработанный кусок файла
В шапке темы как раз один такой лежит. И даже написано, как он получен - копированием. Очевидно, при копировании поменялся порядок примитивов, и команда объединения полилинии соединила отрезки в другом порядке.

Как гарантированно получать правильные площади в таком случае - вопрос интересный. Пока все советы были - "у тебя неправильно, переделай правильно". А как определить, что площадь у второй линии неправильная, если не видеть исходную - правильную? На глаз же не видно, что там геометрия битая. Как быть с такими случаями, где глаза врут: https://ru.wikipedia.org/wiki/Исчезновение_клетки?

У меня вот в расчетных схемах похожие вопросы бывают, когда привязки криво легли, и точки контуров "почти совпали"; не заметишь, пока в расчете глюки не полезут. Есть округлялки, но они сами могут геометрию покалечить, хорошая округлялка должна еще кучу тестов выполнить на повреждение геометрии, и предупреждения выдать.

По-хорошему, предупреждать о возможных глюках должна команда объединения, но ее такую еще написать надо.
Нубий-IV вне форума  
 
Непрочитано 14.06.2023, 11:04
#23
Старый Дилетант

Дилетант
 
Регистрация: 06.12.2017
Сообщений: 2,934


Цитата:
Сообщение от Нубий-IV Посмотреть сообщение
В шапке темы как раз один такой лежит. И даже написано, как он получен - копированием. Очевидно, при копировании поменялся порядок примитивов, и команда объединения полилинии соединила отрезки в другом порядке.
Думаю - человеческий фактор. Автор случайно выполнил какие-то команды после (или до) копирования - начертил два отрезка или лишний раз их скопировал, или включал-выключал слои на которых были объекты, удалил лишнее или забыл удалить, чистил чертеж..
В то, что автокад при копировании изменил порядок примитивов -не верю (если не случилась авария, испортившая файл)
Старый Дилетант вне форума  
 
Непрочитано 14.06.2023, 12:25
#24
VitalyAF


 
Регистрация: 19.07.2005
Россия
Сообщений: 3,288


Цитата:
Сообщение от Старый Дилетант Посмотреть сообщение
В то, что автокад при копировании изменил порядок примитивов -не верю...
+1 - "чудеса" с Acad-ом бывают, но не в данном случае...
VitalyAF вне форума  
 
Непрочитано 14.06.2023, 13:05
#25
Нубий-IV

Инженер-философ
 
Регистрация: 24.04.2019
Хабаровск
Сообщений: 2,071


Цитата:
Сообщение от Старый Дилетант Посмотреть сообщение
человеческий фактор
Цитата:
Сообщение от VitalyAF Посмотреть сообщение
чудеса
Причем тут чудеса и факторы? Полилиния в шапке содержит сегменты, наложившиеся друг на друга. Соединять такие сегменты можно в разной последовательности. При разных последовательностях могут получаться разные результаты. Собственно, они и получились: одна полилиния замкнута, другая - нет.

А в какой последовательности будут соединены сегменты - зависит от того, в какой последовательности их перебирает цикл внутри команды. Например, их можно перебирать в порядке увеличения идентификаторов. Можно - в порядке, в котором они расположены во внутреннем кеше элементов автокада. Можно - в порядке, в котором они лежат в наборе выделения у команды. Порядок в наборе выделения может зависеть от того, в каком порядке щелкали отрезки при выборе. И та же фигня возможна при копировании - команде копирования тоже нужно перебирать объекты и создавать им копии. Так что порядок мог поменяться и в начале - при копировании, и потом - при объединении.

Самое главное - что этот порядок (внутри автокада) не виден пользователю. И, если из отрезков нельзя собрать однозначный ответ - значит, при разных условиях будут собираться разные версии. Теоретически команда могла бы об этом предупреждать. Тестирует же Автокад 3D-геометрию на корректность при редактировании. Или можно написать свою команду, которая тестирует объекты на предмет глюков в геометрии. Такая команда могла бы быть честным ответом на вопрос темы.
Нубий-IV вне форума  
 
Непрочитано 14.06.2023, 14:34
#26
VitalyAF


 
Регистрация: 19.07.2005
Россия
Сообщений: 3,288


Цитата:
Сообщение от Нубий-IV Посмотреть сообщение
Самое главное - что этот порядок...
Самое главное - это прежде всего навести порядок, а потом уже приступать к работе с подобной графикой.
Где-то в последних версиях есть опция авто подсветки (выбора ) совпадающих объектов.
С её помощью, с пом. overkil прощупывать все линии... а что поделаешь се ля ви... наверняка lisp какй-нить есть...
VitalyAF вне форума  
 
Непрочитано 15.06.2023, 08:52
#27
Старый Дилетант

Дилетант
 
Регистрация: 06.12.2017
Сообщений: 2,934


Цитата:
Сообщение от Нубий-IV Посмотреть сообщение
Причем тут чудеса и факторы?
При том, что изначально набор и количество отрезков разные. При простом копировании такого быть не может.
Некорректную задачу рассмативать бессмысленно. Приведите коректный пример.
Старый Дилетант вне форума  
 
Непрочитано 15.06.2023, 12:56
#28
gumel


 
Регистрация: 20.04.2011
Сообщений: 480


Цитата:
Сообщение от VitalyAF Посмотреть сообщение
Самое главное - это прежде всего навести порядок, а потом уже приступать к работе с подобной графикой.
Где-то в последних версиях есть опция авто подсветки (выбора ) совпадающих объектов.
С её помощью, с пом. overkil прощупывать все линии... а что поделаешь се ля ви... наверняка lisp какй-нить есть...
overkil не всегда сможет помочь. Думаю, что надо использовать _boundary, отстраивать новые контуры и по ним уже считать.

С математической точки зрения, автокад считает правильно. Неправильно может нарисовать пользователь. Попробуйте построить полилинию которая имеет самопересечение. И такую же вторую (с виду) фигуру. Площадь фигур будет очень сильно отличаться (а длина полилиний совпадать)
Миниатюры
Нажмите на изображение для увеличения
Название: Снимок экрана 2023-06-15 165004.png
Просмотров: 45
Размер:	86.9 Кб
ID:	256660  
gumel вне форума  
 
Непрочитано 15.06.2023, 15:17
#29
VitalyAF


 
Регистрация: 19.07.2005
Россия
Сообщений: 3,288


Цитата:
Сообщение от gumel Посмотреть сообщение
С математической точки зрения,
И мы две страницы о том же!
VitalyAF вне форума  
 
Непрочитано 15.06.2023, 18:20
#30
Старый Дилетант

Дилетант
 
Регистрация: 06.12.2017
Сообщений: 2,934


Цитата:
Сообщение от gumel Посмотреть сообщение
Попробуйте построить полилинию которая имеет самопересечение. И такую же вторую (с виду) фигуру. Площадь фигур будет очень сильно отличаться
Попробовал - площадь совпадает.
Старый Дилетант вне форума  
 
Непрочитано 16.06.2023, 02:12
#31
Нубий-IV

Инженер-философ
 
Регистрация: 24.04.2019
Хабаровск
Сообщений: 2,071


Цитата:
Сообщение от Старый Дилетант Посмотреть сообщение
совпадает
Образец геометрии, у которой не совпадает - в шапке темы. Желающие могут заново взорвать правый контур и объединить его обратно - в зависимости от того, какой сегмент выбрать первым, получится площадь то 33, то 24. Не желающие могут продолжать рассказывать, что в автокаде такое невозможно.
Цитата:
Сообщение от gumel Посмотреть сообщение
Неправильно может нарисовать пользователь
Так ясен пень. У темы даже вопрос такой: "я тут где-то ошибся, и не могу найти где". Радуют ответы: "да у тебя там просто ошибка", "да ты просто все неправильно сделал - переделай правильно", "да ты не ошибайся, тогда и ошибок не будет", "переделай заново - вдруг получится правильно", "покажи пример без ошибки, тогда и поговорим". Узнаю русский форум .

Я вот который год с разными программами играюсь - от кадов до блендера, и до сих пор нахожу новые способы прострелить себе ногу. Помнится, у блендера в комплекте поставляются скрипты, среди которых несколько штук как раз контролируют геометрию - замкнутость, гладкость, сонаправленность, полюсность и т.п. - это пользователи постарались. Есть спецшейдеры и спецрежимы визуализации, чтобы глюки в сетке в глаза бросались - это разработчики. Но то художники - что с них возьмешь; даже программировать берутся, лишь бы самим не работать. Инженеры не такие, они ни за что не поручат компьютеру то, что можно сделать вручную .
Нубий-IV вне форума  
 
Непрочитано 16.06.2023, 05:47
#32
gumel


 
Регистрация: 20.04.2011
Сообщений: 480


Цитата:
Сообщение от Старый Дилетант Посмотреть сообщение
Попробовал - площадь совпадает.
Хм, надо же! Очень интересно!
Площадь всегда смотрю через надстройку GeomProps А.Ривилиса. Именно она показывает меньшую площадь для полилиний имеющих самопересечение (такая фигура нарисована слева). Выходит, что признаком "косячной" фигуры будет отличие результата площади в этих двух методах подсчёта.
Миниатюры
Нажмите на изображение для увеличения
Название: Снимок экрана 2023-06-16 093136.png
Просмотров: 35
Размер:	18.6 Кб
ID:	256676  Нажмите на изображение для увеличения
Название: Снимок экрана 2023-06-16 093051.png
Просмотров: 35
Размер:	20.6 Кб
ID:	256677  
gumel вне форума  
 
Непрочитано 16.06.2023, 11:11
#33
Старый Дилетант

Дилетант
 
Регистрация: 06.12.2017
Сообщений: 2,934


Цитата:
Сообщение от gumel Посмотреть сообщение
С математической точки зрения, автокад считает правильно.
Вот только хотелось бы знать, что с математической точки зрения автокада является площадью полилинии и как он ее считает.
Во вложении три одинаковых с виду полилинии одинаковой длины, но разной площади
Вложения
Тип файла: dwg
DWG 2010
Тест 2.dwg (119.1 Кб, 8 просмотров)
Старый Дилетант вне форума  
 
Непрочитано 16.06.2023, 11:47
#34
gumel


 
Регистрация: 20.04.2011
Сообщений: 480


Цитата:
Сообщение от Старый Дилетант Посмотреть сообщение
Вот только хотелось бы знать, что с математической точки зрения автокада является площадью полилинии и как он ее считает.
Когда я утверждал про правильность математического подсчёта, то имел ввиду алгоритм метода трапеций. Можете загуглить в Яндексе: "Площадь многоугольника метод трапеций". Этот метод очень красиво программируется и результат вычисляется за один цикл. Главное условие этого метода - отсутствие самопересечений. Судя по всему GeomProps как раз и считает. Как считается в самом автокаде - фиг знает.
gumel вне форума  
 
Непрочитано 19.06.2023, 23:06
#35
Александр Ривилис

программист, рыцарь ObjectARX
 
Регистрация: 09.05.2005
Киев
Сообщений: 2,413
Отправить сообщение для Александр Ривилис с помощью Skype™


Цитата:
Сообщение от gumel Посмотреть сообщение
Судя по всему GeomProps как раз и считает. Как считается в самом автокаде - фиг знает.
Для полилиний GeomProps использует стандартный метод AcDbCurve::getArea.
Александр Ривилис вне форума  
 
Непрочитано 20.06.2023, 04:04
1 | 1 #36
Нубий-IV

Инженер-философ
 
Регистрация: 24.04.2019
Хабаровск
Сообщений: 2,071


А вот еще смешнее тест. Две фигуры имеют одинаковую геометрию, но разную площадь. Левая фигура получена из правой исправлением координаты первой же точки на 0.00000000000001. В свойствах этого не видно ни при каких LUPREC.
Кто свойствам доверяет, тот тратит время зря (с). Интересно, можно ли получать у полилиний произвольную площадь добавлением волшебных невидимых сегментов?
Миниатюры
Нажмите на изображение для увеличения
Название: Test.png
Просмотров: 109
Размер:	7.2 Кб
ID:	256792  
Вложения
Тип файла: dwg
DWG 2000
Test.dwg (175.5 Кб, 7 просмотров)
Нубий-IV вне форума  
 
Непрочитано 20.06.2023, 05:34
#37
gumel


 
Регистрация: 20.04.2011
Сообщений: 480


Цитата:
Сообщение от Александр Ривилис Посмотреть сообщение
Для полилиний GeomProps использует стандартный метод AcDbCurve::getArea.
Почему тогда Area и Area (total) для одной полилинии иногда могут быть разными?

----- добавлено через ~34 мин. -----
Цитата:
Сообщение от Нубий-IV Посмотреть сообщение
А вот еще смешнее тест. Две фигуры имеют одинаковую геометрию, но разную площадь. Левая фигура получена из правой исправлением координаты первой же точки на 0.00000000000001. В свойствах этого не видно ни при каких LUPREC.
Кто свойствам доверяет, тот тратит время зря (с). Интересно, можно ли получать у полилиний произвольную площадь добавлением волшебных невидимых сегментов?
Удивительно!
По идее, метод трапеций для симметричной фигуры самопересекающейся фигуры выдаст 0.

Сложно утверждать, можно только предположить, что в алгоритме имеется какая-то оптимизация для симметричных фигур. А вот когда фигура не симметричная (на 0.00000000000001), то оптимизации походу дела нет..
gumel вне форума  
 
Непрочитано 20.06.2023, 06:27
#38
gumel


 
Регистрация: 20.04.2011
Сообщений: 480


Ну, а вот это вообще непонятно. Площадь левой фигуры ноль. После копирования, не ноль:
Вложения
Тип файла: dwg
DWG 2004
Test copy.dwg (58.1 Кб, 14 просмотров)
gumel вне форума  
 
Непрочитано 20.06.2023, 06:37
#39
Нубий-IV

Инженер-философ
 
Регистрация: 24.04.2019
Хабаровск
Сообщений: 2,071


Цитата:
Сообщение от gumel Посмотреть сообщение
После копирования, не ноль
Бим мне в спецификацию! Она портится даже от переноса. И от копирования через буфер. Но, если скопировать с базовой точкой, и вставить в то же место, то не портится. А еще она не портится, если копировать ее строго вверх или вниз. А еще не портится, если копировать вправо или влево маленькими шажочками; но, если отойти от начального положения слишком далеко (147 влево или 11 вправо), то начнет портиться и от маленьких шагов.

Похоже, мы нащупали гнездо. Где-то совсем рядом та дырка, через которую свежевылупившиеся глюки и расползаются по всему автокаду.

Последний раз редактировалось Нубий-IV, 20.06.2023 в 07:14.
Нубий-IV вне форума  
 
Непрочитано 21.06.2023, 18:36
#40
Александр Ривилис

программист, рыцарь ObjectARX
 
Регистрация: 09.05.2005
Киев
Сообщений: 2,413
Отправить сообщение для Александр Ривилис с помощью Skype™


Цитата:
Сообщение от gumel Посмотреть сообщение
Почему тогда Area и Area (total) для одной полилинии иногда могут быть разными?
Возможно для полилинии в команде AREA AutoCAD использует другой метод (через COM/ActiveX - AcadLWPolyline::get_Area)
Александр Ривилис вне форума  
 
Непрочитано 21.06.2023, 22:01
#41
Старый Дилетант

Дилетант
 
Регистрация: 06.12.2017
Сообщений: 2,934


Цитата:
Сообщение от gumel Посмотреть сообщение
Ну, а вот это вообще непонятно. Площадь левой фигуры ноль. После копирования, не ноль:
У меня почему-то площадь у обеих 2400 и каким способом ни копирую - получается так же
Старый Дилетант вне форума  
 
Непрочитано 22.06.2023, 05:12
#42
Нубий-IV

Инженер-философ
 
Регистрация: 24.04.2019
Хабаровск
Сообщений: 2,071


Цитата:
Сообщение от Старый Дилетант Посмотреть сообщение
площадь у обеих 2400
В свойствах на панели выводится одно и то же правильное значение. А если смотреть через GeomProps - разные. У меня еще своя считалка суммарной длины есть, написанная, когда ковырял программирование под ObjectARX. Она тоже работает через getArea, и тоже показывает разные площади.

Интересу ради, простейшая команда, которая считает площадь через:
- AcDbCurve::getArea
- AcDbPolyline::getArea (на всякий случай, вдруг она переопределенная)
- честным суммированием трапеций:

Код:
[Выделить все]
 
#include "StdAfx.h"


void GetArea(AcDbCurve* pCurve)
{
	double area;
	if (pCurve->getArea(area) != Acad::eOk)
		return;

	acutPrintf(ACRX_T("\nGet  area (Curve)    = %f"), area);
}


void GetArea(AcDbPolyline* pPolyline)
{
	double area;
	if (pPolyline->getArea(area) != Acad::eOk)
		return;

	acutPrintf(ACRX_T("\nGet  area (Polyline) = %f"), area);
}


void CalcArea(AcDbPolyline* pPolyline)
{
	if (pPolyline->hasBulges())
		return;

	unsigned nSegments = pPolyline->numVerts() - 1;

	AcGePoint2d point_i;
	AcGePoint2d point_j;

	double area = 0.0;

	for (unsigned iSegment = 0; iSegment < nSegments; iSegment++) {
		unsigned i = iSegment;
		unsigned j = iSegment + 1;
		
		pPolyline->getPointAt(i, point_i);
		pPolyline->getPointAt(j, point_j);

		area += (point_i.x - point_j.x) * (point_i.y + point_j.y);
	}

	pPolyline->getPointAt(nSegments, point_i);
	pPolyline->getPointAt(0, point_j);

	area += (point_i.x - point_j.x) * (point_i.y + point_j.y);

	area = std::abs(area) / 2.0;

	acutPrintf(ACRX_T("\nCalc area (Polyline) = %f"), area);
}


void GetArea(AcDbEntity* pEnt)
{
	if (pEnt->isKindOf(AcDbCurve::desc())) {
		AcDbCurve* pCurve = AcDbCurve::cast(pEnt);
		GetArea(pCurve);
	}

	if (pEnt->isKindOf(AcDbPolyline::desc())) {
		AcDbPolyline* pPolyline = AcDbPolyline::cast(pEnt);
		GetArea(pPolyline);
		CalcArea(pPolyline);
	}
}


void GetArea(ads_name name)
{
	AcDbObjectId objId;
	if (acdbGetObjectId(objId, name) != Acad::eOk)
		return;

	AcDbEntity* pEnt;
	if (acdbOpenObject(pEnt, objId) != Acad::eOk)
		return;

	GetArea(pEnt);

	pEnt->close();
}


void GetArea()
{
	for (;;) {
		ads_name  name;
		ads_point point;
		
		switch (acedEntSel(NULL, name, point)) {
		case RTNORM:
			GetArea(name);
			continue;
		case RTCAN:
			return;
		}
	}
}


extern "C" __declspec(dllexport) AcRx::AppRetCode 
acrxEntryPoint(AcRx::AppMsgCode msg, void* appId)
{
	const ACHAR* cmdGroupName  = ACRX_T("GetArea");
	const ACHAR* cmdGlobalName = ACRX_T("GetArea");
	const ACHAR* cmdLocalName  = ACRX_T("GetArea");
	const Adesk::Int32 commandFlags = ACRX_CMD_MODAL | ACRX_CMD_USEPICKSET;

	switch (msg) {
		case AcRx::kInitAppMsg:
			acrxUnlockApplication(appId);
			acrxRegisterAppMDIAware(appId);
			acedRegCmds->addCommand(cmdGroupName, cmdGlobalName, cmdLocalName, commandFlags, GetArea);
			break;
		case AcRx::kUnloadAppMsg:
			acedRegCmds->removeGroup(cmdGroupName);
		break;
	}
	return AcRx::kRetOK;
}
Кому интересно поковырять - во вложении проект для VS2022, и ARX, собранный под Acax2020x64. Добавляет команду GETAREA. Перед сборкой в папку ObjectARX закинуть содержимое.

P.S.
Которые в Лиспе сильны - предложите и вашу версию. А то, кто Автокад сиплюсплющит, тот его не лиспует.
Миниатюры
Нажмите на изображение для увеличения
Название: GetArea.png
Просмотров: 54
Размер:	7.4 Кб
ID:	256850  
Вложения
Тип файла: zip GetArea.zip (31.6 Кб, 1 просмотров)
Нубий-IV вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Почему различна площадь двух "одинаковых" многоугольников?



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Почему лофт не создает тело из двух областей? 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