Helix Zome kupola je inovativna arhitektonska i strukturna konstrukcija zasnovana na principu duplih spirala, poznatih kao double helix. Ova kupola koristi spojene spiralne šipke koje tvore stabilnu i estetski privlačnu strukturu. Njena konstrukcija se zasniva na matematičkoj geometriji i sinusoidi, što omogućava precizno definisanje položaja svih elemenata i njihovu međusobnu povezanost.
Matematički Model Helix Zome Kupole
1. Parametri kupole
- n — broj parova duplih spirala (double helix) u kupoli
- d — prečnik kupole
- h — visina kupole
- v_s — vertikalni faktor rastezanja (stretch), u opsegu [1.0, 2.0]
- α \( \in [0, \pi] \) — parametar za poziciju duž spirale
- β = (2π / n) · i, gde je i = 0, 1, …, n − 1 — fazni pomeraj spirale
2. Koordinate tačaka na spirali
Koordinate tačke na jednoj spirali definisane su formulama:
$$
\begin{aligned}
x &= \sin(\alpha + \beta) \cdot \frac{d}{4} + \sin(\beta) \cdot \frac{d}{4} \\
y &= \cos(\alpha + \beta) \cdot \frac{d}{4} + \cos(\beta) \cdot \frac{d}{4} \\
z &= \frac{\alpha}{\pi} \cdot h
\end{aligned}
$$
Gde su:
- α — ugaoni parametar spirale u opsegu [0, π]
- β — fazni pomeraj svake spirale
- d — prečnik osnove kupole
- h — visina kupole
3. Ogledalo spirala (parovi spirala)
Da bi se dobio double helix efekat, svaka spirala ima svog „partnera“ koji je njeno ogledalo. Ovo se postiže inverzijom parametra α:
- Desna spirala: koristi α kao parametar.
- Leva spirala: koristi −α, što znači da je spirala okrenuta u suprotnom smeru.
Ovo simetrično okretanje omogućava stvaranje međusobno isprepletenih duplih spirala.
4. Dužina šipke (rib)
Dužina šipke između dva uzastopna čvora spirale aproksimira se formulom:
$$
\ell_{\text{rib}} = \sqrt{ \left( \frac{d \pi}{4} \right)^2 + h^2 }
$$
Ovo se može interpretirati kao Pitagorina teorema, gde:
- dπ / 4 — predstavlja horizontalnu komponentu spirale (deo kružnog luka)
- h — vertikalna komponenta
Implementacija: Analiza datog programa
1. Generisanje spirala
Funkcija generate_spiral kreira skup tačaka za nnn spirala sa po segs+1segs + 1segs+1 tačaka:
- Za desne spirale, parametar αraste od 0 do π.
- Za leve spirale (ogledalo), α ide od 0 do −π (obrnut smer).
Ova funkcija koristi gore navedenu matematičku formulu da izračuna koordinate x,y,zx, y, zx,y,z svake tačke.
2. Konstrukcija cilindara (šipki)
Funkcija cylinder_between_points pravi geometrijski model cilindra između dve tačke p1 i p2:
- Izračunava se vektor, dužina i orijentacija između tačaka.
- Kreira se baza i vrh cilindra pomoću kružnice u ravni X-Y.
- Cilindar se rotira da leži između tačaka pomoću rotacione matrice
rotation_matrix. - Generišu se trouglaste površine (faces) koje povezuju bazu i vrh.
3. Spajanje spirala u kupolu
Funkcija generate_mesh pravi mesh kupole:
- Poziva
generate_spiralza desne i leve spirale. - Svaku uzastopnu par tačaka na spirali povezuje cilindrom.
- Svi cilindri se spajaju u jedan veliki mesh koji predstavlja celu kupolu.
4. Izvoz modela
Na kraju, u glavnom delu programa:
- Definišu se parametri kupole (
n,segs,d,h,thickness). - Mesh se generiše pozivom
generate_mesh. - Mesh se izvozi u PLY i STL formate, pogodnim za dalju obradu ili 3D štampu.
Program

