Detaljno objašnjenje Šta je Geodetska Kupola i kako se izračunava?
https://abel.rs/program-za-izracunavanje-geodetske-kupole/
Ovaj program omogućava korisnicima da izračunaju dimenzije, dužinu letvi i volumen za geodetske kupole bazirane na različitim frekvencijama. Takođe, omogućava unos podataka kao što su frekvencija, poluprečnik kupole, širina i visina letvi, i potom generiše izveštaj koji se sačuva u tekstualnom fajlu. Program se sastoji iz nekoliko ključnih funkcija:
Opis funkcionalnosti programa:
- Unos korisničkih podataka (
get_user_input):- Prikazuje listu dostupnih frekvencija geodetskih kupola (1V, 2V, 3V 3/8, 3V 5/8, itd.).
- Korisnik bira jednu od frekvencija.
- Korisnik unosi poluprečnik kupole, širinu i visinu letve.
- Izračunavanje dimenzija letvi (
calculate_lengths):- Za odabranu frekvenciju, program koristi unapred definisane faktore za svaki segment (A, B, C, itd.) kako bi izračunao potrebnu dužinu letvi za svaku grupu segmenata u kupoli.
- Za svaku grupu, računa se dužina letve u centimetrima (uzimajući u obzir faktor specifičan za tu grupu) i broj potrebnih letvi.
- Spremanje podataka u fajl (
save_to_file):- Podaci o kupoli (frekvencija, poluprečnik, dimenzije letvi) i konektorima za tu frekvenciju se ispisuju na ekran.
- Program zatim upisuje sve ove informacije u tekstualni fajl koji je imenovan prema frekvenciji i poluprečniku.
- U fajlu se nalaze detalji o svakom segmentu, ukupnoj dužini letvi, zapremini kupole, kao i informacije o konektorima potrebnim za montažu.
- Spisak konektora:
- Za svaku frekvenciju, program prikazuje i listu konektora koji su potrebni za montažu (npr. “4 kraka” sa 5 komada).
Baza podataka:
- Program koristi dve baze podataka:
- STRUT_FACTORS: Sadrži faktore i broj segmenata za svaku frekvenciju kupole.
- CONNECTORS: Definiše koji konektori su potrebni za svaku frekvenciju.
Kako program funkcioniše:
- Korisnik unosi podatke kao što su poluprečnik kupole i dimenzije letvi.
- Program izračunava dužinu letvi za svaku grupu segmenata na osnovu unapred definisanih faktora.
- Na kraju, svi podaci se prikazuju korisniku i upisuju u tekstualni fajl za dalju upotrebu.
Izveštaj:
- Program generiše detaljan izveštaj koji uključuje:
- Dužinu letvi za svaku grupu segmenata (A, B, C, itd.)
- Ukupnu dužinu letvi (u metrima)
- Zapreminu kupole (u kubnim metrima)
- Informacije o konektorima potrebnim za montažu.
geosf.py koristi tabelu strut faktora za određeni tip kupole i frekvenciju (postoje gotove vrednosti za svaku kombinaciju):
Tabela Strut faktora
1V frekvencija
| Strut | Strut factor | Dome | Sphere |
![]() |
| A | 1.05146 | 25 | 30 | |
| 5-way connectors | 6 | 12 | ||
| 4-way connectors | 5 | 0 | ||
2V frekvencija
| Strut | Strut factor | Dome | Sphere |
![]() |
| A | .61803 | 35 | 60 | |
| B | .54653 | 30 | 60 | |
| 4-way connectors | 10 | 0 | ||
| 5-way connectors | 6 | 12 | ||
| 6-way connectors | 10 | 30 | ||
3V frekvencija
| Strut | Strut factor | 3/8 | 5/8 | Sphere |
![]() |
| A | .34862 | 30 | 30 | 60 | |
| B | .40355 | 40 | 55 | 90 | |
| C | .41241 | 50 | 80 | 120 | |
| 4-way connectors | 15 | 15 | 0 | ||
| 5-way connectors | 6 | 6 | 12 | ||
| 6-way connectors | 25 | 40 | 80 | ||
4V frekvencija
| Strut | Strut factor | Dome | Sphere |
![]() |
| A | .25318 | 30 | 60 | |
| B | .29524 | 30 | 60 | |
| C | .29453 | 60 | 120 | |
| D | .31287 | 70 | 120 | |
| E | .32492 | 30 | 60 | |
| F | .29859 | 30 | 60 | |
| 4-way connectors | 20 | 0 | ||
| 5-way connectors | 6 | 12 | ||
| 6-way connectors | 65 | 150 | ||
5V frekvencija
| Strut | Strut Factor | Dome | Sphere |
![]() |
| A | .19814743 | 30 | 60 | |
| B | .23179025 | 30 | 60 | |
| C | .22568578 | 60 | 120 | |
| D | .24724291 | 60 | 120 | |
| E | .25516701 | 70 | 120 | |
| F | .24508578 | 80 | 120 | |
| G | .26159810 | 40 | 60 | |
| H | .23159760 | 30 | 60 | |
| I | .24534642 | 20 | 30 | |
| 4-way connectors | ?? | 0 | ||
| 5-way connectors | 6 | 12 | ||
| 6-way connectors | ?? | ?? | ||
6V frekvencija
| Strut | Strut Factor | Dome | Sphere |
![]() |
| A | .1625672 | 30 | 60 | |
| B | .1904769 | 30 | 60 | |
| C | .1819083 | 60 | 120 | |
| D | .2028197 | 90 | 180 | |
| E | .1873834 | 30 | 60 | |
| F | .1980126 | 60 | 120 | |
| G | .2059077 | 130 | 240 | |
| H | .2153537 | 65 | 120 | |
| I | .2166282 | 60 | 120 | |
| 4-way connectors | ?? | 0 | ||
| 5-way connectors | 6 | 12 | ||
| 6-way connectors | ?? | ?? | ||
Programski kod za geosf.py
#geosf.py
# The MIT License (MIT)
# Copyright (c) 2025 Aleksandar Maričić
#
# Ovim se omogućava bilo kome da koristi, kopira, menja, spaja, objavljuje,
# distribuira, daje podlicencu i/ili prodaje kopije ovog softverskog programa,
# uz uslov da u svim kopijama ili značajnim delovima softverskog programa bude
# uključena sledeća obavest:
#
# Copyright (c) 2025 Maričić Aleksandar
#
# Ovaj softverski program je pružen "takav kakav jeste", bez bilo kakvih garancija,
# izričitih ili impliciranih, uključujući, ali ne ograničavajući se na, garancije o
# prikladnosti za prodaju ili pogodnosti za određenu svrhu. U svakom slučaju, autori
# ili nosioci prava nisu odgovorni za bilo kakvu štetu ili druge obaveze koje mogu nastati
# usled upotrebe ovog softverskog programa.
import os
def get_user_input():
# Ispis svih dostupnih frekvencija
print("Dostupne frekvencije:")
print("1. 1V")
print("2. 2V")
print("3. 3V 3/8")
print("4. 3V 5/8")
print("5. 4V")
print("6. 5V 3/8")
print("7. 5V 5/8")
print("8. 6V")
# Unos broja za frekvenciju
frekvencija_num = int(input("Unesi broj frekvencije (npr. 3 za '3V 3/8'): "))
# Mapa brojeva u frekvencije
frekvencije = {
1: "1V",
2: "2V",
3: "3V 3/8",
4: "3V 5/8",
5: "4V",
6: "5V 3/8",
7: "5V 5/8",
8: "6V"
}
# Dobijanje odgovarajuće frekvencije
frequency = frekvencije.get(frekvencija_num)
if not frequency:
raise ValueError("Nepoznata frekvencija.")
# Unos ostalih parametara
radius_cm = float(input("Unesi poluprečnik kupole u cm: "))
width_cm = float(input("Unesi širinu letve u cm: "))
height_cm = float(input("Unesi visinu letve u cm: "))
return frequency, radius_cm, width_cm, height_cm
# Baza podataka sa strut faktorima
STRUT_FACTORS = {
"1V": {
"A": {"factor": 1.05146, "count": 25},
},
"2V": {
"A": {"factor": 0.61803, "count": 35},
"B": {"factor": 0.54653, "count": 30},
},
"3V 3/8": {
"A": {"factor": 0.34862, "count": 30},
"B": {"factor": 0.40355, "count": 40},
"C": {"factor": 0.41241, "count": 50},
},
"3V 5/8": {
"A": {"factor": 0.34862, "count": 30},
"B": {"factor": 0.40355, "count": 55},
"C": {"factor": 0.41241, "count": 80},
},
"4V": {
"A": {"factor": 0.25318, "count": 30},
"B": {"factor": 0.29524, "count": 30},
"C": {"factor": 0.29453, "count": 60},
"D": {"factor": 0.31287, "count": 70},
"E": {"factor": 0.32492, "count": 30},
"F": {"factor": 0.29859, "count": 30},
},
"5V 3/8": {
"A": {"factor": 0.19814743, "count": 30},
"B": {"factor": 0.23179025, "count": 30},
"C": {"factor": 0.22568578, "count": 60},
"D": {"factor": 0.24724291, "count": 60},
"E": {"factor": 0.25516701, "count": 50},
"F": {"factor": 0.24508578, "count": 50},
"G": {"factor": 0.26159810, "count": 30},
"H": {"factor": 0.23159760, "count": 30},
"I": {"factor": 0.24534642, "count": 10},
},
"5V 5/8": {
"A": {"factor": 0.19814743, "count": 30},
"B": {"factor": 0.23179025, "count": 30},
"C": {"factor": 0.22568578, "count": 60},
"D": {"factor": 0.24724291, "count": 70},
"E": {"factor": 0.25516701, "count": 70},
"F": {"factor": 0.24508578, "count": 80},
"G": {"factor": 0.26159810, "count": 35},
"H": {"factor": 0.23159760, "count": 30},
"I": {"factor": 0.24534642, "count": 30},
},
"6V": {
"A": {"factor": 0.1625672, "count": 30},
"B": {"factor": 0.1904769, "count": 30},
"C": {"factor": 0.1819083, "count": 60},
"D": {"factor": 0.2028197, "count": 90},
"E": {"factor": 0.1873834, "count": 30},
"F": {"factor": 0.1980126, "count": 60},
"G": {"factor": 0.2059077, "count": 130},
"H": {"factor": 0.2153537, "count": 65},
"H": {"factor": 0.2166282, "count": 60},
}
}
# Podaci o konektorima za svaku frekvenciju
CONNECTORS = {
"1V": [("4 kraka", 5), ("5 kraka", 6)],
"2V": [("4 kraka", 10), ("5 kraka", 6), ("6 kraka", 10)],
"3V 3/8": [("4 kraka", 15), ("5 kraka", 6), ("6 kraka", 25)],
"3V 5/8": [("4 kraka", 15), ("5 kraka", 6), ("6 kraka", 40)],
"4V": [("4 kraka", 20), ("5 kraka", 6), ("6 kraka", 65)],
"5V 3/8": [("4 kraka", 25), ("5 kraka", 6), ("6 kraka", 95)],
"5V 5/8": [("4 kraka", 25), ("5 kraka", 6), ("6 kraka", 120)],
"6V": [("4 kraka", 30), ("5 kraka", 6), ("6 kraka", 160)],
}
def calculate_lengths(frequency, radius_cm):
results = []
factors = STRUT_FACTORS.get(frequency)
if not factors:
raise ValueError("Nepoznata frekvencija kupole.")
for label, data in sorted(factors.items()):
length_cm = round(data["factor"] * radius_cm, 2)
results.append({"label": label, "length_cm": length_cm, "count": data["count"]})
return results
def save_to_file(frequency, radius_cm, width_cm, height_cm, results):
filename = f"kupola_{frequency.replace(' ', '_').replace('/', '-')}_" + f"{int(radius_cm)}cm.txt"
total_length_cm = sum(r["length_cm"] * r["count"] for r in results)
volume_cm3 = total_length_cm * width_cm * height_cm
volume_m3 = round(volume_cm3 / 1_000_000, 3)
# Prvo ispisujemo podatke na ekranu
print(f"\nPodaci za kupolu {frequency}, poluprečnik {radius_cm}cm:")
for r in results:
print(f"{r['label']}: {r['length_cm']:.2f}cm {r['count']} kom.")
print(f"\nUkupna duzina letvi: {round(total_length_cm / 100, 2)} m")
print(f"Ukupna kubikaza: {volume_m3} m3")
# Ispisivanje konektora
print("\nKonektori za ovu frekvenciju:")
for konektor in CONNECTORS.get(frequency, []):
print(f"{konektor[0]} - {konektor[1]} kom.")
# Zatim upisujemo u fajl
with open(filename, "w") as f:
f.write(f"{frequency}, {radius_cm:.0f}cm\n")
for r in results:
f.write(f"{r['label']}: {r['length_cm']:.2f}cm {r['count']} kom.\n")
f.write(f"\nUkupna duzina letvi: {round(total_length_cm / 100, 2)} m\n")
f.write(f"Ukupna kubikaza: {volume_m3} m3\n")
f.write("\nKonektori:\n")
for konektor in CONNECTORS.get(frequency, []):
f.write(f"{konektor[0]} - {konektor[1]} kom.\n")
print(f"\nPodaci su sačuvani u fajl: {filename}")
def main():
frequency, radius_cm, width_cm, height_cm = get_user_input()
results = calculate_lengths(frequency, radius_cm)
save_to_file(frequency, radius_cm, width_cm, height_cm, results)
if __name__ == "__main__":
main()
Primer proračuna u programu geosf.py

Kako su rešavani konektori pogledaj na sledećem linku: https://www.domerama.com/dome-basics/geodesic-dome-hub-connectors/
Linkovi:
- https://www.desertdomes.com/domecalc.html
- https://www.domerama.com/calculators/
- https://simplydifferently.org/


















