RcMath VNormalize -> Vector3f.Normalize

This commit is contained in:
ikpil 2023-05-15 23:25:50 +09:00
parent 5928befe25
commit 1e76fd0884
11 changed files with 25 additions and 25 deletions

View File

@ -304,17 +304,6 @@ namespace DotRecast.Core
} }
} }
public static void VNormalize(ref Vector3f v)
{
float d = (float)(1.0f / Math.Sqrt(Sqr(v.x) + Sqr(v.y) + Sqr(v.z)));
if (d != 0)
{
v.x *= d;
v.y *= d;
v.z *= d;
}
}
/// Performs a 'sloppy' colocation check of the specified points. /// Performs a 'sloppy' colocation check of the specified points.
/// @param[in] p0 A point. [(x, y, z)] /// @param[in] p0 A point. [(x, y, z)]

View File

@ -172,5 +172,17 @@ namespace DotRecast.Core
(v1.x * v2.y) - (v1.y * v2.x) (v1.x * v2.y) - (v1.y * v2.x)
); );
} }
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public void Normalize()
{
float d = (float)(1.0f / Math.Sqrt(RcMath.Sqr(x) + RcMath.Sqr(y) + RcMath.Sqr(z)));
if (d != 0)
{
x *= d;
y *= d;
z *= d;
}
}
} }
} }

View File

@ -182,8 +182,7 @@ namespace DotRecast.Detour.Crowd
dir.x = dir0.x - dir1.x * len0 * 0.5f; dir.x = dir0.x - dir1.x * len0 * 0.5f;
dir.y = 0; dir.y = 0;
dir.z = dir0.z - dir1.z * len0 * 0.5f; dir.z = dir0.z - dir1.z * len0 * 0.5f;
dir.Normalize();
VNormalize(ref dir);
} }
return dir; return dir;
@ -196,7 +195,7 @@ namespace DotRecast.Detour.Crowd
{ {
dir = corners[0].GetPos().Subtract(npos); dir = corners[0].GetPos().Subtract(npos);
dir.y = 0; dir.y = 0;
VNormalize(ref dir); dir.Normalize();
} }
return dir; return dir;

View File

@ -128,7 +128,7 @@ namespace DotRecast.Detour.Crowd
Vector3f orig = new Vector3f(); Vector3f orig = new Vector3f();
Vector3f dv = new Vector3f(); Vector3f dv = new Vector3f();
cir.dp = pb.Subtract(pa); cir.dp = pb.Subtract(pa);
VNormalize(ref cir.dp); cir.dp.Normalize();
dv = cir.dvel.Subtract(dvel); dv = cir.dvel.Subtract(dvel);
float a = TriArea2D(orig, cir.dp, dv); float a = TriArea2D(orig, cir.dp, dv);

View File

@ -18,9 +18,9 @@ namespace DotRecast.Detour.Extras.Jumplink
{ {
this.trajectory = trajectory; this.trajectory = trajectory;
ax = edge.sq.Subtract(edge.sp); ax = edge.sq.Subtract(edge.sp);
VNormalize(ref ax); ax.Normalize();
VSet(ref az, ax.z, 0, -ax.x); VSet(ref az, ax.z, 0, -ax.x);
VNormalize(ref az); az.Normalize();
VSet(ref ay, 0, 1, 0); VSet(ref ay, 0, 1, 0);
} }
} }

View File

@ -848,7 +848,7 @@ namespace DotRecast.Detour
hitNormal.x = tangent.z; hitNormal.x = tangent.z;
hitNormal.y = 0; hitNormal.y = 0;
hitNormal.z = -tangent.x; hitNormal.z = -tangent.x;
VNormalize(ref hitNormal); hitNormal.Normalize();
} }
return Results.Success(new FindDistanceToWallResult((float)Math.Sqrt(radiusSqr), hitPos, hitNormal)); return Results.Success(new FindDistanceToWallResult((float)Math.Sqrt(radiusSqr), hitPos, hitNormal));

View File

