Improve Unity compatibility
This commit is contained in:
parent
91950a2d19
commit
a91bd6dfee
@ -102,17 +102,7 @@ namespace LinearAlgebra {
|
||||
}
|
||||
}
|
||||
|
||||
#if !UNITY_5_3_OR_NEWER
|
||||
/// <summary>
|
||||
/// Convert the direction into a carthesian vector
|
||||
/// </summary>
|
||||
/// <returns>The carthesian vector corresponding to this direction.</returns>
|
||||
public Vector3Float ToVector3Float() {
|
||||
Quaternion q = Quaternion.Euler(90 - this.vertical.inDegrees, this.horizontal.inDegrees, 0);
|
||||
Vector3Float v = q * Vector3Float.forward;
|
||||
return v;
|
||||
}
|
||||
#else
|
||||
#if UNITY_5_3_OR_NEWER
|
||||
/// <summary>
|
||||
/// Convert the direction into a carthesian vector
|
||||
/// </summary>
|
||||
@ -122,7 +112,30 @@ namespace LinearAlgebra {
|
||||
UnityEngine.Vector3 v = q * UnityEngine.Vector3.forward;
|
||||
return v;
|
||||
}
|
||||
#endif
|
||||
|
||||
/// <summary>
|
||||
/// Convert a carthesian vector into a direction
|
||||
/// </summary>
|
||||
/// <param name="v">The carthesian vector</param>
|
||||
/// <returns>The direction</returns>
|
||||
/// <remarks>Information about the length of the carthesian vector is not
|
||||
/// included in this transformation</remarks>
|
||||
public static Direction FromVector3(UnityEngine.Vector3 v) {
|
||||
AngleFloat horizontal = AngleFloat.Atan2(v.x, v.z);
|
||||
AngleFloat vertical = AngleFloat.deg90 - AngleFloat.Acos(v.y);
|
||||
Direction d = new(horizontal, vertical);
|
||||
return d;
|
||||
}
|
||||
#else
|
||||
/// <summary>
|
||||
/// Convert the direction into a carthesian vector
|
||||
/// </summary>
|
||||
/// <returns>The carthesian vector corresponding to this direction.</returns>
|
||||
public Vector3Float ToVector3() {
|
||||
Quaternion q = Quaternion.Euler(90 - this.vertical.inDegrees, this.horizontal.inDegrees, 0);
|
||||
Vector3Float v = q * Vector3Float.forward;
|
||||
return v;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Convert a carthesian vector into a direction
|
||||
@ -137,6 +150,8 @@ namespace LinearAlgebra {
|
||||
Direction d = new(horizontal, vertical);
|
||||
return d;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Tests the equality of two directions
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
#if !UNITY_5_3_OR_NEWER
|
||||
using UnityEngine;
|
||||
#endif
|
||||
// #if !UNITY_5_3_OR_NEWER
|
||||
// using UnityEngine;
|
||||
// #endif
|
||||
|
||||
namespace LinearAlgebra {
|
||||
|
||||
@ -46,7 +46,45 @@ namespace LinearAlgebra {
|
||||
return s;
|
||||
}
|
||||
|
||||
#if !UNITY_5_3_OR_NEWER
|
||||
#if UNITY_5_3_OR_NEWER
|
||||
/// <summary>
|
||||
/// A zero angle rotation
|
||||
/// </summary>
|
||||
public static readonly SwingTwist zero = Degrees(0, 0, 0);
|
||||
|
||||
public Spherical ToAngleAxis() {
|
||||
UnityEngine.Quaternion q = this.ToQuaternion();
|
||||
q.ToAngleAxis(out float angle, out UnityEngine.Vector3 axis);
|
||||
Direction direction = Direction.FromVector3(axis);
|
||||
|
||||
Spherical r = new(angle, direction);
|
||||
return r;
|
||||
}
|
||||
|
||||
public static SwingTwist FromAngleAxis(Spherical r) {
|
||||
UnityEngine.Vector3 vectorAxis = r.direction.ToVector3();
|
||||
UnityEngine.Quaternion q = UnityEngine.Quaternion.AngleAxis(r.distance, vectorAxis);
|
||||
return FromQuaternion(q);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Convert a quaternion in a swing/twist rotation
|
||||
/// </summary>
|
||||
/// <param name="q">The quaternion to convert</param>
|
||||
/// <returns>The swing/twist rotation</returns>
|
||||
public static SwingTwist FromQuaternion(UnityEngine.Quaternion q) {
|
||||
UnityEngine.Vector3 angles = q.eulerAngles;
|
||||
SwingTwist r = Degrees(angles.y, -angles.x, -angles.z);
|
||||
return r;
|
||||
}
|
||||
|
||||
public UnityEngine.Quaternion ToQuaternion() {
|
||||
UnityEngine.Quaternion q = UnityEngine.Quaternion.Euler(this.swing.vertical.inDegrees,
|
||||
this.swing.horizontal.inDegrees,
|
||||
this.twist.inDegrees);
|
||||
return q;
|
||||
}
|
||||
#else
|
||||
/// <summary>
|
||||
/// A zero angle rotation
|
||||
/// </summary>
|
||||
@ -92,25 +130,7 @@ namespace LinearAlgebra {
|
||||
return r;
|
||||
}
|
||||
#endif
|
||||
#if UNITY_5_3_OR_NEWER
|
||||
/// <summary>
|
||||
/// Convert a quaternion in a swing/twist rotation
|
||||
/// </summary>
|
||||
/// <param name="q">The quaternion to convert</param>
|
||||
/// <returns>The swing/twist rotation</returns>
|
||||
public static SwingTwist FromQuaternion(UnityEngine.Quaternion q) {
|
||||
UnityEngine.Vector3 angles = q.eulerAngles;
|
||||
SwingTwist r = Degrees(angles.y, -angles.x, -angles.z);
|
||||
return r;
|
||||
}
|
||||
|
||||
public UnityEngine.Quaternion ToUnityQuaternion() {
|
||||
UnityEngine.Quaternion q = UnityEngine.Quaternion.Euler(this.swing.vertical.inDegrees,
|
||||
this.swing.horizontal.inDegrees,
|
||||
this.twist.inDegrees);
|
||||
return q;
|
||||
}
|
||||
#endif
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user