Построение расчётной модели балок, расположенных с нерегулярным шагом и имеющих разную ширину грузовой площади, превращается в рутинную работу, когда дело доходит до приложения на них нагрузок. Для радиально расположенных балок задача усложняется тем, что ширину грузовой площади придётся вычислять дважды: в начале и в конце балки.
Как правило, чтоб определить величину нагрузки, мы берём полусумму расстояний от рассматриваемой балки до соседних и умножаем на интенсивность нагрузки.
Исходные данные для задачи и алгоритм решения
Чтобы решить данную задачу в САПФИР нам потребуются исходные данные в виде самой балки, а также 4-х линий, ограничивающих пространство между балками.
В САПФИР-Генераторе есть два способа приложения нагрузок на балку: приложение сосредоточенных сил и распределённых, поскольку нам нужна распределённая сила, то затянем на холст соответствующий нод и разберёмся, какие исходные данные ему нужны.
Данный нод формирует распределённую нагрузку от одной линии к другой:
Ln1 – линия балки, для получения которой мы используем соответствующий нод.
Ln2 – линия, определяющая изменение интенсивности нагрузки, её мы должны получить из ширины грузовой площади и расположить строго над балкой, так чтобы они лежали в одной вертикальной плоскости, т.е. один конец этой линии должен располагаться над началом балки на расстоянии Z =0.5*ширина1, второй конец должен быть над второй вершиной балки на расстоянии Z=0,5*ширина2
Для получения нужной линии, потребуется создать нужные точки, которые потом будут соединены отрезком.
Чтобы построить точки на контурах грузовой площади задействуем нод PntPar. В качестве исходных данных укажем один отрезок контура грузовой площади. В свойствах нода следует настроить параметры точек: задаём число от 0 до 1. Это число задаёт расстояние, на котором будет размещена точка от начала отрезка. Расстояние задаётся в долях от длины отрезка.
Такую же операцию выполним для оставшихся трёх отрезков: размещаем на холсте ещё три нода с такими же параметрами.
Для того, чтобы наш алгоритм было более удобно использовать, расположим ноды друг относительно друга так же, как исходные объекты расположены в модели, и сгруппируем их в отдельный набор.
Полученные точки следует повернуть на 90 градусов относительно оси балки, чтобы они находились с ней в одной вертикальной плоскости.
Для этой операции вызовем нод Rotate, который выполняет поворот объектов относительно выбранной точки. Исходными данными для этого нода служат: объекты, которые нужно повернуть (вход List – подаём на него информацию о первой точке). Следующий вход – точка, относительно которой будет происходить поворот, для этого мы снова вызываем нод создания точки на прямой, но в этот раз сообщаем ему исходные данные об оси балки и в свойствах задаём параметры точек 1, чтобы узел появился на конце стержня. Соединяем вход-выход Р. Затем следует сообщить ноду Rotate информацию о векторе, относительно которого будет происходить поворот, её мы также получаем из нода которым создавали узел: соединяем входы V-V. Для осуществления самого поворота, следует указать угол, на который мы хотим повернуть точку, это можно сделать при помощи нода flt (вещественное число), его мы вызываем со вкладки Параметры. В свойствах указываем: максимальное значение 90, текущее значение 90, имя: угол поворота. Устанавливаем связь со входом Ang, в результате получаем узел, расположенный над началом балки на расстоянии Z равном расстоянию по горизонтали от начала до исходного узла.
Первый вариант решения задачи
Чтобы закончить операцию по созданию алгоритма приложения нагрузки, можно повернуть на тот же угол точку на конце балки, соединить их отрезком и смоделировать нагрузку по линиям. После этого нужно будет выполнить такие же операции для точек на противоположной стороне балки. Недостаток этого способа заключается в том, что в итоге получатся две распределённые нагрузки, значение которых будет достаточно трудно проконтролировать.
Второй вариант решения задачи
Чтобы уйти от недостатков первого варианта, пойдём другим путём. Точку, полученную на середине отрезка по одну сторону балки, мы сдвинем ещё дальше на расстояние равное отрезку от начала балки до такой же точки по другую сторону. И уже дальнейшие действия по повороту и построению соединительного отрезка будем производить с перемещённой копией точки.
Для доработки алгоритма, удаляем связи между нодами создания точек и их поворота. Для перемещения точек мы воспользуемся командой Move (Преобразование). Исходными данными, для данного нода, служат: сам перемещаемый объект, а также вектор, вдоль которого будет происходить перемещение. Перемещаемый объект – точка, а чтобы получить вектор, воспользуемся нодом P1P2Vec (Геометрия). Нод P1P2Vec формирует вектор между 1й и 2й точками. 1й точкой послужит середина отрезка по правую сторону балки, а второй – конечная точка на оси балки, которую мы получим при помощи уже знакомого нода PntPar. Получив все необходимые данные, сообщаем их ноду Move, который переместит исходную точку по направлению перпендикулярно балке, на расстояние равное длине заданного вектора.
Повторим выполненные операции для второй точки (на меньшей стороне). Получив точки на нужном расстоянии от оси балки, выполняем операцию поворота и построения нагрузки.
Проверяем значения распределённой нагрузки в начале и в конце балки.
По результатам видно, что интенсивность нагрузки равна расстоянию между серединами отрезков, это значит, что алгоритм работает верно.
Ограничения созданного алгоритма
У созданного алгоритма есть существенное ограничение: он может корректно работать, только если линии, обозначающие ширину грузовой площади строго перпендикулярны осевой линии балки. Если это требование нарушить, то векторы перемещений будут строиться под углом, из-за чего вектор самой нагрузки будет иметь наклон, по отношению к осевой линии балки, вследствие чего, в балке от внешней нагрузки возникнет дополнительно продольная сила.
Доработка алгоритма для устранения недостатков
Чтобы исключить недостаток, связанный с ограничением геометрии грузовых площадей, внесём доработки в наш алгоритм. Удалим связи, идущие от середин отрезков на ноды создания векторов и перемещения отрезков Точки, которые мы получаем на середине отрезков, спроецируем на плоскости, строго перпендикулярные оси балки, и дальнейшие операции будем производить именно с этими точками. Для создания проекций нам послужит нод PlnCp, который мы размещаем в группе нодов Алгоритм. Исходными данными для него послужат: точки в начале или на конце балки, а также плоскость перпендикулярная её оси. Чтобы получить плоскость, воспользуемся нодом GenPln, создающий плоскости перпендикулярные исходной линии. для которого нужно будет указать исходную линию, а также параметры, определяющие положение плоскости. Исходной линией послужит ось балки, а в параметрах укажем, что нод должен разбить балку на 1 участок, т.е. создать плоскости на концах.
Поскольку созданный нод, GenPln, создаёт сразу две плоскости, необходимо каким-то образом отфильтровать их так, чтобы точки в начале балки были бы спроецированы на начальную плоскость, а точки в конце балки на конечную. В этом нам поможет нод Culllnd (Преобразование), который фильтрует элементы списка в соответствии с заданными параметрами фильтрации. Создадим два экземпляра этого нода и подадим на них данные о созданных плоскостях.
В первом ноде настраиваем параметр Список номеров 0 и подаём исходные данные на первую пару точек (большая сторона). Для второго нода настраиваем Список номеров 1 и подаём эти данные на ноды проецирования второй пары точек (меньшая сторона).
Дальнейшие операции выполняем в таком же порядке, как и для предыдущей версии алгоритма, только в этот раз работать будем не с исходными точками, а с их проекциями.
Проекции точек по левую сторону балки перемещаем влево от её оси на расстояние равное длине вектора от правой проекции до осевой линии. Дополнительно, выполним разбиение конечного отрезка, формирующего интенсивность нагрузки точками, а затем соединим точки отрезками. Эту операцию мы выполняем для более надёжной работы алгоритма.
Все вышеизложенные операции подробно описаны в видеоуроке https://vk.com/lirasaprtraining?z=video-155257826_456239242%2Fvideos-155257826%2Fpl_-155257826_-2