Я боюсь, если ветер усилится, как выжить?
Если бросать плавякорь и тормозить лодку,
то пятиметровые волны проходят через неё,
то нас просто раздавит.

Если нестись с ветром по волнам,
то есть опасность перевернуться.

Где эта грань?

Федор Конюхов

Сообщение-мольба с маршрута  через ТО

 

Исследование лодки ФК и других плавсредств
в случае равновесия  и не равновесия

Студенты ФУМТ  В. Кушнир, А.Чернов, О.Амрахов

Самый ответственный момент – определить угол крена 
при перемещении  груза от одного стакана к другому

«Филадельфийский эксперимент» 0, 1, 2 (фото-сессии)

 

 

MetaAll_метод_R2_test.vbs

 

diff =  -52.11 ' -11

difkr = -0.4 ' дифферент выравнивающий

dif = diff + difkr

yi = 0.150  ' вес порожнего судна

Set G = p(0,0.3,0) ' центр тяжести судна задается строителями

Ngpoint.ss G

Width=100

SetColor 255,0,0

Text.sss G, “Gship”, “Arial”, 400

 

' приведенный вес груза задан

Rgr = 1.00  '2.178 ' 1.000 ' 0.178

' приведенный ЦТ груза задан – сдвинт по вертикали

Set G_gruz = p(2, 0.7, 0)

Set G_gruz = p(0, 3.0, 0)

 

Set C2 = G_gruz ' переобозначили

Ngpoint.ss C2

Width=100

SetColor 255,0,0

Text.sss C2, “Ggruz”, “Arial”, 400

Otrezok.ss G, C2

 

Set Mc = p(0,0,0)

Set Pc = p(0,0,0)

Set Go = p(0,0,0)

Set T = MetaAll (n71,dif,yi,G, Rgr,G_gruz,Mc,Go,Pc,0)

 

VBSMsg (“Осадка ГВЛ: “ &  Mc.z)

 

 

 

 

 

Катамаран – гондолы – параллелепипеды

 

Рассмотрим для случая когда одна гондола оказывается над водой

 

dif =  -48.7

yi = 0.150  ' вес порожнего ката

Set G_ship = p(0,0.3,0) ' центр тяжести пустого ката

Text.sss G_ship, “Gship”, “Arial”, 400

' приведенный вес груза задан

Rgr = 1.00 

' приведенный ЦТ груза задан – сдвинут по вертикали

Set G_gruz = p(0, 3.0, 0)

Text.sss G_gruz, “Ggruz”, “Arial”, 400

Otrezok.ss G, G_gruz

 

 

Катамаран  уравновешен:
 

 

Изменим условия данных на входе

dif =  -20.0

yi =  0.2  ' вес порожнего ката

Set G_ship = p(0,0.3,0) ' центр тяжести пустого ката

Text.sss G_ship, “Gship”, “Arial”, 400

' приведенный вес груза задан

Rgr =  0.900 ' 0.100 

' приведенный ЦТ груза задан – сдвинут по вертикали

Set G_gruz = p(2.5, 1.5, 0)

 

 

 

 

 

 

Два стакана – устойчивость

 

 

Поддерживающая сила видно, что вычисляется не там!!!

 

 

График зависимости объема от осадки  одной «оболочки»

 

 

График зависимости объема от осадки  двух «оболочек»

 

      

Попытка рассчитать график зависимости объема от осадки  двух «оболочек» с их креном (пока не получилось как надо). Справа тоже пока не правильно

 

Диапазон для обеих оболочек задаем отдельно

 

Os_beg = -2.53

Os_end = -0.45

pn = 8

hag =  (Os_end – Os_beg)/pn

 

For n  = 1 To pn step 1

' Определяем объем от осадки судна

h1 = Os_beg + hag*n

PolyPov.BelowWL n71, h1,1 

n81 = LastNmb

nBody = CreateLinBodyFrom(n81, Trian, False)

n82 = LastNmb

Set AAA6Surfs = Vector.GetDocObject (nBody)   

vol = AAA6Surfs.Volume

xr(n) = h1

yr(n) = vol

 

Для второй оболочки

Os_beg2 = 0.98

Os_end2 = 3.0

 

 

 

Задание «дока» произвели через две половинки – по ним более правильно задается тело-объем.

 

И соответственно более правильно вычисляется центр силы поддержания.

 

        

 

 

Возникла проблема создать метод для группы поверхностей:

1) Определить осадку для группы емкостей (поверхностей)  на входе заданному объему (водоизмещению)

 

Метод для одной полиповерхности есть:

h = PolyPov.Osadka(n1, 0.1, V) – осадка по заданному объему V

Входные параметры:

n1 – индификатор поверхности

