Zome kupola sa pomerenim centrom je geometrijska struktura zasnovana na pravilnim spiralnim linijama (zome linijama), pri čemu osnova kupole ostaje fiksirana u centru koordinatnog sistema — tačno u tački (0, 0) u ravni osnove. Za razliku od standardne zome kupole, kod koje se svi spiralni elementi konvergiraju ka centralnoj tački koja se nalazi tačno iznad osnove (simetrična vertikala), u ovoj varijanti vrh kupole se pomera horizontalno za zadatu vrednost center_offset.
Ovaj pomak vrha znači da se geometrijski centar kupole ne nalazi više direktno iznad baze, već se struktura „naginje“ ka zadatom pravcu. Spirale i strukturalni elementi koji čine mrežu kupole sada opisuju zakrivljene linije koje se prilagođavaju novom vrhu, što stvara dinamičniji i vizuelno izražajniji oblik.
Ovakva kupola više nije radijalno simetrična oko svoje vertikalne ose, već ima blago deformisan oblik u pravcu pomeranja centra, što može imati funkcionalne ili estetske prednosti — na primer u arhitektonskim rešenjima koja zahtevaju usmeravanje svetla, otvaranje pogleda ili specifičan nagib prema određenoj tački u prostoru.

Ova zome kupola ima bazu fiksiranu u koordinatnom početku (0,0), dok se vrh kupole pomera horizontalno za vektor $$\vec{c} = (c_x, c_y)$$. Zbog tog pomeranja, osna simetrija se narušava, a dužine rebara i njihovi pravci se računaju u odnosu na novu poziciju vrha.
Standardna dužina rebra u savršeno simetričnoj kupoli, kada se koristi helikoidalna konstrukcija sa n spirala i ukupnom visinom h, računa se kao:
$$ \ell_{\text{rib}} = \sqrt{ \left( \frac{d \pi}{4} \right)^2 + h^2 } $$
Kada se uvede pomeranje centra vrha kupole za vektor:
$$ \vec{c} = (c_x, c_y) $$
ono utiče na horizontalni položaj svake tačke spirale u visinskoj ravni z tako da nova pozicija postaje:
$$ \vec{r}_{\text{spiral}}(z) = \vec{r}_0(z) + \left( \frac{z}{h} \right) \vec{c} $$
Objašnjenje formula:
- $$ \ell_{\text{rib}} = \text{duzina rebra izmedju dva segmenta spirale} $$
- $$ d = \text{precnik kupole u osnovi} $$
- $$ h = \text{visina kupole} $$
- $$ \vec{c} = (c_x, c_y) = \text{horizontalni pomak vrha kupole u odnosu na bazu} $$
- $$ \vec{r}_0(z) = \text{pozicija tacke spirale bez deformacije u visini } z $$
- $$ \vec{r}_{\text{spiral}}(z) = \text{pozicija tacke spirale sa deformacijom} $$
Ovaj model omogućava zome kupole sa nagnutim vrhom, što daje izraženiji vizuelni efekat i funkcionalnu asimetriju u konstrukciji.

