From: Ian Jackson Date: Sat, 7 Apr 2018 23:14:13 +0000 (+0100) Subject: curveopt: wip X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ian/git?a=commitdiff_plain;h=caafad51171629c133a0577cacc8ea9d3fb5d876;p=moebius3.git curveopt: wip Signed-off-by: Ian Jackson --- diff --git a/curveopt.py b/curveopt.py index 12d9625..fe19d58 100644 --- a/curveopt.py +++ b/curveopt.py @@ -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: diff --git a/symbolic.py b/symbolic.py index a64e128..90af6e7 100644 --- a/symbolic.py +++ b/symbolic.py @@ -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():