Точное 3D-моделирование

Автор w64, 03.01.22, 21:20:32

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

w64

Общий вопрос: можно ли в Компасе проводить точные (совершенно точные, а не ограничиваясь каким-то знаком после запятой) 3D-построения и как именно это лучше сделать. Отдельный вопрос можно ли это сделать не для всех 3D-построений, а только 3D-построений "циркулем и линейкой" (т.е. рассматриваются только операции с использованием плоскостей, шаров, конусов, цилиндров - в общем, всё то, что не требует решения ничего, кроме решения линейных и квадратных уравнений).

1) Какие настройки выставить в начале, чтобы ничего не округлялось?
2) В переменных при этом придётся пользоваться операцией взятия квадратного корня sqrt(), все эти значения тоже должны считаться точными, а не браться какие-либо приближения. Т.е. внутреннее представление чисел в программе должно обеспечивать строгое алгебраическое замыкание над арифметическими операциями и операцией взятия квадратного корня, возможная реализация таких чисел может быть в виде дерева.
3) В булевских операциях следует при этом указывать точность ноль?
4) Какие действия могут принципиально не поддерживать такой режим работы?
5) При такой работе с точными построениями не должны вылезать ошибки типа "тело с нарушенной топологией" и им подобные.

IgorT

И че? У Вас при построении в параметрическом режиме построения  модели у Вас постоянно выскакивают заявленные Вам неточности?

w64

Ну сообщения про неправильную топологию при попытке сделать булевские операции я получаю постоянно, хотя с этими же телами другие булевские операции проходят.
Кроме того, вот сейчас получил "невозможно выставить согласованную ориентацию граней" при попытке собрать тело из граней. Оно выглядит нормально, при создании граней использовались только общие рёбра (дуги окружностей или отрезки) и точки, так что все связи должны ставится один в один, но получаю вот ошибку при операции "сшивка поверхностей". А можно указать эти ориентации вручную?

p3452

Цитата: w64 от 03.01.22, 21:20:32можно ли в Компасе проводить точные (совершенно точные, а не ограничиваясь каким-то знаком после запятой) 3D-построения
:-)))  :-)))  :-)))
Вот это Тема, так Тема...

Кирямба

С точностью до атома?
Вообще, вам следует изучить материал по темам "Допуски и посадки" и "Классы допуска".
А внутренний расчет в программе выполняется в формате с плавающей запятой двойной точности, то есть, точность абсолютных значений зависит от величины абсолютного значения. При сравнении двух чисел в формате с плавающей запятой всегда выполняется некоторое округление, из-за особенностей самого типа "плавающая запятая", когда точное значение например "2" может быть представлено как 1,99999999999... с погрешностью 1е-22.

Но это лирика. А практика заключается в том, что ​любое средство измерения размеров и любой инструмент изготовления имеет свою ограниченную точность, то есть погрешность размера. Для примера - возьмите ножовку и сделайте пропил на листе ДСП на расстоянии 200 мм от края. Потом возьмите канцелярский нож и проведите на этом же ДСП бороздку по линейке на таком же расстоянии от края. Затем штангенгенциркулем с делениями 0,05 или 0,01 мм замерьте пропил ножовкой, а строительной рулеткой замерьте бороздку от ножа. Это просто чтоб понимали меру точности при изготовлении и измерении.


1. Округляются только значения при  отображении, а внутренний расчет производится в полной размерной сетке.
2. Значение квадратного корня может являться именно приближенным значением. Например, √2 не может быть вычислен абсолютно точно, поскольку число десятичных знаков бесконечно. Всегда будет взято приближенное значение.
3, не понял? Точность - она настраивается только для отображения на дисплее, чтобы цепочка из 20 десятичных знаков не мешалась.
4. не понял
5. Это зависит от формы объектов и от дерева построения. Следует более правильно строить топологию, следить за параметризацией эскизов. Параметризация то для чего вводится - для того, чтобы все точки эскиза были математически определены между собой. От этого зависит алгоритм построение поверхностей.
Есть программы полигонального 3D-моделирования, где поверхность представляет собой полигон с тремя или более вершинами, а моделер оперирует именно этими полигонами (3ds Max например). А в Компасе поверхности строятся на основе параметрических расчетов.
+ Благодарностей: 1

Кирямба