0.1  – шаг с каким происходит перебор

V  - объем (водоизмещение) по которому ищется осадка

h – вычисляемая осадка выходной параметр

 

Можно по аналогии создать методы для групп:

1)      Резка группы поверхностей (ниже ГВЛ – диалог и метод)

2)      Построение группы тел «поверхность-плоскость»  из группы  поверхностей  (плоскость одна, поверхностей – 10,    диалог и метод).

Для одного объекта (поверхности, тела) методы есть:

  1) PolyPov.BelowWL n71, h1,1    (резать)

  2) nBody = CreateLinBodyFrom(n81, Trian, False) (телоповерхность-плоскость).

 

Пока делаем метод, проверим с помощью пошагового вычисления объема при заданной осадке.

 

Вот как раз тот эффект при задании тела поверхности вращения

 

 

 

Листинг МК задание поверхностей  2-х  стаканов

 

<Метод_стакан_два.vbs>

Листинг МК  обрезания поверхностей стакана по заданной осадке, построение тел подводной части, вычисление центров положения  как по отдельности для каждого стакана так и общей  Цтo

 

Проверим еще при  двух заданных осадков

 

h1 = 3.0

 

Здесь все нормально плоскость ГВЛ пересекает оба стакана

h1 = -0.5

Ошибка – плоскость по заданной осадке не пересекает стакан слева:

 

Макрокоманда прекращает свою дальше работу. Как обойти этот момент?  Можно в МК, можно в методе не делать это сообщение – пропускать, хотя тоже будет плохо. Делаем в МК

Например, заодно вычисляем суммарный подводный объем

if h1 > 0.68 and h1 < 3.7  Then

vol = vol1 + vol2

End if

 

if h1 > 0.7 and h1 < 5.7  Then

vol = vol2

End if

if hh1 > -1.3 and h1 < 3.7  Then

vol = vol2

End if

 

 

 

 

 

На рис. показана осадка (2.5) грузовой ВЛ

 

 

Неверно стакан справа должен быть погружен

 

 

Объем в стаканах и вместе

  

 

Слева стакан погружен полностью

Общее водоизмещение = 

 

Вот теперь строим график зависимости объема от осадки

 

 

Что-то получили. Проверяем. При осадке 4.5 объем должен быть равен 141.81 (см выше). Не получилось.

Здесь результат ближе к истинному (9.8).

Увеличим число выводимых точек на линию с 10 до 20. Нет, сильно не изменилось 

 

 

 

 

 

Расчеты через метод: Set T = MetaAll (n71,dif,yi,G, Rgr,G_gruz,Mc,Go,Pc,0)

 

 

 

 

Получение графиков остойчивости для 2-х стаканов с использованием метода MetaAll

 

 

Продолжение следует: будет делать метод отсечения (резка) поверхностей не по отдельности, а сразу несколько, заданных в группе.

 

Ура! Сделали отсечения (резка) поверхностей не по отдельности, а сразу для нескольких в группе, построение объемов (тел) ниже ватерлинии и соответствующих вычислений. Соответствующие методы  для одной объекта (отсечения, осадка, задание тел «поверхность-плоскость») стали работать для групп.

 

 

На входе заданы  4 поверхности (половинки), определяющих  2-х стакана

Vector.Import "C:\A_2013_Верстка\МЕТА_ВЫСОТА_NEW\Стакан_нов\Контур_внешн.dxf", 1

n1 = LastNmb

RoundPov.ss P(0, 0, 0), n1, 31,31, 180,0

n11 = LastNmb

Obj.Translate P(-8, 0., 0.)

dubl

n12 = LastNmb

Obj.Reflect 1 ' YZ

dubl

n13 = LastNmb

Obj.Translate P(16, 0., 0.)

dubl

n14 = LastNmb

Obj.Reflect 1 ' YZ

obj.All = 1

obj.zAngle= -15

obj.scale= 0.5

obj.All = 0

PolyPov.Trans n11, 0 ' преобразование поверхностей вращения в полиповерхности

PolyPov.Trans n12, 0

PolyPov.Trans n13, 0

PolyPov.Trans n14, 0

delete n14

delete n13

delete n12

delete n11

delete n1

MoveToGroup 1, 5, "ngr_all"

n71 = LastNmb

 

Построив два стакана по МК выше, вызываем через команду Макрокоманда

<Тест_на объем_тело.vbs>

n71 = LastNmb

h1=4.5

PolyPov.BelowWL n71, h1,1

CurrObjNmb=LastNmb

'ar = PolyPov.area

'Set Pc = PolyPov.centroid

'SetFillColor 255, 0, 0

'VBSMsg ("ar: " &  ar)

'Ngpoint.ss Pc