@ -2400,7 +2400,7 @@ namespace DotRecast.Detour
hit.hitNormal.x = dz; hit.hitNormal.x = dz;
hit.hitNormal.y = 0; hit.hitNormal.y = 0;
hit.hitNormal.z = -dx; hit.hitNormal.z = -dx;
VNormalize(ref hit.hitNormal); hit.hitNormal.Normalize();
return Results.Success(hit); return Results.Success(hit);
} }
@ -3372,7 +3372,7 @@ namespace DotRecast.Detour
hitNormal.x = tangent.z; hitNormal.x = tangent.z;
hitNormal.y = 0; hitNormal.y = 0;
hitNormal.z = -tangent.x; hitNormal.z = -tangent.x;
VNormalize(ref hitNormal); hitNormal.Normalize();
} }
return Results.Success(new FindDistanceToWallResult((float)Math.Sqrt(radiusSqr), hitPos, hitNormal)); return Results.Success(new FindDistanceToWallResult((float)Math.Sqrt(radiusSqr), hitPos, hitNormal));

View File

@ -314,7 +314,7 @@ public class CrowdTool : Tool
{ {
Vector3f vel = tgt.Subtract(pos); Vector3f vel = tgt.Subtract(pos);
vel.y = 0.0f; vel.y = 0.0f;
VNormalize(ref vel); vel.Normalize();
return VScale(vel, speed); return VScale(vel, speed);
} }

View File

@ -201,7 +201,7 @@ public class DynamicUpdateTool : Tool
0.01f + (float)random.NextDouble(), 0.01f + (float)random.NextDouble(),
(1f - 2 * (float)random.NextDouble()) (1f - 2 * (float)random.NextDouble())
); );
VNormalize(ref a); a.Normalize();
float len = 1f + (float)random.NextDouble() * 20f; float len = 1f + (float)random.NextDouble() * 20f;
a.x *= len; a.x *= len;
a.y *= len; a.y *= len;
@ -247,7 +247,7 @@ public class DynamicUpdateTool : Tool
Vector3f baseCenter = Vector3f.Of(p.x, p.y + 3, p.z); Vector3f baseCenter = Vector3f.Of(p.x, p.y + 3, p.z);
Vector3f baseUp = Vector3f.Of(0, 1, 0); Vector3f baseUp = Vector3f.Of(0, 1, 0);
Vector3f forward = Vector3f.Of((1f - 2 * (float)random.NextDouble()), 0, (1f - 2 * (float)random.NextDouble())); Vector3f forward = Vector3f.Of((1f - 2 * (float)random.NextDouble()), 0, (1f - 2 * (float)random.NextDouble()));
VNormalize(ref forward); forward.Normalize();
Vector3f side = Vector3f.Cross(forward, baseUp); Vector3f side = Vector3f.Cross(forward, baseUp);
BoxCollider @base = new BoxCollider(baseCenter, Detour.Dynamic.Colliders.BoxCollider.GetHalfEdges(baseUp, forward, baseExtent), BoxCollider @base = new BoxCollider(baseCenter, Detour.Dynamic.Colliders.BoxCollider.GetHalfEdges(baseUp, forward, baseExtent),
SampleAreaModifications.SAMPLE_POLYAREA_TYPE_ROAD, dynaMesh.config.walkableClimb); SampleAreaModifications.SAMPLE_POLYAREA_TYPE_ROAD, dynaMesh.config.walkableClimb);

View File

@ -858,7 +858,7 @@ public class TestNavmeshTool : Tool
Vector3f delta = s3.Subtract(s.vmin); Vector3f delta = s3.Subtract(s.vmin);
Vector3f p0 = VMad(s.vmin, delta, 0.5f); Vector3f p0 = VMad(s.vmin, delta, 0.5f);
Vector3f norm = Vector3f.Of(delta.z, 0, -delta.x); Vector3f norm = Vector3f.Of(delta.z, 0, -delta.x);
VNormalize(ref norm); norm.Normalize();
Vector3f p1 = VMad(p0, norm, agentRadius * 0.5f); Vector3f p1 = VMad(p0, norm, agentRadius * 0.5f);
// Skip backfacing segments. // Skip backfacing segments.
if (wallSegments.GetSegmentRef(j) != 0) if (wallSegments.GetSegmentRef(j) != 0)

View File

@ -155,7 +155,7 @@ public class AbstractCrowdTest
{ {
Vector3f vel = tgt.Subtract(pos); Vector3f vel = tgt.Subtract(pos);
vel.y = 0.0f; vel.y = 0.0f;
VNormalize(ref vel); vel.Normalize();
vel = VScale(vel, speed); vel = VScale(vel, speed);
return vel; return vel;
} }