Program za izračun geometrijskih karakteristik poligonalnih prerezov. Uporaba modulov.
Povezave#
Izvorna koda#
geokar.py#
#! /usr/bin/env python
import geometrijske_karakteristike as gk
def izpisi_vrednost(naslov, vrednost):
print("{:>5} = {:.3f}".format(naslov, vrednost))
def main():
# Vnos podatkov
print("Vnos podatkov ...")
n = int(input("Podaj število točk: "))
x = []
y = []
for i in range(n):
vrstica = input("Točka {}: ".format(i + 1))
besede = vrstica.split()
x.append(float(besede[0]))
y.append(float(besede[1]))
x.append(x[0])
y.append(y[0])
# Izračun količin
print()
print("Izračun ...")
Ax = gk.Ax(n, x, y)
Sx = gk.Sx(n, x, y)
Sy = gk.Sy(n, x, y)
Ix = gk.Ix(n, x, y)
Iy = gk.Iy(n, x, y)
Ixy = gk.Ixy(n, x, y)
xt = gk.xt(n, x, y)
yt = gk.yt(n, x, y)
Ixt = gk.Ixt(n, x, y)
Iyt = gk.Iyt(n, x, y)
Ixyt = gk.Ixyt(n, x, y)
# Izpis rezultatov
print()
print("Izpis ...")
izpisi_vrednost("Ax", Ax)
izpisi_vrednost("Sx", Sx)
izpisi_vrednost("Sy", Sy)
izpisi_vrednost("Ix", Ix)
izpisi_vrednost("Iy", Iy)
izpisi_vrednost("Ixy", Ixy)
izpisi_vrednost("xt", xt)
izpisi_vrednost("yt", yt)
izpisi_vrednost("Ixt", Ixt)
izpisi_vrednost("Iyt", Iyt)
izpisi_vrednost("Ixyt", Ixyt)
if __name__ == "__main__": main()
geometrijske_karakteristike.py#
#! /usr/bin/env python
# -*- coding: utf-8 -*-
# Funkcije za izračun geometrijskih karakteristik
def Ax(n, x, y):
v = 0.0
for i in range(n):
v = v + (x[i+1] + x[i]) * (y[i+1] - y[i])
return 0.5 * v
def Sx(n, x, y):
v = 0.0
for i in range(n):
v = v + (x[i+1] - x[i]) * (y[i+1]**2 + y[i] * y[i+1] + y[i]**2)
return -1. / 6. * v
def Sy(n, x, y):
v = 0.0
for i in range(n):
v = v + (y[i+1] - y[i]) * (x[i+1]**2 + x[i] * x[i+1] + x[i]**2)
return 1. / 6. * v
def Ix(n, x, y):
v = 0.0
for i in range(n):
v = v + (x[i+1] - x[i]) * (y[i+1]**3 + y[i+1]**2 * y[i] + y[i+1] * y[i]**2 + y[i]**3)
return -1. / 12. * v
def Iy(n, x, y):
v = 0.0
for i in range(n):
v = v + (y[i+1] - y[i]) * (x[i+1]**3 + x[i+1]**2 * x[i] + x[i+1] * x[i]**2 + x[i]**3)
return 1. / 12. * v
def Ixy(n, x, y):
v = 0.0
for i in range(n):
v = v + (y[i+1] - y[i]) * (y[i+1] * (3* x[i+1]**2 + 2 * x[i] * x[i+1] + x[i]**2) + y[i] * (3 * x[i]**2 + 2 * x[i] * x[i+1] + x[i+1]**2))
return -1. / 24. * v
def xt(n, x, y):
return Sy(n, x, y) / Ax(n, x, y)
def yt(n, x, y):
return Sx(n, x, y) / Ax(n, x, y)
def Ixt(n, x, y):
return Ix(n, x, y) - yt(n, x, y)**2 * Ax(n, x, y)
def Iyt(n, x, y):
return Iy(n, x, y) - xt(n, x, y)**2 * Ax(n, x, y)
def Ixyt(n, x, y):
return Ixy(n, x, y) + xt(n, x, y) * yt(n, x, y) * Ax(n, x, y)