'Width=100

'SetColor 255,0,0

' Центр поверхности и площадь вычисляются в диалоге

'Центр = (0.84398, 1.5609, 0)

'Площадь = 122.343

'Text.sss Pc, "Pc", "Arial", 400

Otrezok.ss p(-3,h1,0),p(3,h1,0)

Text.sss p(3,h1,0), "ГВЛ", "Arial", 400

 

' Строим тела ниже осадки в группе

' Плоскость

      Set A = p (1,0,0)

      Set B = p (2,1,0)

      Set C = p (4,2,0)

      Trian.ss A, B, C

      nBody = CreateLinBodyFrom(2, Trian, False)

      CurrObjNmb=LastNmb

      n22 = LastNmb

      V = Volume(n22)

      Set Pc = Centroid(n22)

      Ngpoint.ss Pc

      Width=100

      SetColor 255,0,0

      VBSMsg ("ЦТ подводной части: " &  " Pc.x = " & Pc.x & " Pc.y = " & Pc.y & " Pc.z = " & Pc.z)

      VBSMsg ("V: " &  V)

      Otrezok.ss p(-3,h1,0),p(3,h1,0)

 

 

Емкость (справа) заполнена полностью, слева по ГВЛ

Резюме: может быть любая ситуация, в зависимости от осадки  - ГВЛ

 

 

Определение осадки в зависимости от заданного объема (водоизмещения)

n71 = LastNmb ' идентификация поверхностей, задаваемых стаканы

 

vi = 34  ‘ – задаваемый объем

 

h1 = PolyPov.Osadka(n71, 0.1, vi)

VBSMsg ("h1: " &  h1)

' строим тела ниже в зависимости от полученной осадки

PolyPov.BelowWL n71, h1,1

CurrObjNmb=LastNmb

'ar = PolyPov.area

'Set Pc = PolyPov.centroid

'SetFillColor 255, 0, 0

'VBSMsg ("ar: " &  ar)

'Ngpoint.ss Pc

'Width=100

'SetColor 255,0,0

' Центр поверхности и площадь вычисляются в диалоге

'Центр = (0.84398, 1.5609, 0)

'Площадь = 122.343

'Text.sss Pc, "Pc", "Arial", 400

Otrezok.ss p(-3,h1,0),p(3,h1,0)

Text.sss p(3,h1,0), "ГВЛ", "Arial", 400

 

' Строим тела ниже осадки в группе

' Плоскость

      Set A = p (1,0,0)

      Set B = p (2,1,0)

      Set C = p (4,2,0)

      Trian.ss A, B, C

      nBody = CreateLinBodyFrom(2, Trian, False)

      CurrObjNmb=LastNmb

      n22 = LastNmb

      V = Volume(n22)

      Set Pc = Centroid(n22)

      Text.sss Pc, "C", "Arial", 400

      Ngpoint.ss Pc

      Width=100

      SetColor 255,0,0

      VBSMsg ("ЦТ подводной части: " &  " Pc.x = " & Pc.x & " Pc.y = " & Pc.y & " Pc.z = " & Pc.z)

      VBSMsg ("V: " &  V)

      Otrezok.ss p(-3,h1,0),p(3,h1,0)

 

Полученные параметры

   

 

 

Строим зависимость объема от осадки

 

' Диаграмма объем от осадки 

n71 = LastNmb

 

xr = Array(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)

yr = Array(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)

 

' диапазон надо задавать

Os_beg = -1.4

Os_end = 5.8

 

pn =  8 '8

hag =  (Os_end - Os_beg)/pn

' Плоскость

      Set A = p (1,0,0)

      Set B = p (2,1,0)

      Set C = p (4,2,0)

      Trian.ss A, B, C

 

For n  = 0 To pn step 1

      h1 = Os_beg + hag*n

      PolyPov.BelowWL n71, h1,1

      n81 = LastNmb

      CurrObjNmb=LastNmb

      ' Строим тела ниже осадки в группе

      nBody = CreateLinBodyFrom(n81, Trian, False)

      CurrObjNmb=LastNmb

      n22 = LastNmb

      V = Volume(n22)

      xr(n) = h1

      yr(n) = V

Next

 

For n  = pn+2 To 2 step -1

      Delete n

Next

 

For n  = 11 To 2 step -1

      Delete n

Next

 

 

'VBSMsg ("yr(0) " &  yr(0))

 

 

' Строим график

Mx=1

My=0.1

Polyline.Reset ' Обнулить, если строилась раньше полилиния

For n  = 0 To pn step 1

      Polyline.AddP(P(Mx*xr(n), My*yr(n), 0) )

'     Ngpoint.ss (P(Mx*xr(n), My*yr(n), 0))

