|
|
@@ -135,6 +135,7 @@ public class AimHandler : MonoBehaviour
|
|
|
} catch (Exception e) { Debug.LogError(e.Message); }
|
|
|
}
|
|
|
|
|
|
+ [NonSerialized] public bool isCalibrateMagPerfect = false;
|
|
|
public void CalibrateMag(bool calibration) {
|
|
|
try {
|
|
|
if (calibration)
|
|
|
@@ -148,6 +149,7 @@ public class AimHandler : MonoBehaviour
|
|
|
else
|
|
|
{
|
|
|
List<Vector3> list = MagCalibrater.getRecords();
|
|
|
+
|
|
|
//停止校准时候,看看数组值
|
|
|
float maxDistance = 0f,ratio = 1f;
|
|
|
Vector3 maxVector3 = new Vector3(0,0,0);
|
|
|
@@ -194,6 +196,29 @@ public class AimHandler : MonoBehaviour
|
|
|
|
|
|
MagCalibrationButton.GetComponentInChildren<Text>().text = "开始地磁计校准";
|
|
|
PlayerPrefs.SetString("o0MagneticCalibrater", JsonConvert.SerializeObject(MagCalibrater));
|
|
|
+
|
|
|
+ #region jc-看校准是否完美,求Records方差
|
|
|
+ if (list == null || list.Count == 0) isCalibrateMagPerfect = false;
|
|
|
+ else
|
|
|
+ {
|
|
|
+ float sumV = 0;
|
|
|
+ float[] listArray = new float[list.Count];
|
|
|
+ for (int i = 0; i < list.Count; i++)
|
|
|
+ {
|
|
|
+ listArray[i] = MagCalibrater.Update(list[i]).magnitude;
|
|
|
+ sumV += listArray[i];
|
|
|
+ }
|
|
|
+ float avarageV = sumV / listArray.Length;
|
|
|
+ float varianceV = 0;
|
|
|
+ foreach (float vvv in listArray)
|
|
|
+ {
|
|
|
+ varianceV += Mathf.Pow(vvv - avarageV, 2);
|
|
|
+ }
|
|
|
+ varianceV /= listArray.Length;
|
|
|
+ isCalibrateMagPerfect = varianceV < 0.001;
|
|
|
+ Debug.Log("jc-地磁校准方差=" + varianceV);
|
|
|
+ }
|
|
|
+ #endregion
|
|
|
}
|
|
|
} catch (Exception e) { Debug.LogError(e.Message); }
|
|
|
}
|