wire = 3.0;
# number of wires
-kv = 20
-kw = 10
+kv = 24
+kw = 16
# resolution
-nv = 40
-nw = 40
-ns = 32 # around tube, should be even
+nv = 80
+nw = 80
+ns = 4 # around tube, should be even
nv += -nv % kv
nw += -nw % kw
def dpr(v): return '%+3f %+3f %+3f' % tuple(v)
-def round_wire(p, vec_surfacenormal, vec_acrosswire, sigma):
- return r
+def points_round_wire(p, norm, acrs, sigmas):
+ for sigma in sigmas:
+ delta = norm * sin(sigma) + acrs * cos(sigma)
+ r = p + wire/nomsize * delta
+ yield r
+
+def calc_sigmas(ss):
+ return [ (s + 0.5)/ns * tau for s in ss ]
def make_moebius(objname):
print('module %s(){' % objname)
#print(' QCv,w,T',v,w,is_trav, file=sys.stderr)
for ab in 0,1:
p, norm, extt, trav = m.details(v + ab*(not is_trav), w + ab*is_trav)
- for sx in 0,1:
- sigma = sigmas[sx]
- if is_trav: acrs = extt
- else: acrs = trav
- delta = norm * sin(sigma) + acrs * cos(sigma)
- r = p + wire/nomsize * delta
- #print(' RW,ab,sx',ab,sx,
- # 'r=',dpr(r),
- # 'p=',dpr(p),
- # 'norm=',dpr(norm),
- # 'extt=',dpr(extt),
- # 'acrs=',dpr(acrs),
- # 'delta=',dpr(delta),
- # 's=','%4f' % sigma,
- # file=sys.stderr)
+ if is_trav: acrs = extt
+ else: acrs = trav
+ #print(' RW,ab,sx',ab,sx,
+ # 'r=',dpr(r),
+ # 'p=',dpr(p),
+ # 'norm=',dpr(norm),
+ # 'extt=',dpr(extt),
+ # 'acrs=',dpr(acrs),
+ # 'delta=',dpr(delta),
+ # 's=','%4f' % sigma,
+ # file=sys.stderr)
+ for r in points_round_wire(p, norm, acrs, sigmas):
yield r
for v in range(0, nv):
for w in range(0, nw+1):
for s in range(0, ns):
- sigmas = [ (s + sx + 0.)/ns * tau for sx in 0,1 ]
+ sigmas = calc_sigmas([s + sx for sx in (0,1)])
#print('VWS',v,w,s, sigmas, file=sys.stderr)
if not w % each_w:
extents[w % nw].quad([ cnr for cnr in qc(v,w,sigmas,False) ])
if not v % each_v and w < nw:
- travers[v].quad([ cnr for cnr in qc(v,w,sigmas,True) ])
+ travers[v].rquad([ cnr for cnr in qc(v,w,sigmas,True) ])
+ if not v % each_v:
+ for w in 0, nw:
+ p, norm, extt, trav = m.details(v, w)
+ cnrs = points_round_wire(p, norm, extt, calc_sigmas(range(0,ns)))
+ cnrs = list(cnrs)
+ if w: cnrs.reverse()
+ for s in range(0, ns-1):
+ travers[v].triangle(cnrs[s],
+ cnrs[s+1],
+ cnrs[ns-1])
+
for w in range(0, nw):
print('// extent w=', w)
extents[w].writeout_core(nomsize)