Kupole bazirane na zlatnom preseku predstavljaju savršen spoj prirodne harmonije i funkcionalnosti u arhitekturi. Zlatni presek, poznat kao broj Φ (phi ≈ 1.618), vekovima je simbol savršene proporcije, prisutan u umetnosti, prirodi i geometriji. Primena ovog čarobnog broja u dizajnu kupola donosi ne samo tehničku stabilnost već i duboku estetsku vrednost.
Kupole koje koriste proporcije bazirane na broju Φ oslanjaju se na pažljivo raspoređene čvorište i šipke, gde je svaka dimenzija i položaj deo harmoničnog sistema. Ova matematička osnova omogućava skladnu raspodelu elemenata, čime se postiže optimalna strukturalna efikasnost i vizuelni sklad. Raspored tačaka često prati logaritamske spirale i odnose koji su intuitivno prijatni oku, kao i prirodno stabilni.
Harmonične proporcije i estetska privlačnost Golden Ratio Dome-a čine ih posebno poželjnim u savremenoj arhitekturi i dizajnu prostora. Ove kupole ne samo da odišu elegancijom i blagim linijama, već i unose osećaj smirenosti i ravnoteže. Njihova struktura odiše prirodnim redom, što prostorijama daje toplinu i dubinu. Zbog toga se Golden Ratio Dome često koristi u kultnim, javnim i privatnim prostorima gde je želja spoj funkcionalnosti i umetničke lepote.
Ukratko, Golden Ratio Dome je više od tehničkog objekta — to je arhitektonsko remek-delo koje slavi univerzalne proporcije i donosi sklad prirode u naš svakodnevni život.
Matematika Golden Ratio Dome
Golden Ratio Dome se zasniva na proporcijama definisanim zlatnim presekom, poznatim kao broj Φ (phi), gde je:
\[ \Phi = \frac{1 + \sqrt{5}}{2} \approx 1.6180339887… \]
U arhitekturi kupole, tačke (čvorišta) i šipke su raspoređeni tako da međusobni odnosi dužina zadovoljavaju odnose bazirane na Φ. Na primer, dužine šipki mogu biti skalirane kao:
\[ L_1 : L_2 = 1 : \Phi \]
ili mogu pratiti niz proporcija koji se gradi rekurzivno:
\[ L_{n} = L_{n-1} + L_{n-2} \]
što je analogno Fibonačijevom nizu, čiji se odnos susednih članova približava Φ kada n raste.
Ove proporcije obezbeđuju:
- Harmoničnu raspodelu tačaka kupole na sferi.
- Stabilnu i efikasnu konstrukciju zahvaljujući optimalnim odnosima dužina šipki.
- Estetski prijatan izgled zahvaljujući prirodnim i univerzalnim proporcijama.
Matematički, raspored tačaka na sferi može se konstruisati pomoću polarnih i azimutalnih uglova definisanih preko Φ, kao što je na primer Fibonacci sfera:
Za tačku i od ukupno N tačaka: \[ \theta_i = 2 \pi \frac{i}{\Phi} \quad,\quad z_i = 1 – \frac{2i}{N-1} \]
Odnosno, sferni koordinatni kutovi su odabrani tako da tačke ravnomerno prekrivaju površinu sfere, uz proporcije koje uključuju Φ.
Ovakva kupola je ne samo arhitektonski impresivna, već i matematički elegantna.
Evo spiska Python biblioteka koje treba da instaliraš da bi tvoj program za Golden Ratio Dome sa 3D prikazom i eksportom radio ispravno:
pip install numpy trimesh meshio ezdxf scipy matplotlib
Objašnjenje po paketima:
numpy
— osnovne matematičke i numeričke funkcijetrimesh
— za rad sa 3D modelima, kreiranje mesh objekata, cilindara itd.meshio
— za čitanje i pisanje raznih 3D formata (npr. STL, PLY, OBJ)tkinter
— GUI biblioteka, dolazi sa standardnim Python instalacijama (ako nije, instalira se kao deo sistema)ezdxf
— za kreiranje i eksport DXF fajlovascipy
— za geometrijske funkcije poputConvexHull
matplotlib
— za vizualizaciju i bojenje, uključujući 3D prikazmpl_toolkits.mplot3d
— deo matplotlib za 3D prikaze (dolazi sa matplotlib)
Napomena: Tkinter obično ne treba instalirati preko pip jer je deo standardne biblioteke, ali na nekim Linux distribucijama možeš instalirati paket putem sistema, npr:
sudo apt-get install python3-tk
Ako koristiš Windows ili Mac, Tkinter je već uključen u Python instalaciju.
Programski kod za golden_ratio_dome_gui.py
import numpy as np import trimesh import meshio import tkinter as tk import ezdxf from trimesh.creation import cylinder from tkinter import filedialog from tkinter import messagebox from scipy.spatial import ConvexHull import matplotlib.pyplot as plt from mpl_toolkits.mplot3d.art3d import Poly3DCollection # --- Geometrija kupole --- def fibonacci_sphere(samples=200, radius=1.0): phi = np.pi * (3. - np.sqrt(5.)) # Zlatni ugao y = 1 - (np.arange(samples) / float(samples - 1)) * 2 radius_at_y = np.sqrt(1 - y * y) theta = phi * np.arange(samples) x = np.cos(theta) * radius_at_y z = np.sin(theta) * radius_at_y return np.vstack((x, y, z)).T * radius def keep_upper_hemisphere(points): return points[points[:, 1] >= 0] def delaunay_triangulate_sphere(points): normed = points / np.linalg.norm(points, axis=1)[:, None] hull = ConvexHull(normed) return hull.simplices # --- Vizuelizacija --- def plot_dome(points, triangles): fig = plt.figure(figsize=(8, 6)) ax = fig.add_subplot(111, projection='3d') mesh = Poly3DCollection(points[triangles], alpha=0.9) mesh.set_facecolor('gold') mesh.set_edgecolor('black') ax.add_collection3d(mesh) ax.auto_scale_xyz(*[points[:, i] for i in range(3)]) ax.set_box_aspect([1,1,0.5]) plt.title("Golden Ratio Dome") plt.show() # --- Izvoz --- def export_stl(points, triangles, filename): corrected_triangles = [] for tri in triangles: a, b, c = points[tri] normal = np.cross(b - a, c - a) if normal[1] < 0: # ako gleda nadole, obrni orijentaciju tri = tri[::-1] corrected_triangles.append(tri) mesh = trimesh.Trimesh(vertices=points, faces=corrected_triangles, process=False) mesh.export(filename) def create_cylinder_between(p1, p2, radius=0.01, sections=12): vec = p2 - p1 length = np.linalg.norm(vec) if length == 0: return None cyl = cylinder(radius=radius, height=length, sections=sections) # Orijentiši cilindar iz Z ose u pravac p2 - p1 z_axis = np.array([0, 0, 1]) direction = vec / length rotation = trimesh.geometry.align_vectors(z_axis, direction) if rotation is not None: cyl.apply_transform(rotation) # Pomeri ga da spaja p1 i p2 cyl.apply_translation(p1 + vec / 2) return cyl def create_colored_cylinder(p1, p2, radius=0.01, color=(255, 255, 255)): vec = p2 - p1 length = np.linalg.norm(vec) if length == 0: return None cyl = cylinder(radius=radius, height=length, sections=12) z_axis = np.array([0, 0, 1]) direction = vec / length rotation = trimesh.geometry.align_vectors(z_axis, direction) if rotation is not None: cyl.apply_transform(rotation) cyl.apply_translation(p1 + vec / 2) # Boja za sve face cyl.visual.face_colors = np.tile(np.append(color, 255), (len(cyl.faces), 1)) return cyl def export_ply(points, triangles, filename, radius=0.015, tolerance=1e-4): edges = set() for tri in triangles: i, j, k = tri edges.update({tuple(sorted((i, j))), tuple(sorted((j, k))), tuple(sorted((k, i)))}) # Izračunaj dužine šipki edge_lengths = [] for i, j in edges: p1, p2 = points[i], points[j] length = np.linalg.norm(p2 - p1) edge_lengths.append(length) # Grupisanje po dužini sa tolerancijom unique_lengths = [] group_indices = [] for L in edge_lengths: for idx, ul in enumerate(unique_lengths): if abs(L - ul) < tolerance: group_indices.append(idx) break else: unique_lengths.append(L) group_indices.append(len(unique_lengths) - 1) # Normalizacija boja po grupama cmap = plt.get_cmap("jet") num_groups = len(unique_lengths) group_colors = [tuple((np.array(cmap(i / max(1, num_groups - 1)))[:3] * 255).astype(int)) for i in range(num_groups)] # Kreiranje obojenih cilindara parts = [] for (i, j), group_idx in zip(edges, group_indices): color = group_colors[group_idx] cyl = create_colored_cylinder(points[i], points[j], radius=radius, color=color) if cyl is not None: parts.append(cyl) if parts: mesh = trimesh.util.concatenate(parts) mesh.export(filename) def export_dxf(points, triangles, filename): doc = ezdxf.new(dxfversion='R2010') msp = doc.modelspace() for tri in triangles: pts = points[tri] # Nacrtaj ivice trougla kao 3 linije for i in range(3): start = pts[i] end = pts[(i + 1) % 3] msp.add_line(start, end) doc.saveas(filename) # --- GUI --- def generate_and_export(): try: samples = int(entry_samples.get()) radius = float(entry_radius.get()) except ValueError: messagebox.showerror("Greška", "Unesite ispravne brojeve za tačke i radijus.") return points = fibonacci_sphere(samples, radius) points = keep_upper_hemisphere(points) triangles = delaunay_triangulate_sphere(points) plot_dome(points, triangles) filename_base = filedialog.asksaveasfilename(defaultextension=".stl", title="Snimi fajl bez ekstenzije", filetypes=[("STL", "*.stl")]) if not filename_base: return try: export_stl(points, triangles, filename_base) export_ply(points, triangles, filename_base.replace(".stl", ".ply")) export_dxf(points, triangles, filename_base.replace(".stl", ".dxf")) messagebox.showinfo("Uspeh", "Fajlovi su uspešno sačuvani:\n\n- STL\n- PLY\n- DXF") except Exception as e: messagebox.showerror("Greška", f"Došlo je do greške pri eksportu:\n{e}") # --- Tkinter prozor --- root = tk.Tk() root.title("Golden Ratio Dome Generator") tk.Label(root, text="Broj tačaka:").grid(row=0, column=0, padx=5, pady=5) entry_samples = tk.Entry(root) entry_samples.insert(0, "800") entry_samples.grid(row=0, column=1, padx=5, pady=5) tk.Label(root, text="Poluprečnik:").grid(row=1, column=0, padx=5, pady=5) entry_radius = tk.Entry(root) entry_radius.insert(0, "1.0") entry_radius.grid(row=1, column=1, padx=5, pady=5) tk.Button(root, text="Generiši i snimi", command=generate_and_export).grid(row=2, column=0, columnspan=2, pady=10) root.mainloop()
Program golden_ratio_dome_gui.py formira DXF, PLY i STL datoteke:
🔹 1. DXF (Drawing Exchange Format)
📄 Šta sadrži:
- DXF fajl koji ovaj program generiše sadrži linije (šipke) koje predstavljaju ivice kupole.
- Svaka šipka se zapisuje kao 3D linija (LINE entity) između dva čvora (tacke).
- Nema površina ni volumena — samo geometrijske ivice.
🛠️ Za šta je upotrebljiv:
- Pogodno za 2D i 3D CAD programe (AutoCAD, FreeCAD, LibreCAD, itd).
- Koristi se za:
- Tehničke crteže.
- Pripremu za lasersko sečenje ili CNC obradu.
- Proveru geometrije i dimenzija.
🔹 2. PLY (Polygon File Format / Stanford Triangle Format)
📄 Šta sadrži:
- PLY fajl iz ovog programa sadrži 3D šipke modelovane kao tela (najčešće kao cilindri ili pravougaone letve).
- Svaka šipka je modelovana zapreminski (mesh od trouglova).
- Može sadržati:
- Koordinate temena (vertices).
- Liste trouglastih površina (faces).
- Boje po šipkama (ako je omogućeno bojenje po dužini).
🛠️ Za šta je upotrebljiv:
- Vizualizacija u 3D alatima kao što su:
- MeshLab, Blender, CloudCompare.
- Pogodno za:
- 3D analizu, bojenje po dužini, jačini sile itd.
- 3D štampu (ako su elementi zapreminski zatvoreni).
- Inženjerske simulacije i prikaz konstrukcija.
🔹 3. STL (Stereolithography)
📄 Šta sadrži:
- STL fajl sadrži mesh površinu kupole, modelovanu kao trouglasti poligoni.
- U ovom kontekstu:
- Površina kupole se generiše pomoću ConvexHull nad skupom tačaka (čvorišta).
- Nema boje, ni materijala — samo oblik (geometrija).
🛠️ Za šta je upotrebljiv:
- Najčešći format za:
- 3D štampanje.
- Razmenu modela između različitih CAD softvera.
- Pogodan za:
- Brzu vizuelnu analizu.
- Testiranje oblika (ali ne sadrži unutrašnju strukturu kupole — samo spoljašnju opnu).
✅ Sažetak:
Format | Sadržaj | Upotreba |
---|---|---|
DXF | 3D linije šipki (ivice) | CAD crteži, tehnička dokumentacija |
PLY | 3D tela šipki (cilindri/letve), opcionalno bojenje | Vizualizacija, 3D analiza, inženjerski rad |
STL | Površina kupole (mesh bez boje) | 3D štampa, vizualizacija |