double3 lwc_global64(const lwcoord64_t *coord) { double3 p = coord->offs; double3 seg = v3l_to_v3d(coord->seg); return vd3_add(p, vd3_s_mul(seg, OO_LW_SEGMENT_LEN64)); }
void lwc_translate3dv(lwcoord_t *coord, double3 offs) { double3 v = vd3_add(coord->offs, offs); coord->offs = v; lwc_normalise(coord); }
void lwc_translate3fv(lwcoord_t *coord, float3 offs) { double3 offsd = vf3_to_vd3(offs); coord->offs = vd3_add(coord->offs, offsd); lwc_normalise(coord); }
double3 lwc_dist64(const lwcoord64_t *a, const lwcoord64_t * b) { double3 diff = vd3_sub(a->offs, b->offs); long3 segdiff = a->seg - b->seg; double3 segdiffr = vd3_set((double)v3l_get(segdiff, 0), (double)v3l_get(segdiff, 1), (double)v3l_get(segdiff, 2)); return vd3_add(diff, vd3_s_mul(segdiffr, OO_LW_SEGMENT_LEN64)); }
double3 lwc_dist(const lwcoord_t *a, const lwcoord_t * b) { double3 diff = vd3_sub(a->offs, b->offs); long3 segdiff = a->seg - b->seg; double3 segdiffr = vd3_set((double)segdiff.x, (double)segdiff.y, (double)segdiff.z); return vd3_add(diff, vd3_s_mul(segdiffr, OO_LW_SEGMENT_LEN)); }
double3 lwc_relvec(const lwcoord_t *coord, long3 seg) { double3 r = coord->offs; long3 segdiff = coord->seg - seg; double3 segdiffr = vd3_set((double)segdiff.x, (double)segdiff.y, (double)segdiff.z); r = vd3_add(r, vd3_s_mul(segdiffr, OO_LW_SEGMENT_LEN)); return r; }
double3 lwc_relvec64(const lwcoord64_t *coord, long3 seg) { double3 r = coord->offs; long3 segdiff = coord->seg - seg; double3 segdiffr = vd3_set((double)v3l_get(segdiff, 0), (double)v3l_get(segdiff, 1), (double)v3l_get(segdiff, 2)); r = vd3_add(r, vd3_s_mul(segdiffr, OO_LW_SEGMENT_LEN64)); return r; }
void lwc_translate64(lwcoord64_t *coord, double3 offs) { coord->offs = vd3_add(coord->offs, offs); lwc_normalise64(coord); }
void lwc_translate3f(lwcoord_t *coord, float dx, float dy, float dz) { coord->offs = vd3_add(coord->offs, vd3_set(dx, dy, dz)); lwc_normalise(coord); }
void elp2000_transform(cm_orbit_t *obj, cm_world_t *state) { // ELP computes the position in geo-centric coordinates obj->p = vd3_add(obj->p, obj->parent->p); }