'     Ngpoint.ss (P(Mx*xr(n), 0, 0))

'     Otrezok.ss p(Mx*xr(n),0,0),p(Mx*xr(n),My*yr(n),0)

Next

Polyline.SaveInDoc (n_poline)

'Polyline.Draw

' CurrObjNmb = LastNmb

n11 = LastNmb

 

 

' ВЫЧИСЛЕНИЯ ПО ГРАФИКУ

 

' по графику от заданной осадки определить объем

'x1i = Os_beg + hag*5 ' h1*10

x1i = 4.0 ' 2.5 ' 4.5

CurrObjNmb = n11

Set A1 = Polyline.Px(Mx*x1i, 55) 

Ngpoint.ss A1

Width=220

'VbsMsg "Объем при осадке = " & x1i & "  Равен " & 2*A1.y/0.25

otrezok.s A1.x, 0, 0,  A1.x, A1.y, 0

Text.ss A1, "Объем от осадки судна"

otrezok.s -7, x1i, 0,  7, x1i, 0

Text.ss p(7, x1i, 0), "ГВЛ"

Text.ss p(0, x1i, 0), x1i

 

 

' Можно решить обратныую задачу

y1i =5

Otrezok.ss p(-3,y1i,0),p(15,y1i,0)

n14 = LastNmb

Set K = Per_line (n11, n14)

Ngpoint.ss K

Width=220

'VbsMsg "По объему = 7.88 Осадка = " & K.x/Mx

Text.ss K, "K"

 

VbsMsg "При x = " & x1i _

& vbCrLf & "  y равен = " & A1.y _

& vbCrLf & " При y1i = " & y1i _ 

& vbCrLf & "  x = "  &  K.x/Mx

 

График зависимости объема от осадки

 

Можно (чтобы МК работала быстрее) поверхности брать по половинке

 

Соответственно объем будет в два раза меньше

 

Определим максимальный объем.

 

 

 

Осадка от объема (водоизмещения)

Диапазон: 0-44

 

 

 

Осадка при объеме (водоизмещении) = 20 

По графику можно решать и обратную задачу.

 

 

Пример. Определить результирующую силу поддержания катамарана имеющего крен.

Решаем задачу в системе «Вектор» непосредственено в диалоге

 

 

 

Центр = (1.31449, -0.242416, -0.304783)

В группе нет тел

Площадь = 9.68669

 

Чтобы рассчитать объемы  гондол и их смоченные части, надо создать тела, причем сдвинутые их плоскости симметрии  на  профильную плоскость

Выполнив операции задание плоскости-треуголника в yz, сдвига гондол в yz, задание их тел, потом можно обратно сдвинуть на свое место, поместить в группу и командой «расчет»: определить ЦТ между обеими гондолами  и объем. 

 

 

Центр = (-0.0044441, 0.00608086, -0.211175)

Объём = 2.79697

В группе нет поверхностей

Половина полученного объема дает  гондол одной гондолы

Аналогично выполняем  для смоченных частей гондол

 

Если они в группе,  надо их из группы вытащить

 

 

Далее опять сдвигаем эти подводные части гондол в центр и в этом положение задаем по ним тела.

 

               

 

 

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

Центр = (1.62152, -0.25166, -0.206366)

Объём = 1.4142

В группе нет поверхностей

 

С – центр выталкивающей силы (объем), он, кстати, не совпадает с центром тяжести поверхностей подводной части.

 

Резюме. Цепочка действий кажется насыщенной, однако на самом деле все легко делается. Можно расширить возможности (сделаем) – работать по резке, и заданию тел для поверхностей по группам, однако при задание тел, поверхности придется все равно сдвигать (не всегда!) к диаметральной плоскости.  Кстати методы для работы в группах, причем не важно поверхность в группе или не в группе, реализованы. Например, ниже приведем несколько примеров, в которых как раз задания тел пришлось задавать в диалоге.

 

Модификация лодку Федора Конюхова в лодку с килем в тримаран, а потом клонируем и в пятимаран. Можно выполнять вычисления метастатических характеристик.

 

  

 

Пятимаран

 

 

Метацентрические параметры при дифференте
вычисляются через МК, фактически автоматически

 

Можно строить и диаграммы как зависимости объема от осадки и осадки от объема.

График объема от осадки

 

Поверхности не надо раздвигать/сдвигать – они находятся одна в другой как матрешки, причем могут и совпадать, а рассчитываться по отдельности.

   

 

Слева все поверхности в одной, справа чуть раздвинуты.

Резюме. МК может служить для любой формы (поверхности) и любого количества, например при построении графиков объема от осадки и осадки от объема задавать соответствующий диапазон.