Program
Opis ponašanja programa, korak po korak:
1. Parametri konstrukcije kupole
n: broj spirala (npr. 24)segs: broj segmenata u svakoj spirali (npr. 24)d: prečnik osnove kupoleh: visina vrha kupolethickness: debljina „žica“ (cilindara)center_offset: vektor pomeraja vrha kupole (npr.[1.0, 0.0]znači pomeraj 1 jedinicu udesno)
2. Funkcija generate_spiral(...)
- Generiše tačke spirale koje se dižu od osnove do vrha kupole.
- Svaka tačka se računa u odnosu na pomereni centar kupole:
x = sin(...) * d/4 + sin(beta)*d/4 + center_offset[0] * (j / segs) y = cos(...) * d/4 + cos(beta)*d/4 + center_offset[1] * (j / segs)=> Vidiš dacenter_offsetdeluje postepeno duž visine kupole:- Na dnu je 0,
- Na vrhu ima pun efekat (
j/segs = 1), - Čime se model pomera u „kosinu“.
3. Funkcija cylinder_between_points(p1, p2, ...)
- Između svaka dva uzastopna vrha spirale generiše se cilindar koji vizuelno čini deo žičane konstrukcije.
4. Glavna funkcija generate_mesh(...)
- Poziva spiralne generatore (desne i leve spirale),
- Kombinuje ih u jedan 3D mesh,
- Spaja sve cilindre u jednu mrežu sa tačkama (
verts) i trouglastim površinama (faces).
5. Izvoz rezultata
- Na kraju, rezultat se izvozi u
.plyi.stlformat: tmesh.export("helix_zome_ogledalo.ply") mesh.export("helix_zome_ogledalo.stl")
Efekat pomerenog centra (center_offset):
- Ako je
center_offset = [0, 0]=> savršena zome kupola. - Ako je
center_offset = [1, 0]=> vrh kupole je pomeren udesno, spirale više nisu simetrične. - Možeš koristiti i
[-1, 0],[0, 1],[0.5, 0.5]itd. za drugačije deformacije.
Vizuelizacija
- Dobijeni
.stli.plyfajlovi mogu se otvoriti u programima kao što su:- MeshLab
- Blender
- FreeCAD
- Fusion 360
- ili web pregledači za 3D modele
Instalacija potrebnih zavisnosti:
python3 -m pip install numpy trimesh
Programski kod
Naziv fajla: asimetricna_zome_kupola.py
#asimetricna_zome_kupola.py
# Instalacija potrebnih zavisnosti:python3 -m pip install numpy trimesh
import numpy as np
import trimesh
from math import sin, cos, pi
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=12):
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, center_offset=np.array([0.0, 0.0])):
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
# Linearni pomak centra zavisno od visine alpha (od 0 na dnu do 1 na vrhu)
offset_x = center_offset[0] * (alpha / pi)
offset_y = center_offset[1] * (alpha / pi)
x = sin(theta + beta) * d/4 + sin(beta)*d/4 + offset_x
y = cos(theta + beta) * d/4 + cos(beta)*d/4 + offset_y
z = (alpha/pi) * h
spiral.append([x, y, z])
spirals.append(np.array(spiral))
return spirals
def generate_mesh(n, segs, d, h, thickness, center_offset):
verts_list, faces_list = [], []
offset = 0
spirals_right = generate_spiral(n, segs, d, h, direction=1, center_offset=center_offset)
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)
spirals_left = generate_spiral(n, segs, d, h, direction=-1, center_offset=center_offset)
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)
if __name__ == "__main__":
n = 24 # broj spirala po smeru
segs = 24 # broj segmenata po spirali
d = 8.0 # prečnik kupole
h = 3 # visina kupole
thickness = 0.01
# Pomak centra kupole u X i Y na vrhu kupole; osnova je na (0,0)
center_offset = np.array([3, 0.0]) # pomeraj desno za 0.5 jedinica
verts, faces = generate_mesh(n, segs, d, h, thickness, center_offset)
mesh = trimesh.Trimesh(vertices=verts, faces=faces, process=False)
mesh.export("helix_zome_offset_center.ply")
mesh.export("helix_zome_offset_center.stl")
print(" Izvezeni: helix_zome_offset_center.ply, helix_zome_offset_center.stl")
Reference
Naučni radovi & članci
- „Analysis on asymmetric aberration of special domes“
- De Wen Cheng i saradnici (2006, Optical Technique) analiziraju asimetrične optičke kupole (dakle deformacije kupolne površine koje uvode astigmatizam, koma i druge aberacije) Koncept “asimetrične kupole” nalazi primenu i u optici, što može biti korisno kao analog za geometrijsku deformaciju.
https://pure.bit.edu.cn/en/publications/analysis-on-asymmetric-aberration-of-special-domes
- De Wen Cheng i saradnici (2006, Optical Technique) analiziraju asimetrične optičke kupole (dakle deformacije kupolne površine koje uvode astigmatizam, koma i druge aberacije) Koncept “asimetrične kupole” nalazi primenu i u optici, što može biti korisno kao analog za geometrijsku deformaciju.
- MDPI: „In‑Depth Verification of a Numerical Model for an Axisymmetric RC Dome“ (2021)
- Iako fokusira se na simetrične kupole, metodologija numeričkog modeliranja može se prilagoditi i asimetričnom slučaju
https://www.mdpi.com/2073-8994/13/11/2152
- Iako fokusira se na simetrične kupole, metodologija numeričkog modeliranja može se prilagoditi i asimetričnom slučaju
- „The Influence of Dome Geometry on the Results of Modal and Buckling Analysis“ (2023, Appl. Sci.)
- Detaljno proučava kako razne geometrije kupole (uključujući asimetrične) utiču na modalne analize i propuste u konstrukciji – stoga predstavlja dobar tehnički temelj https://www.mdpi.com/2076-3417/13/4/2729
- „Analysis of Lightweight Structure Mesh Topology of Geodesic Domes“ (2024, Appl. Sci.)
- Iako se bavi geodetskim kupolama, diskusija o mesh topologiji i prilagodljivosti oblika je relevantna i za kromatske ili pomerene zome modele https://www.mdpi.com/2076-3417/14/1/132
Knjige i reference o zome kupolama
- Paul Hildebrandt & Clark Richert, “Domes, Zomes, and Drop City” (2021) – radionička konferencija Bridges. Dotiče različite konstrukcije zome kupola, i iako prvenstveno simetrične, mogu poslužiti kao polazna osnova za razumevanje strukture https://en.wikipedia.org/wiki/Zome_%28architecture%29
- Steve Baer, “Zome Primer” (1970) – klasičan uvod u zome kupole i njihovu topologiju https://en.wikipedia.org/wiki/Zome_%28architecture%29