Helix Zome kupola je matematički lepo definisana struktura koja koristi sinusne funkcije i linearne transformacije za formiranje duplih spirala kao glavnog elementa. Program implementira ovaj matematički model u Pythonu koristeći biblioteku trimesh za kreiranje geometrijskih cilindara između tačaka, što omogućava preciznu izradu 3D modela kupole. Pristup je modularan, jasan i efikasan za dalje nadogradnje poput dodavanja novih veza ili prilagođavanja parametara.
Programski kod
Instalacija potrebnih zavisnosti:
python3 -m pip install numpy trimesh ezdxf
Programski kod za helixzome.py:
#helixzome.py
# Instalacija potrebnih zavisnosti:python3 -m pip install numpy trimesh ezdxf
import numpy as np
import trimesh
from math import sin, cos, pi
import ezdxf
def rotation_matrix(v1, v2):
a = v1 / np.linalg.norm(v1)
b = v2 / np.linalg.norm(v2)
v = np.cross(a, b)
dot = np.dot(a, b)
if np.allclose(dot, 1):
return np.eye(3)
if np.allclose(dot, -1):
return -np.eye(3)
s = np.linalg.norm(v)
km = np.array([[ 0, -v[2], v[1]],
[ v[2], 0, -v[0]],
[-v[1], v[0], 0]])
return np.eye(3) + km + (km @ km) * ((1 - dot) / (s*s))
def cylinder_between_points(p1, p2, radius=0.01, sections=4):
vec = p2 - p1
length = np.linalg.norm(vec)
if length < 1e-6:
return np.array([]), np.array([])
dir = vec / length
angles = np.linspace(0, 2*pi, sections, endpoint=False)
circle = np.stack([np.cos(angles)*radius, np.sin(angles)*radius, np.zeros_like(angles)], axis=1)
base = circle
top = circle + np.array([0, 0, length])
verts = np.vstack([base, top])
R = rotation_matrix(np.array([0,0,1]), dir)
verts = verts @ R.T + p1
faces = []
n = sections
for i in range(n):
j = (i+1) % n
faces += [[i, j, j+n], [i, j+n, i+n]]
return verts, np.array(faces)
def generate_spiral(n, segs, d, h, direction):
spirals = []
for i in range(n):
beta = 2 * pi * i / n
spiral = []
for j in range(segs + 1):
alpha = pi * j / segs
theta = alpha if direction == 1 else -alpha
x = sin(theta + beta) * d/4 + sin(beta)*d/4
y = cos(theta + beta) * d/4 + cos(beta)*d/4
z = (alpha/pi) * h
spiral.append([x, y, z])
spirals.append(np.array(spiral))
return spirals
def generate_mesh(n, segs, d, h, thickness):
verts_list, faces_list = [], []
offset = 0
spirals_right = generate_spiral(n, segs, d, h, direction=1)
spirals_left = generate_spiral(n, segs, d, h, direction=-1)
for spiral in spirals_right:
for j in range(segs):
p1, p2 = spiral[j], spiral[j+1]
v, f = cylinder_between_points(p1, p2, thickness)
if len(v):
verts_list.append(v)
faces_list.append(f + offset)
offset += len(v)
for spiral in spirals_left:
for j in range(segs):
p1, p2 = spiral[j], spiral[j+1]
v, f = cylinder_between_points(p1, p2, thickness)
if len(v):
verts_list.append(v)
faces_list.append(f + offset)
offset += len(v)
return np.vstack(verts_list), np.vstack(faces_list), spirals_right, spirals_left
def export_wireframe_dxf(mesh, filename):
doc = ezdxf.new(dxfversion="R2010")
msp = doc.modelspace()
for edge in mesh.edges_unique:
p1 = mesh.vertices[edge[0]]
p2 = mesh.vertices[edge[1]]
msp.add_line(p1, p2)
doc.saveas(filename)
def export_axis_lines_dxf(spirals_right, spirals_left, filename):
doc = ezdxf.new(dxfversion="R2010")
msp = doc.modelspace()
# Desne spirale - plavo (ACI color 5)
for spiral in spirals_right:
for i in range(len(spiral) - 1):
p1 = spiral[i]
p2 = spiral[i + 1]
msp.add_line(p1, p2, dxfattribs={"color": 5})
# Leve spirale - crveno (ACI color 1)
for spiral in spirals_left:
for i in range(len(spiral) - 1):
p1 = spiral[i]
p2 = spiral[i + 1]
msp.add_line(p1, p2, dxfattribs={"color": 1})
doc.saveas(filename)
if __name__ == "__main__":
n = 24 # broj spirala po smeru
segs = 24 # broj segmenata po spirali
d = 4.0 # prečnik kupole
h = 2.0 # visina kupole
thickness = 0.01
verts, faces, spirals_right, spirals_left = generate_mesh(n, segs, d, h, thickness)
mesh = trimesh.Trimesh(vertices=verts, faces=faces, process=False)
mesh.export("helix_zome_ogledalo.ply")
mesh.export("helix_zome_ogledalo.stl")
mesh.export("helix_zome_ogledalo.obj")
export_wireframe_dxf(mesh, "helix_zome_ogledalo_wireframe.dxf")
export_axis_lines_dxf(spirals_right, spirals_left, "helix_zome_ogledalo_axis_lines.dxf")
print(" Izvezeni fajlovi: .ply, .stl, .obj, .dxf (wireframe i ose)")
Reference:
Matematički modeli i teorija
- „The Mathematics of Zome“ – Tom Davis
Izuzetno detaljan papir (PDF) koji prikazuje kako izračunati dužine šipki u Zome sistemu i kako se čvorišta međusobno povezuju
https://www.yumpu.com/en/document/view/25868597/zome-patterns-home-page-tom-davis - „Spinning Circles and Parametric Approach“ – SimplyDifferently.org
Web članak objašnjava dve metode generisanja helix Zome geometrije: korišćenjem uvijenih kružnica i parametrskog pristupa
https://www.simplydifferently.org/Helix_Zome - Zometool Manual 2.3 Detaljni PDF vodič sa uvodom u strukturu boja i simetrije Zome sistema (2-, 3‑ i 5‑fold modeli), te primene u geometriji i edukaciji: https://www.researchgate.net/publication/344594402_From_Zoom_Organization_to_Zome_Configuration_and_Dynamics_Integrating_the_doughnut_helix_and_pineapple_models_towards_global_strategic_coherence
Kontekst i primena
- https://www.gradnja.rs/ove-montazne-modularne-kupole-po-projektu-domacih-arhitekata-izvodice-se-u-sad
- Laetus in Praesens – o “Zonoedrima i Zome konstrukcijama”
Analiza spirala i helix formi unutar Zome struktura, spominje zlati rez i geometriju zamishljenog sustava: https://www.laetusinpraesens.org/pdfs/2020s/zoomzome_2020.pdf
