chiark / gitweb /
curveopt: wip
[moebius3.git] / symbolic.py
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():