Detaljno objašnjenje Šta je Geodetska Kupola i kako se izračunava?
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
# 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: