diff -urN rt_v17/ax.py rt_v18/ax.py --- rt_v17/ax.py 2018-04-03 10:03:55.000000000 +0900 +++ rt_v18/ax.py 2018-04-07 23:52:48.000000000 +0900 @@ -1,5 +1,6 @@ #!/usr/bin/env python +import numpy as np import ut import mt import v @@ -10,15 +11,15 @@ def new(p, vs): # vs: vecs - p = mt.to_arr(p) - e = ut.Empty() e.typ = 'ax' e.p = p e.vs = vs - l2g = lambda p: vs.tr( 'l2g', p ) + e.p - g2l = lambda p: vs.tr( 'g2l', p - e.p ) + #l2g = lambda p: vs.tr( 'l2g', p ) + e.p + #g2l = lambda p: vs.tr( 'g2l', p - e.p ) + e.l2g = l2g = lambda p: vs.l2g(p) + e.p + e.g2l = g2l = lambda p: vs.g2l(p - e.p) e.tr_p = lambda d, p: { 'l2g': l2g, 'g2l': g2l }.get(d, l2g)(p) e.tr_v = lambda d, v: vs.tr(d, v) e.tr_line = lambda d, l: line.new( e.tr_p(d, l.p), e.tr_v(d, l.v) ) @@ -36,9 +37,12 @@ def compo(ax_outside): # o.p + o.vs x (i.p + i.vs x p) # = (o.p + o.vs x i.p) + o.vs x i.vs x p - d = 'l2g' - vs_ = vecs.new( ut.map_lst( lambda v: ax_outside.tr(d, v, typ='v'), vs.v3 ) ) - p_ = ax_outside.tr(d, p) + + #d = 'l2g' + #vs_ = vecs.new( np.apply_along_axis( lambda v: ax_outside.tr(d, v, typ='v'), 1, vs.v3 ) ) + #p_ = ax_outside.tr(d, p) + vs_ = vecs.new( np.apply_along_axis( lambda v: ax_outside.vs.l2g(v), 1, vs.v3 ) ) + p_ = ax_outside.l2g(p) return new(p_, vs_) e.compo = compo @@ -49,23 +53,24 @@ vs_ = vs.rev() if not vs_: return [] - p_ = vs_.tr( 'l2g', -p ) + #p_ = vs_.tr( 'l2g', -p ) + p_ = vs_.l2g(-p) return new(p_, vs_) e.rev = rev return e -one = new( [0,0,0], vecs.one ) -slide = lambda sld: new(sld, vecs.one) +one = new( mt.zero, vecs.one ) +slide = lambda sld: new( mt.arr( sld ), vecs.one) slide_x = lambda x: slide( [x,0,0] ) slide_y = lambda y: slide( [0,y,0] ) slide_z = lambda z: slide( [0,0,z] ) -zoom = lambda zm3: new( [0,0,0], vecs.one.zoom(zm3) ) +zoom = lambda zm3: new( mt.zero, vecs.one.zoom(zm3) ) zoom_all = lambda zm: zoom( [zm,zm,zm] ) zoom_x = lambda zm: zoom( [zm,1,1] ) zoom_y = lambda zm: zoom( [1,zm,1] ) zoom_z = lambda zm: zoom( [1,1,zm] ) -rot_y = lambda deg: new( [0,0,0], vecs.rot_y(deg) ) +rot_y = lambda deg: new( mt.zero, vecs.rot_y(deg) ) rot = lambda l, deg: ( lambda ax: ax.rev().compo( rot_y(deg) ).compo(ax) )( new_line(l) ) rot_x = lambda deg: rot(line.x1, deg) rot_z = lambda deg: rot(line.z1, deg) diff -urN rt_v17/cross.py rt_v18/cross.py --- rt_v17/cross.py 2018-04-04 18:29:49.000000000 +0900 +++ rt_v18/cross.py 2018-04-07 23:36:02.000000000 +0900 @@ -21,7 +21,7 @@ return False pz = l.p[2] - t = -float(pz) / vz + t = -pz / vz if t <= 0: return False @@ -69,7 +69,8 @@ w = math.sin(rad) for i in range(n): axi = ax.slide_y(-1).compo( ax.zoom([w,h,1]) ).compo( ax.rot_z(i*deg) ) - crs_ = { 'l': axi.tr( 'g2l', crs.get('l') ), 'd': crs.get('d') } + #crs_ = { 'l': axi.tr( 'g2l', crs.get('l') ), 'd': crs.get('d') } + crs_ = { 'l': axi.tr_line( 'g2l', crs.get('l') ), 'd': crs.get('d') } if triangle(crs_): crs['t'] = crs_.get('t') return True @@ -131,7 +132,7 @@ ts = sorted( filter( lambda v: v > 0, ts ) ) if not ts: return False - tpzs = map( lambda t: ( lambda x,y,z: (t, [x,y,z], z) )( *l.on_line_p(t) ), ts ) + tpzs = map( lambda t: ( lambda p: (t, p, p[2]) )( l.on_line_p(t) ), ts ) tpzs = ut.filter_up_lst( lambda t,p,z: abs(z) < 1, tpzs ) if not tpzs: return False @@ -142,7 +143,7 @@ def pipe_side_nv(crs): (px, py, _) = crs.get('p') - crs['nv'] = v.unit( [px,py,0] ) + crs['nv'] = v.unit( mt.arr( [px,py,0] ) ) def cone_side(crs): # 0 < z < 1 @@ -189,7 +190,7 @@ if not ts: return False - tpzs = map( lambda t: ( lambda x,y,z: (t, [x,y,z], z) )( *l.on_line_p(t) ), ts ) + tpzs = map( lambda t: ( lambda p: (t, p, p[2]) )( l.on_line_p(t) ), ts ) tpzs = ut.filter_up_lst( lambda t,p,z: 0= n: return 'fin ' + str_hms(e.total_sec) rest = e.total_sec - ( now_sec() - e.st_sec ) - return 'rest {} : {}'.format( str_hms(rest), str_dt( e.st_sec + e.total_sec ) ) + return 'total {} : rest {} : {}'.format( str_hms(e.total_sec), str_hms(rest), str_dt( e.st_sec + e.total_sec ) ) pcent = lambda : Decimal(100*e.i/n).quantize( Decimal('1.0') ) stat_str = lambda : '{}{}/{}({}%) : {}'.format( id_str, e.i, n, pcent(), fin_str() ) diff -urN rt_v17/v.py rt_v18/v.py --- rt_v17/v.py 2018-04-01 11:55:34.000000000 +0900 +++ rt_v18/v.py 2018-04-06 15:51:25.000000000 +0900 @@ -4,18 +4,16 @@ import numpy as np import mt -zero = mt.arr( [0,0,0] ) +zero = mt.zero one = mt.arr( [1,1,1] ) x1 = mt.arr( [1,0,0] ) y1 = mt.arr( [0,1,0] ) z1 = mt.arr( [0,0,1] ) all = lambda e: mt.arr( [e,e,e] ) -len2 = lambda v: np.dot(v,v) - len1 = lambda v: np.linalg.norm(v) -unit = lambda v: ( lambda l: v / l if l != 0 else z1 )( np.linalg.norm( mt.to_arr(v) ) ) # ! +unit = lambda v: v / np.linalg.norm(v) cross_product_unit = lambda va, vb: unit( np.cross(va, vb) ) diff -urN rt_v17/vecs.py rt_v18/vecs.py --- rt_v17/vecs.py 2018-04-02 17:18:41.000000000 +0900 +++ rt_v18/vecs.py 2018-04-07 23:41:35.000000000 +0900 @@ -9,23 +9,22 @@ def new(v3): # v3: [ v.x1, v.y1, v.z1 ] - v3 = mt.to_arr(v3) - e = ut.Empty() e.typ = 'vecs' e.v3 = v3 - l2g = lambda v_: np.dot( v3.T, v_ ) - g2l = lambda v: e.rev().tr('l2g', v) + e.l2g = l2g = lambda v_: np.dot( v3.T, v_ ) + #e.g2l = g2l = lambda v: e.rev().tr('l2g', v) + e.g2l = g2l = lambda v: e.rev().l2g(v) e.tr = lambda d, v: { 'l2g': l2g, 'g2l': g2l }.get(d, l2g)(v) e.rev_vs = None def rev(): if not e.rev_vs: - e.rev_vs = new( mt.v3_rev(v3) ) + e.rev_vs = new( np.linalg.inv(v3) ) return e.rev_vs e.rev = rev - e.zoom = lambda zm3: new( v3 * mt.T( mt.to_arr(zm3) ) ) + e.zoom = lambda zm3: new( v3 * mt.T( mt.arr(zm3) ) ) e.zoom_all = lambda zm: e.zoom( [zm,zm,zm] ) e.zoom_x = lambda zm: e.zoom( [zm,1,1] ) e.zoom_y = lambda zm: e.zoom( [1,zm,1] ) @@ -33,7 +32,7 @@ return e -one = new( [v.x1, v.y1, v.z1] ) +one = new( mt.arr( [v.x1, v.y1, v.z1] ) ) def by_fix_ref(fix_nm, fix, ref_nm, ref): fix_i = 'xyz'.index(fix_nm) @@ -56,7 +55,7 @@ (a, b) = (fix, c) if (fix_i + 1) % 3 == i else (c, fix) v3[ref_i] = v.cross_product_unit(a, b) - return new(v3) + return new( mt.arr(v3) ) def rot_y(deg): rad = mt.deg_to_rad(deg) @@ -77,5 +76,5 @@ z = (zx, zy, zz) v3 = (x, y, z) - return new(v3) + return new( mt.arr(v3) ) # EOF diff -urN rt_v17/way.py rt_v18/way.py --- rt_v17/way.py 2018-04-04 17:07:41.000000000 +0900 +++ rt_v18/way.py 2018-04-06 15:34:11.000000000 +0900 @@ -15,7 +15,7 @@ def get_idx_t(ts, t): s = sum(ts) - t -= int( float(t) / s ) * s + t -= int( t / s ) * s s = 0 for i in range( len(ts) ): if s <= t and t <= s + ts[i]: @@ -30,7 +30,7 @@ return None j = (i + 1) % len(lst) (v2, _) = lst[j] - return float(v2 - v) / t + return (v2 - v) / t def get(lst, t, itp3=False): # itp3 is using mt.interp3 @@ -49,7 +49,7 @@ k0 = f(ka, kb, ti) k1 = f(kb, kc, ti) - (v, k) = mt.interp3( vs[idx], vs[(idx+1)%n], k0, k1, float(t)/ti ) + (v, k) = mt.interp3( vs[idx], vs[(idx+1)%n], k0, k1, t/ti ) return v return mt.linear_conv( t, 0, ts[idx], vs[idx], vs[(idx+1)%n] ) diff -urN rt_v17/wf.py rt_v18/wf.py --- rt_v17/wf.py 2018-04-04 18:24:52.000000000 +0900 +++ rt_v18/wf.py 2018-04-06 15:33:56.000000000 +0900 @@ -83,7 +83,7 @@ return ([],[]) def nv_clip(nv, pa, pb): - nv_line = line.new( [0,0,0], nv ) + nv_line = line.new( mt.zero, nv ) (in_a, in_b) = ut.map_lst( lambda p: nv_line.is_plane_side(p), [pa, pb] ) if in_a and in_b: return [pa, pb] @@ -98,7 +98,7 @@ p4 = mt.arr( [ [0,0,-d], [w,0,-d], [w,h,-d], [0,h,-d] ] ) p4 = ut.map_lst( lambda p: lstx.tr(wh2eye, 'l2g', p), p4 ) for i in range(n): - nv = v.p3_to_nv( mt.arr( [0,0,0] ), p4[i], p4[(i+1)%n] ) + nv = v.p3_to_nv( mt.zero, p4[i], p4[(i+1)%n] ) r = nv_clip(nv, pa, pb) if not r: return []