import numpy as np
from scipy.integrate import cumtrapz
length = 123
breadth = 17.571
draft = 11.949
offset = np.loadtxt(‘s60_cb70.txt’, dtype=float)
row, col = offset.shape
pn = np.array([0, 0.5, 1, 2, 3, 4, 5, 6, 7, 8, 9, 9.5, 10]) * length/10
wl0 = np.array([0, 0.3, 1, 2, 3, 4, 5, 6]) * draft/4
wl = np.array([0, 0.5, 1, 2, 3, 4, 5, 6]) * draft/4
for i in range(row):
offset[i, :] = np.interp(wl, wl0, offset[i, :])
print(np.round(offset, 3))
offset = breadth/2
alan = np.zeros((row, col)) # BON-JEAN ALANLARI
for i in range(row):
alan[i, 1:] = 2cumtrapz(offset[i,:], wl)
moment = np.zeros((row, col)) # BON-JEAN MOMENTLERİ
for i in range(col):
moment[:, i] = offset[:, i] * wl[i]
for i in range(row):
moment[i, 1:] = 2*cumtrapz(moment[i,:], wl)
hacim = np.zeros(col) # HACİM HESABI
for i in range(1, col):
hacim[i] = np.trapz(alan[:, i], pn)
deplasman = 1.025 * hacim # DEPLASMAN HESABI
AWP = np.zeros(col) # SU HATTI ALANI
for i in range(col):
AWP[i] = 2*np.trapz(offset[:, i], pn)
LCF = np.zeros(col) # YÜZME MERKEZİNİN BOYUNA YERİ (kıçtan)
for i in range(col): # LCF = MxAwp / Awp
LCF[i] = np.trapz(offset[:, i] * pn, pn) / AWP[i] - length/2
LCB = np.zeros(col) # HACİM MERKEZİNİZ BOYUNA YERİ (kıçtan)
for i in range(1, col): # LCB = Mxalan / hacim
LCB[i] = np.trapz(alan[:, i] * pn, pn) / hacim[i] - length/2
T1 = AWP*1.025 / 100 # 1cm BATMA TONAJI
CM = np.zeros(col) # ORTA KESİT NARİNLİK KATSAYISI
CM[1:] = alan[6, 1:] / (2*offset[6, 1:] * wl[1:])
CB = np.zeros(col)
CB[1:] = hacim[1:] / (length2offset[6, 1:] * wl[1:]) # BLOK KATSAYISI
CW = AWP / (length*2 * offset[6, :]) # SU HATTI NARİNLİK KATSAYISI
CP = np.zeros(col)
CP[1:] = CB[1:] / CM[1:] # PRİZMATİK KATSAYI
KB = np.zeros(col) # HACİM MERKEZİNİN DÜŞEY YERİ
for i in range(1, col):
KB[i] = np.trapz(moment[:, i], pn) / hacim[i]
Icl = np.zeros(col) # ORTA SİMETRİ EKSENİNE GÖRE ATALET MOMENTİ
for i in range(col):
Icl[i] = (2/3) * np.trapz(offset[:, i]**3, pn)
BM = np.zeros(col) # ENİNE METESANTR YARIÇAPI
BM[1:] = Icl[1:] / hacim[1:]
Im = np.zeros(col) # MASTORİYE GÖRE ATALET MOMENTİ
for i in range(col):
Im[i] = np.trapz(offset[:, i] * pn**2, pn)
SU HATTI ALANININ YÜZME MERKEZİNDEN GEÇEN EKSENE GÖRE ATALET MOMENTİ
If = Im - AWP * (length/2 - LCF)**2
BMl = np.zeros(col) # BOYUNA METASANTR YARIÇAPI
BMl[1:] = If[1:] / hacim[1:]
MCT1 = np.zeros(col)
MCT1[1:] = deplasman[1:] * BMl[1:] / (100*length) # BİR SANTİM TRİM MOMENTİ
import pandas as pd
import dataframe_image as dfi
df = pd.DataFrame([hacim, deplasman, LCB, LCF, CB, CM, CP, CW, AWP, T1, MCT1, Icl,
Im, If, KB, BM, BMl], columns=[‘WL0’, ‘WL05’, ‘WL1’, ‘WL2’, ‘WL3’,
‘WL4’, ‘WL5’, ‘WL6’], index=[‘V’, ‘dep’, ‘LCB’, ‘LCF’, ‘CB’, ‘CM’, ‘CP’,
‘CWP’, ‘AWP’, ‘T1’, ‘MT1’, ‘Icl’, ‘Im’, ‘If’, ‘KB’, ‘BM’, ‘BMl’])
df = df.round(2)
dfi.export(df, ‘hidrostatik.png’)