geosf.py sračunava dužinu, broj letvica i broj potrebnih konektora za izgradnju Geodetske kupole

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):

Frekvencija

Tip kupole

Oznake letvica

Dijagram montaže

2V

3V

4V

5V

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:

  1. Desert Domes
  2. Domerama kalkulatori
  3. https://simplydifferently.org/

By Abel

Leave a Reply

Your email address will not be published. Required fields are marked *