From 077c2823cc9c61558fc8904c2b87479c20f8d9e2 Mon Sep 17 00:00:00 2001 From: Ian Jackson Date: Sun, 8 Apr 2018 13:41:50 +0100 Subject: [PATCH] curveopt: ensure |EF| and |HG| are positive Signed-off-by: Ian Jackson --- symbolic.py | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/symbolic.py b/symbolic.py index d505e8c..e6d3a65 100644 --- a/symbolic.py +++ b/symbolic.py @@ -47,15 +47,15 @@ E, H = vector_symbols('E H') F0, G0 = vector_symbols('F0 G0') En, Hn = vector_symbols('En Hn') -EFl, HGl = symbols('EFl HGl') +EFlq, HGlq = symbols('EFlq HGlq') def vector_component(v, ix): return v.components[N.base_vectors()[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 HGl = length parameter |HG| for point N-2 +# 1 EFlq = sqrt of length parameter |EF| for point 1 +# 1 HGlq = sqrt of length parameter |HG| for point N-2 # fixed array in numerical algorithm has: # 4 x 3 E, En, H, Hn @@ -124,8 +124,8 @@ def calculate(): # ---------- actual cost computation formulae ---------- global F, G - F = E + En * EFl - G = H + Hn * HGl + F = E + En * pow(EFlq, 2) + G = H + Hn * pow(HGlq, 2) global a,b, al,bl, au,bu a, b = CoordArray ('a_ b_', 'NP-1', B-A ).s() # [mm] @@ -241,9 +241,9 @@ def gen_point_references(): cprint(' &X[3*((PP)-2)]') cprintraw(')') - cprintraw('#define EFl X[ NX_DIRECT + 0 ]') - cprintraw('#define HGl X[ NX_DIRECT + 1 ]') - cprintraw('#define NX ( NX_DIRECT + 2 )') + cprintraw('#define EFlq X[ NX_DIRECT + 0 ]') + cprintraw('#define HGlq X[ NX_DIRECT + 1 ]') + cprintraw('#define NX ( NX_DIRECT + 2 )') for ai in range(0, len(abcd)): cprintraw('#define %s POINT(P%+d)' % (abcd[ai], ai)) @@ -261,8 +261,9 @@ def gen_prepare(): (H,'H', G0,'G')): EFHGv = FG0 - EH EFHGl = EFHGv.magnitude() + EFHGlq = sqrt(EFHGl) cassign_vector(EFHGv/EFHGl, EHs+'n', 'tmp_'+EHs) - cassign(EFHGl, EHs+FGs+'l', 'tmp_l'+EHs) + cassign(EFHGlq, EHs+FGs+'lq', 'tmp_l'+EHs) cprintraw('') def gen_calculate_FG(): -- 2.30.2