forked from bit/DotRecastNetSim
new constructor
This commit is contained in:
parent
9f6f1a0b33
commit
cc6fde19bb
|
@ -27,7 +27,7 @@ namespace DotRecast.Core
|
||||||
{
|
{
|
||||||
public const float EPS = 1e-4f;
|
public const float EPS = 1e-4f;
|
||||||
private static readonly float EQUAL_THRESHOLD = Sqr(1.0f / 16384.0f);
|
private static readonly float EQUAL_THRESHOLD = Sqr(1.0f / 16384.0f);
|
||||||
|
|
||||||
public static float VDistSqr(Vector3f v1, float[] v2, int i)
|
public static float VDistSqr(Vector3f v1, float[] v2, int i)
|
||||||
{
|
{
|
||||||
float dx = v2[i] - v1.x;
|
float dx = v2[i] - v1.x;
|
||||||
|
@ -35,7 +35,7 @@ namespace DotRecast.Core
|
||||||
float dz = v2[i + 2] - v1.z;
|
float dz = v2[i + 2] - v1.z;
|
||||||
return dx * dx + dy * dy + dz * dz;
|
return dx * dx + dy * dy + dz * dz;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static float VDistSqr(Vector3f v1, Vector3f v2)
|
public static float VDistSqr(Vector3f v1, Vector3f v2)
|
||||||
{
|
{
|
||||||
float dx = v2.x - v1.x;
|
float dx = v2.x - v1.x;
|
||||||
|
@ -43,7 +43,7 @@ namespace DotRecast.Core
|
||||||
float dz = v2.z - v1.z;
|
float dz = v2.z - v1.z;
|
||||||
return dx * dx + dy * dy + dz * dz;
|
return dx * dx + dy * dy + dz * dz;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static float VDistSqr(float[] v, int i, int j)
|
public static float VDistSqr(float[] v, int i, int j)
|
||||||
{
|
{
|
||||||
float dx = v[i] - v[j];
|
float dx = v[i] - v[j];
|
||||||
|
@ -60,7 +60,7 @@ namespace DotRecast.Core
|
||||||
dest.z = v1.x * v2.y - v1.y * v2.x;
|
dest.z = v1.x * v2.y - v1.y * v2.x;
|
||||||
return dest;
|
return dest;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static float VDot(Vector3f v1, Vector3f v2)
|
public static float VDot(Vector3f v1, Vector3f v2)
|
||||||
{
|
{
|
||||||
return v1.x * v2.x + v1.y * v2.y + v1.z * v2.z;
|
return v1.x * v2.x + v1.y * v2.y + v1.z * v2.z;
|
||||||
|
@ -83,7 +83,6 @@ namespace DotRecast.Core
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public static float Step(float threshold, float v)
|
public static float Step(float threshold, float v)
|
||||||
{
|
{
|
||||||
return v < threshold ? 0.0f : 1.0f;
|
return v < threshold ? 0.0f : 1.0f;
|
||||||
|
@ -103,7 +102,7 @@ namespace DotRecast.Core
|
||||||
{
|
{
|
||||||
return u * g + (1f - u) * f;
|
return u * g + (1f - u) * f;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/// Performs a scaled vector addition. (@p v1 + (@p v2 * @p s))
|
/// Performs a scaled vector addition. (@p v1 + (@p v2 * @p s))
|
||||||
/// @param[out] dest The result vector. [(x, y, z)]
|
/// @param[out] dest The result vector. [(x, y, z)]
|
||||||
|
@ -127,39 +126,39 @@ namespace DotRecast.Core
|
||||||
/// @param[in] t The interpolation factor. [Limits: 0 <= value <= 1.0]
|
/// @param[in] t The interpolation factor. [Limits: 0 <= value <= 1.0]
|
||||||
public static Vector3f VLerp(float[] verts, int v1, int v2, float t)
|
public static Vector3f VLerp(float[] verts, int v1, int v2, float t)
|
||||||
{
|
{
|
||||||
Vector3f dest = new Vector3f();
|
return new Vector3f(
|
||||||
dest.x = verts[v1 + 0] + (verts[v2 + 0] - verts[v1 + 0]) * t;
|
verts[v1 + 0] + (verts[v2 + 0] - verts[v1 + 0]) * t,
|
||||||
dest.y = verts[v1 + 1] + (verts[v2 + 1] - verts[v1 + 1]) * t;
|
verts[v1 + 1] + (verts[v2 + 1] - verts[v1 + 1]) * t,
|
||||||
dest.z = verts[v1 + 2] + (verts[v2 + 2] - verts[v1 + 2]) * t;
|
verts[v1 + 2] + (verts[v2 + 2] - verts[v1 + 2]) * t
|
||||||
return dest;
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Vector3f VLerp(Vector3f v1, Vector3f v2, float t)
|
public static Vector3f VLerp(Vector3f v1, Vector3f v2, float t)
|
||||||
{
|
{
|
||||||
Vector3f dest = new Vector3f();
|
return new Vector3f(
|
||||||
dest.x = v1.x + (v2.x - v1.x) * t;
|
v1.x + (v2.x - v1.x) * t,
|
||||||
dest.y = v1.y + (v2.y - v1.y) * t;
|
v1.y + (v2.y - v1.y) * t,
|
||||||
dest.z = v1.z + (v2.z - v1.z) * t;
|
v1.z + (v2.z - v1.z) * t
|
||||||
return dest;
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public static Vector3f VSub(Vector3f v1, Vector3f v2)
|
public static Vector3f VSub(Vector3f v1, Vector3f v2)
|
||||||
{
|
{
|
||||||
Vector3f dest = new Vector3f();
|
return new Vector3f(
|
||||||
dest.x = v1.x - v2.x;
|
v1.x - v2.x,
|
||||||
dest.y = v1.y - v2.y;
|
v1.y - v2.y,
|
||||||
dest.z = v1.z - v2.z;
|
v1.z - v2.z
|
||||||
return dest;
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Vector3f VAdd(Vector3f v1, Vector3f v2)
|
public static Vector3f VAdd(Vector3f v1, Vector3f v2)
|
||||||
{
|
{
|
||||||
Vector3f dest = new Vector3f();
|
return new Vector3f(
|
||||||
dest.x = v1.x + v2.x;
|
v1.x + v2.x,
|
||||||
dest.y = v1.y + v2.y;
|
v1.y + v2.y,
|
||||||
dest.z = v1.z + v2.z;
|
v1.z + v2.z
|
||||||
return dest;
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void VSet(ref Vector3f @out, float a, float b, float c)
|
public static void VSet(ref Vector3f @out, float a, float b, float c)
|
||||||
|
@ -175,14 +174,14 @@ namespace DotRecast.Core
|
||||||
@out[1] = @in.y;
|
@out[1] = @in.y;
|
||||||
@out[2] = @in.z;
|
@out[2] = @in.z;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void VCopy(ref Vector3f @out, float[] @in)
|
public static void VCopy(ref Vector3f @out, float[] @in)
|
||||||
{
|
{
|
||||||
@out.x = @in[0];
|
@out.x = @in[0];
|
||||||
@out.y = @in[1];
|
@out.y = @in[1];
|
||||||
@out.z = @in[2];
|
@out.z = @in[2];
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void VCopy(ref Vector3f @out, float[] @in, int i)
|
public static void VCopy(ref Vector3f @out, float[] @in, int i)
|
||||||
{
|
{
|
||||||
@out.x = @in[i];
|
@out.x = @in[i];
|
||||||
|
@ -219,7 +218,6 @@ namespace DotRecast.Core
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/// Returns the distance between two points.
|
/// Returns the distance between two points.
|
||||||
/// @param[in] v1 A point. [(x, y, z)]
|
/// @param[in] v1 A point. [(x, y, z)]
|
||||||
/// @param[in] v2 A point. [(x, y, z)]
|
/// @param[in] v2 A point. [(x, y, z)]
|
||||||
|
@ -231,7 +229,6 @@ namespace DotRecast.Core
|
||||||
float dz = v2[2] - v1[2];
|
float dz = v2[2] - v1[2];
|
||||||
return dx * dx + dy * dy + dz * dz;
|
return dx * dx + dy * dy + dz * dz;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/// Derives the square of the scalar length of the vector. (len * len)
|
/// Derives the square of the scalar length of the vector. (len * len)
|
||||||
|
@ -241,7 +238,7 @@ namespace DotRecast.Core
|
||||||
{
|
{
|
||||||
return v[0] * v[0] + v[1] * v[1] + v[2] * v[2];
|
return v[0] * v[0] + v[1] * v[1] + v[2] * v[2];
|
||||||
}
|
}
|
||||||
|
|
||||||
public static float VLenSqr(Vector3f v)
|
public static float VLenSqr(Vector3f v)
|
||||||
{
|
{
|
||||||
return v.x * v.x + v.y * v.y + v.z * v.z;
|
return v.x * v.x + v.y * v.y + v.z * v.z;
|
||||||
|
@ -252,7 +249,7 @@ namespace DotRecast.Core
|
||||||
{
|
{
|
||||||
return (float)Math.Sqrt(v[0] * v[0] + v[1] * v[1] + v[2] * v[2]);
|
return (float)Math.Sqrt(v[0] * v[0] + v[1] * v[1] + v[2] * v[2]);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static float VLen(Vector3f v)
|
public static float VLen(Vector3f v)
|
||||||
{
|
{
|
||||||
return (float)Math.Sqrt(v.x * v.x + v.y * v.y + v.z * v.z);
|
return (float)Math.Sqrt(v.x * v.x + v.y * v.y + v.z * v.z);
|
||||||
|
@ -281,7 +278,7 @@ namespace DotRecast.Core
|
||||||
float dz = v2[2] - v1[2];
|
float dz = v2[2] - v1[2];
|
||||||
return (float)Math.Sqrt(dx * dx + dz * dz);
|
return (float)Math.Sqrt(dx * dx + dz * dz);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static float VDist2D(Vector3f v1, Vector3f v2)
|
public static float VDist2D(Vector3f v1, Vector3f v2)
|
||||||
{
|
{
|
||||||
float dx = v2.x - v1.x;
|
float dx = v2.x - v1.x;
|
||||||
|
@ -296,7 +293,7 @@ namespace DotRecast.Core
|
||||||
float dz = v2[2] - v1[2];
|
float dz = v2[2] - v1[2];
|
||||||
return dx * dx + dz * dz;
|
return dx * dx + dz * dz;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static float VDist2DSqr(Vector3f v1, Vector3f v2)
|
public static float VDist2DSqr(Vector3f v1, Vector3f v2)
|
||||||
{
|
{
|
||||||
float dx = v2.x - v1.x;
|
float dx = v2.x - v1.x;
|
||||||
|
@ -324,7 +321,7 @@ namespace DotRecast.Core
|
||||||
v[2] *= d;
|
v[2] *= d;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void VNormalize(ref Vector3f v)
|
public static void VNormalize(ref Vector3f v)
|
||||||
{
|
{
|
||||||
float d = (float)(1.0f / Math.Sqrt(Sqr(v.x) + Sqr(v.y) + Sqr(v.z)));
|
float d = (float)(1.0f / Math.Sqrt(Sqr(v.x) + Sqr(v.y) + Sqr(v.z)));
|
||||||
|
@ -355,7 +352,7 @@ namespace DotRecast.Core
|
||||||
float d = VDistSqr(p0, p1);
|
float d = VDistSqr(p0, p1);
|
||||||
return d < thresholdSqr;
|
return d < thresholdSqr;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static bool VEqual(Vector3f p0, Vector3f p1, float thresholdSqr)
|
public static bool VEqual(Vector3f p0, Vector3f p1, float thresholdSqr)
|
||||||
{
|
{
|
||||||
float d = VDistSqr(p0, p1);
|
float d = VDistSqr(p0, p1);
|
||||||
|
@ -374,7 +371,7 @@ namespace DotRecast.Core
|
||||||
{
|
{
|
||||||
return u[0] * v[0] + u[2] * v[2];
|
return u[0] * v[0] + u[2] * v[2];
|
||||||
}
|
}
|
||||||
|
|
||||||
public static float VDot2D(Vector3f u, Vector3f v)
|
public static float VDot2D(Vector3f u, Vector3f v)
|
||||||
{
|
{
|
||||||
return u.x * v.x + u.z * v.z;
|
return u.x * v.x + u.z * v.z;
|
||||||
|
@ -397,12 +394,12 @@ namespace DotRecast.Core
|
||||||
{
|
{
|
||||||
return u[2] * v[0] - u[0] * v[2];
|
return u[2] * v[0] - u[0] * v[2];
|
||||||
}
|
}
|
||||||
|
|
||||||
public static float VPerp2D(Vector3f u, Vector3f v)
|
public static float VPerp2D(Vector3f u, Vector3f v)
|
||||||
{
|
{
|
||||||
return u.z * v.x - u.x * v.z;
|
return u.z * v.x - u.x * v.z;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/// @}
|
/// @}
|
||||||
/// @name Computational geometry helper functions.
|
/// @name Computational geometry helper functions.
|
||||||
|
@ -430,7 +427,7 @@ namespace DotRecast.Core
|
||||||
float acz = c[2] - a[2];
|
float acz = c[2] - a[2];
|
||||||
return acx * abz - abx * acz;
|
return acx * abz - abx * acz;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static float TriArea2D(Vector3f a, Vector3f b, Vector3f c)
|
public static float TriArea2D(Vector3f a, Vector3f b, Vector3f c)
|
||||||
{
|
{
|
||||||
float abx = b.x - a.x;
|
float abx = b.x - a.x;
|
||||||
|
@ -439,7 +436,7 @@ namespace DotRecast.Core
|
||||||
float acz = c.z - a.z;
|
float acz = c.z - a.z;
|
||||||
return acx * abz - abx * acz;
|
return acx * abz - abx * acz;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static float TriArea2D(Vector3f a, float[] b, Vector3f c)
|
public static float TriArea2D(Vector3f a, float[] b, Vector3f c)
|
||||||
{
|
{
|
||||||
float abx = b[0] - a.x;
|
float abx = b[0] - a.x;
|
||||||
|
@ -450,7 +447,6 @@ namespace DotRecast.Core
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/// Determines if two axis-aligned bounding boxes overlap.
|
/// Determines if two axis-aligned bounding boxes overlap.
|
||||||
/// @param[in] amin Minimum bounds of box A. [(x, y, z)]
|
/// @param[in] amin Minimum bounds of box A. [(x, y, z)]
|
||||||
/// @param[in] amax Maximum bounds of box A. [(x, y, z)]
|
/// @param[in] amax Maximum bounds of box A. [(x, y, z)]
|
||||||
|
@ -477,12 +473,12 @@ namespace DotRecast.Core
|
||||||
public static bool OverlapBounds(float[] amin, float[] amax, float[] bmin, float[] bmax)
|
public static bool OverlapBounds(float[] amin, float[] amax, float[] bmin, float[] bmax)
|
||||||
{
|
{
|
||||||
bool overlap = true;
|
bool overlap = true;
|
||||||
overlap = (amin[0]> bmax[0] || amax[0] < bmin[0]) ? false : overlap;
|
overlap = (amin[0] > bmax[0] || amax[0] < bmin[0]) ? false : overlap;
|
||||||
overlap = (amin[1] > bmax[1] || amax[1] < bmin[1]) ? false : overlap;
|
overlap = (amin[1] > bmax[1] || amax[1] < bmin[1]) ? false : overlap;
|
||||||
overlap = (amin[2] > bmax[2] || amax[2] < bmin[2]) ? false : overlap;
|
overlap = (amin[2] > bmax[2] || amax[2] < bmin[2]) ? false : overlap;
|
||||||
return overlap;
|
return overlap;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static bool OverlapBounds(Vector3f amin, Vector3f amax, Vector3f bmin, Vector3f bmax)
|
public static bool OverlapBounds(Vector3f amin, Vector3f amax, Vector3f bmin, Vector3f bmax)
|
||||||
{
|
{
|
||||||
bool overlap = true;
|
bool overlap = true;
|
||||||
|
@ -737,7 +733,6 @@ namespace DotRecast.Core
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public static IntersectResult IntersectSegmentPoly2D(Vector3f p0, Vector3f p1, float[] verts, int nverts)
|
public static IntersectResult IntersectSegmentPoly2D(Vector3f p0, Vector3f p1, float[] verts, int nverts)
|
||||||
{
|
{
|
||||||
IntersectResult result = new IntersectResult();
|
IntersectResult result = new IntersectResult();
|
||||||
|
@ -800,7 +795,7 @@ namespace DotRecast.Core
|
||||||
result.intersects = true;
|
result.intersects = true;
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Tuple<float, float> DistancePtSegSqr2D(Vector3f pt, SegmentVert verts, int p, int q)
|
public static Tuple<float, float> DistancePtSegSqr2D(Vector3f pt, SegmentVert verts, int p, int q)
|
||||||
{
|
{
|
||||||
float pqx = verts[q + 0] - verts[p + 0];
|
float pqx = verts[q + 0] - verts[p + 0];
|
||||||
|
@ -865,7 +860,7 @@ namespace DotRecast.Core
|
||||||
{
|
{
|
||||||
return a[0] * b[2] - a[2] * b[0];
|
return a[0] * b[2] - a[2] * b[0];
|
||||||
}
|
}
|
||||||
|
|
||||||
public static float VperpXZ(Vector3f a, Vector3f b)
|
public static float VperpXZ(Vector3f a, Vector3f b)
|
||||||
{
|
{
|
||||||
return a.x * b.z - a.z * b.x;
|
return a.x * b.z - a.z * b.x;
|
||||||
|
@ -905,7 +900,7 @@ namespace DotRecast.Core
|
||||||
{
|
{
|
||||||
return float.IsFinite(v[0]) && float.IsFinite(v[1]) && float.IsFinite(v[2]);
|
return float.IsFinite(v[0]) && float.IsFinite(v[1]) && float.IsFinite(v[2]);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static bool VIsFinite(Vector3f v)
|
public static bool VIsFinite(Vector3f v)
|
||||||
{
|
{
|
||||||
return float.IsFinite(v.x) && float.IsFinite(v.y) && float.IsFinite(v.z);
|
return float.IsFinite(v.x) && float.IsFinite(v.y) && float.IsFinite(v.z);
|
||||||
|
@ -923,4 +918,4 @@ namespace DotRecast.Core
|
||||||
return float.IsFinite(v.x) && float.IsFinite(v.z);
|
return float.IsFinite(v.x) && float.IsFinite(v.z);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -126,5 +126,6 @@ namespace DotRecast.Core
|
||||||
{
|
{
|
||||||
return !left.Equals(right);
|
return !left.Equals(right);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
Loading…
Reference in New Issue