def _transform_m(self, m): m[0] -= M_BIAS[0] m[1] -= M_BIAS[1] m[2] -= M_BIAS[2] return [dot_product(M_TRANSFORMATION[0], m), dot_product(M_TRANSFORMATION[1], m), dot_product(M_TRANSFORMATION[2], m)]
def _calculate_raw_heading(self, a, m, f): e = normalize_3d(cross_3d(m, a)) n = normalize_3d(cross_3d(a, e)) heading = atan2(dot_product(e, f), dot_product(n, f)) * 180 / pi return int(round((heading + 360) if heading < 0 else heading))