PS. Кажется, я понял, что имел ввиду автор. У него вероятно не параметризованные эскизы.
Проблема вот в чем. Когда эскиз полностью параметризованный  (определенный, с плюсиком), его точки имеют СОВЕРШЕННО точное значение относительно нуля координат и относительно друг друга. Например, прямоугольник, построенный с привязкой от нуля координат и с заданным размерными линиями размером имеет ширину точно 25 мм, а высоту ТОЧНО 47,39 мм. Отрезки линий имеют точное числовое равенство точек концов отрезков. И линия, проведенная от угла прямоугольника с помощью привязки, имеет начало ТОЧНО в точке x = 25 и y = 47.39. То есть, когда на все точки и линии наложены параметрические ограничения, Тогда можно построить ТОЧНУЮ формулу кривой y = f(x). Вот.
А когда линии строятся "на глаз", то вроде бы как визуально совпадают точки, то одна точка имеет координату x = 25,00000145, другая точка x = 25,00000472, визуально они вроде бы и совпадают, но вот по числам - не совпадают. Поскольку, как я уже говорил, при сравнении значений в формате с плавающей точкой не бывает абсолютно точного совпадения, они сравниваются с некоторым округлением. И хотя ошибка округления может быть очень малой, до 1е-37, но в результате большого числа математических вычислений эта ошибка возрастает то таких значений, когда внутренний мат.аппарат Компаса уже перестает считать эти числа равными. Отсюда и вылезает ошибка "неверная топология поверхности, невозможно выполнить построение", хотя визуально вроде как всё должно быть окейно.
+ Благодарностей: 2

YNA

Всё это конечно так в теории, а на практике ошибка ТНТ (тело с нарушенной топологией) сильно досаждает.  :(
Вот простой пример на пальцах.
-Строим многоугольник (рис. 1) и меняем стиль окружности на основную.
-Выдавливаем окружность, все нормально (рис 2)
-Пробуем выдавить оставшиеся "лепестки" (рис 3). Оказывается выдавить можно только 1 лепесток. Если попробовать выдавить сразу два или больше, то получим ошибку ТНТ.
-Во избежание ошибок приходится выдавливать их по очереди (рис 4). Вот теперь всё в порядке, но на эту процедуру уходит в лучшем случае 7 операций, а в худшем до 14 (рис 5).
Бывают случаи (те самые 14 операций) когда выдавить объединением тел  оставшиеся 5 лепестков вообще невозможно и приходится выдавливать их новыми телами и потом объединять булевой операцией. Тут скорее проблема не с точностью а с логикой работы программы.

Ушкуй

Цитата: YNA от 10.01.22, 07:59:30Всё это конечно так в теории, а на практике ошибка ТНТ (тело с нарушенной топологией) сильно досаждает.  :(
Уже нет. К20.

p3452

Да! В v20 - нет этой проблемы...
Одной операции хватает на любое количество "лепестков".
Призма+Цилиндр.png


IgorT

Что-то ТС молчит. Не очень то понятно что ему надо. Про какие-то квадратные уравнения говорил...

СВ

ТС, похоже, простой вопрос задал сложными словами. Лучше бы выложил модель и сказал, что там нужно и что не получается. (В итоге окажется, что всё решается включением ортогонального режима.)

p3452

ТС задал вопрос о том чего в принципе не может быть в 3D моделировании :sun:

YNA

Ну вот. кое что прояснилось.
Для большей наглядности возьмём четырёхугольник. Оказывается можно построить два лепестка за одно выдавливание. Условие простое: линия разъёма (соединения плоской и цилиндрической поверхности) первого лепестка не должна проходить через точку возврата окружности. На рисунке эта точка выделена кружком. Найти эту точку очень легко выделив начальный цилиндр провой рамкой. Теперь можно зараз выдавить два лепестка, но второй лепесток должен быть выдавлен именно из той области, которая указана стрелкой на втором рисунке. Любая другая область (кроме диаметрально противоположной), выбранная для выдавливания приведёт к ошибке ТНТ.
Ну и на десерт прикол. Если выделить сразу все 4 области, прилегающие к цилиндру, то получим вроде бы безошибочное тело, но оно будет содержать 12 линий разъёмов поверхностей (см. 3-й рис)  :-)))
С шестигранником посложнее и там  иногда появляется элемент непредсказуемости, но это уже не та тема.

Кирямба

Как я писал ранее, Компас, в отличие от того же 3ds Max, совершенно не имеет никаких инструментов для работы с полигональной сеткой модели, поэтому невозможно вручную редактировать полигональную сетку. Остается полагаться только на параметрические инструменты. Отсюда и возникают принципиальные невозможности выполнения некоторых действий. Возможно, показанная задача должна решаться чуть более другим способом, чтобы избежать проблем топологии. Я не большой специалист (фактически начинающий) в Компасе, зато у меня более чем 15-летний опыт в 3ds Max.

СВ

10.01.22, 12:02:27 #14 Последнее редактирование: 10.01.22, 12:16:19 от СВ
Цитата: Кирямба от 10.01.22, 11:45:08... возникают принципиальные невозможности выполнения некоторых действий.
Какие именно действия? Потому как можно не иметь каких-то действий, но выполнить задачу - другими действиями.

Кирямба

Цитата: YNA от 10.01.22, 11:04:40Для большей наглядности возьмём четырёхугольник.
С шестигранником посложнее и там  иногда появляется элемент непредсказуемости, но это уже не та тема.
Быть может, я не понял вашу затею, но лично у меня всё получается.

YNA

