chiark / gitweb /
mesh: generates somethinng visible, but it is wrong
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Tue, 7 Nov 2017 15:34:35 +0000 (15:34 +0000)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Tue, 7 Nov 2017 15:34:35 +0000 (15:34 +0000)
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
meshscad

index c1c81fcca430140feffb6b9fd1dec9c2da17792b..6281a0b0080fc64d1c5f78788587643fa6ea2724 100755 (executable)
--- a/meshscad
+++ b/meshscad
@@ -12,13 +12,13 @@ nomsize = 50;
 wire = 3.0;
 
 # number of wires
-kv = 10
-kw = 10
+kv = 5
+kw = 5
 
 # resolution
-nv = 40
-nw = 40
-ns = 10 # around tube
+nv = 20
+nw = 20
+ns = 3 # around tube
 
 nv += -nv % kv
 nw += -nw % kw
@@ -28,12 +28,9 @@ each_w = nw / kw
 
 m = Moebius(nv, nw)
 
+def dpr(v): return '%4f %4f %4f' % tuple(v)
+
 def round_wire(p, vec_surfacenormal, vec_acrosswire, sigma):
-  r = (p +
-       wire/nomsize * (vec_surfacenormal * sin(sigma) +
-                       vec_acrosswire * cos(sigma)))
-  #print(' round_wire',p,vec_surfacenormal, vec_acrosswire, sigma, r,
-  #      file=sys.stderr)
   return r
 
 def make_moebius(objname):
@@ -41,17 +38,36 @@ def make_moebius(objname):
   # wires:
   extents = [ ScadObject() for v in range(0,nv) ] # along extents
   travers = [ ScadObject() for w in range(0,nw) ] # along traverses
+
+  def qc(v, w, sigmas, is_trav):
+    print(' QCv,w,T',v,w,is_trav, file=sys.stderr)
+    for ab in 0,1:
+      p, norm, extt, trav = m.details(v + ab*is_trav, w + ab*(not 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)
+        yield r
+
   for v in range(0, nv):
     for w in range(0, nw):
       for s in range(0, ns):
-        print('VWS',v,w,s, file=sys.stderr)
-        sigmas = [ (s + sx)/ns * tau for sx in 0,1 ]
+        sigmas = [ (s + sx + 1.0)/ns * tau for sx in 0,1 ]
+        print('VWS',v,w,s, sigmas, file=sys.stderr)
         if not w % each_w:
-          extents[w].quad([ round_wire(p, norm, trav, sigmas[sx])
-                            for a in 0,1
-                            for p, norm, extt, trav in (m.details(v+a, w),)
-                            for sx in 0,1 ])
-        if not v % each_v:
+          extents[w].quad([ cnr for cnr in qc(v,w,sigmas,False) ])
+        if False and not v % each_v:
           travers[v].quad([ round_wire(p, norm, extt, sigmas[sx])
                             for b in 0,1
                             for p, norm, extt, trav in (m.details(v, w+b),)