chiark / gitweb /
curveopt: wip
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Sat, 7 Apr 2018 23:14:13 +0000 (00:14 +0100)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Sat, 7 Apr 2018 23:14:13 +0000 (00:14 +0100)
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
curveopt.py
symbolic.py

index 12d962512b8a484bc83825bd62cdd679ff5aa4c7..fe19d5818521d88715d3d72983b873deea0096f1 100644 (file)
@@ -35,9 +35,12 @@ class OptimisedCurve():
       ef_dirn = unit_v(cp[cp1i] - cp[cp0i])
       ef_len = np.linalg.norm(np.array(fc_input[fi]) - np.array(fc_input[ei]))
       f = e + ef_dirn * ef_len
+      dbg(repr((end, e,f, ef_dirn, ef_len)))
       fc_input[ei] = e
       fc_input[fi] = f
 
+    dbg(repr(fc_input))
+
     findcurve_epsilon = 0.01
 
     try:
index a64e128d99d5adec2aebc7e9eb8fc3acb35020b6..90af6e7a5ec325fa445c7a82184d0c1e3c346256 100644 (file)
@@ -41,7 +41,7 @@ E, H = vector_symbols('E H')
 F0, G0 = vector_symbols('F0 G0')
 En, Hn = vector_symbols('En Hn')
 
-EFl, GHl = symbols('EFl GHl')
+EFl, HGl = symbols('EFl HGl')
 
 def vector_component(v, ix):
   return v.components[N.base_vectors()[ix]]
@@ -49,7 +49,7 @@ def vector_component(v, ix):
 # x array in numerical algorithm has:
 #    N x 3    coordinates of points 0..N-3
 #    1        EFl = length parameter |EF| for point 1
-#    1        GHl = length parameter |GH| for point N-2
+#    1        HGl = length parameter |HG| for point N-2
 
 # fixed array in numerical algorithm has:
 #    4 x 3    E, En, H, Hn
@@ -71,7 +71,7 @@ def calculate():
 
   global F, G
   F = E + En * EFl
-  G = H + Hn * GHl
+  G = H + Hn * HGl
 
   # diff_A_i = cost_ABCD.diff(vector_component(A, 0))
   # global diff_A_i
@@ -174,7 +174,7 @@ def gen_point_references():
   cprintraw(')')
 
   cprintraw('#define EFl X[ NX_DIRECT + 0 ]')
-  cprintraw('#define GHl X[ NX_DIRECT + 1 ]')
+  cprintraw('#define HGl X[ NX_DIRECT + 1 ]')
   cprintraw('#define NX   ( NX_DIRECT + 2 )')
 
   for ai in range(0, len(abcd)):
@@ -186,8 +186,12 @@ def gen_point_references():
 def gen_prepare():
   cprint('#define PREPARE')
   cprint('memcpy(X, &INPUT[3*2], sizeof(double) * NX_DIRECT);')
-  cassign_vector((F0 - E).normalize(), 'En', 'tmp_En')
-  cassign_vector((G0 - H).normalize(), 'Hn', 'tmp_Hn')
+  for EH,EHs,FG0,FGs in ((E,'E', F0,'F'),
+                         (H,'H', G0,'G')):
+    EFHGv = FG0 - EH
+    EFHGl = EFHGv.magnitude()
+    cassign_vector(EFHGv/EFHGl, EHs+'n', 'tmp_'+EHs)
+    cassign(EFHGl, EHs+FGs+'l', 'tmp_l'+EHs)
   cprintraw('')
 
 def gen_calculate_FG():