ОМГ! Присмотритесь внимательно к рисункам, у вас же многотельная деталь! Многотельным моделированием я то же могу "горы свернуть"  :)
Сущность этой темы в появление и преодолении ошибок ТНТ, почему они появляются и как с ними бороться? От этого возникает желание непомерного повышения точности расчётов, которое неминуемо приведёт к пропорциональному снижению быстродействия.
В чём сущность ошибки ТНТ?
Телом называется замкнутая поверхность, для которой можно посчитать объём и, умножив его на плотность, получить массу. Если поверхность не замкнута (или не сшита), то она называется просто Поверхность. Как раз все эти ошибки ТНТ происходят во время этих операций сшивки и подсчёта объёма. Ну а дальше всё по этой теме.
Есть отдельные случаи, не укладывающиеся в эти определения - это глюки программы и для них мы тут ищем обходные решения.
Есть ещё случаи, уже приводившиеся на этом форуме (в весёлых задачах), где действительно есть сбой математики или точности, но там использовались кривые третьего порядка, и это уже совсем другая тема.  :-\

Кирямба

11.01.22, 16:37:44 #17 Последнее редактирование: 11.01.22, 17:07:07 от Кирямба
Ну так я жеж не слепой и не дурак, я жеж специально разделил на тела. Потому как, я ж уже говорил, мой опыт в трехмерке уже более 15-ти лет, с 2004 года, когда компутеры были громоздкими и с ЭЛТ-мониками. А дипломную работу в то время я вообще вручную чертил, поскольку Компас был ваще тупой и бестолковый и быстрее было сделать от руки. (нынче то вы даже небось не знаете, чем отличается карандаш H от 7H :) )
Посему мы, "древние динозавры", еще с тех времен приучены были разбираться и понимать, как выглядит полигональная сетка трехмерных моделей, как математически описывается поверхность. То есть, я в этом разбираюсь, образно говоря, на уровне молекул и атомов. Потому и заранее предвижу, какие сложности могут возникать с математикой представления поверхностей в том или ином случае. И именно поэтому я и разбил на несколько тел, чтобы математический аппарат мог независимо работать с поверхностями, разбив их на отдельные независимые поверхности.
Вот так в полигональной "молекулярно-атомной" структуре выглядят эти два варианта. Слева - разными телами, справа - одним телом (для наглядности геометрии разнес части его геометрии по высоте).
Снимок экрана 2022-01-11 192654.png
Слева каждое тело ограничено со всех сторон собственными плоскостями и тела можно разнести без образования пустоты, все они представляют собой замкнутые поверхности и их можно трансформировать без нарушения целостности геометрии.
Справа же у элемента круга частично нет внутренней поверхности, а нижний полигон в основании вообще общий и для круга, и для секторов, образованный объем не замкнут. Поэтому в целой модели контуры элементов должны прилегать друг к другу, чтобы не образовывать разрыва поверхностей и появления незамкнутых щелей. Из-за этого в Компасе и есть ограничения в операциях над такой геометрией. В тех прогах моделирования, которые имеют доступ к "атомам и молекулам", эти косяки легко устраняются инструментарием полигонального моделирования, методом отделения "молекул" и достраивания недостающих поверхностей.

А еще тут я рассказывал, как выглядят числа во внутренней математике. Формат с плавающей точкой двойной точности, он хоть и имеет до 37 знаков после запятой, но сама суть этого формата в том, что в нем нет абсолютно точных значений и число 5 может быть записано как 4,99999999999999... и постепенно ошибка будет накапливаться при вычислениях. Есть специальные алгоритмы минимизации ошибки сравнения, но абсолютно точных значений, как стояло во главе вопроса этой темы, в float-системе нет. Такова плата за возможность обрабатывать на компутере широкий диапазон целых и дробных чисел.

К показанной выше проблеме незамкнутых объемов и отсутствующих поверхностей точность расчетов и точность задания размеров при моделировании отношения не имеет. Это проблема внутренней логики и математики Компаса.  Программисты где-то чего-то недосмотрели, где-то что-то упростили. Потому как в принципе в трехмерных моделях считается дурным тоном две поверхности, полностью совпадающие друг с другом. А тут еще и особенности float-арифметики, когда есть отдельно число +0 и число -0.
Ну и зная всё это, опытный моделлер заранее уже старается избежать потенциальных проблем, чем потом тратить часы и дни на попытки впихнуть невпихуемое и наложить заплатки на косяки. 
+ Благодарностей: 2

p3452

Цитата: Кирямба от 11.01.22, 16:37:44...карандаш H от 7H...
- Улыбнуло!
- Ностальг-и-я!!!
Тогда пословица бытовала: "Научился чертить карандашом 3М - можешь женится!".
+ Благодарностей: 1

Петрович-47

Цитата: Кирямба от 11.01.22, 16:37:44мой опыт в трехмерке уже более 15-ти лет, с 2004 года
Молодой человек, мы уже все это поняли и не взирая на прорехи в старческой памяти постараемся это запомнить...