Sub compass_Z(compass_X() As Float) As Float()
'http://stackoverflow.com/questions/8625804/compass-direction-is-different-depending-on-phone-orientation
Private wrk1Matrix(9), wrk2Matrix(9), result(3) As Float
wrk1Matrix = getRotationMatrixFromOrientation(compass_X)
Private SM_AXIS_X, SM_AXIS_Z As Int
SM_AXIS_X = reflect.GetStaticField("android.hardware.SensorManager", "AXIS_X")
SM_AXIS_Z = reflect.GetStaticField("android.hardware.SensorManager", "AXIS_Z")
reflect.RunStaticMethod("android.hardware.SensorManager", "remapCoordinateSystem", Array As Object(wrk1Matrix, SM_AXIS_X, SM_AXIS_Z, wrk2Matrix), Array As String("[F", "[I", "[I", "[F"))
reflect.RunStaticMethod("android.hardware.SensorManager","getOrientation", Array As Object(wrk2Matrix, result), Array As String("[F", "[F"))
Return result
End Sub