diff -urN rt_v58/cross.c rt_v59/cross.c --- rt_v58/cross.c 2018-06-29 09:20:42.000000000 +0900 +++ rt_v59/cross.c 2018-07-06 03:39:31.000000000 +0900 @@ -334,19 +334,27 @@ if(kind_idx != KIND_BALL){ double *p = ret->l_nv_g.p; double *v = ret->l_nv_g.v; - double z[3]; + double x[3], z[3]; struct vecs vs; if(is_plane(kind_idx)){ v_set(z, v_x1); }else if(kind_idx == KIND_PIPE_SIDE){ - v_add(p, v_z1, z); - }else{ /* KIND_CONE_SIDE */ v_set(z, v_z1); + }else{ /* KIND_CONE_SIDE */ + v_sub(v_z1, ret->p, z); } + vecs_by_fix_ref(&vs, 'z', z, 'y', nv); + v_set( x, vecs_get_by_name(&vs, 'x') ); + + v_add(x, ret->p, x); + v_add(z, ret->p, z); + lstx_tr_p(l2g, L2G, x, x); lstx_tr_p(l2g, L2G, z, z); + v_sub(x, p, x); v_sub(z, p, z); - vecs_by_fix_ref(&vs, 'z', z, 'y', v); + vecs_by_fix_ref(&vs, 'x', x, 'z', z); + v_set( v, vecs_get_by_name(&vs, 'y') ); } if(rev){