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