update RandomPointInConvexPoly()

This commit is contained in:
ikpil 2024-05-12 00:25:53 +09:00
parent dfbd1b2cae
commit 61e7b7a443
2 changed files with 8 additions and 8 deletions

View File

@ -68,8 +68,8 @@ namespace DotRecast.Detour
float tsum = 0.0f; float tsum = 0.0f;
for (int i = 0; i < m_nav.GetMaxTiles(); i++) for (int i = 0; i < m_nav.GetMaxTiles(); i++)
{ {
DtMeshTile mt = m_nav.GetTile(i); DtMeshTile t = m_nav.GetTile(i);
if (mt == null || mt.data == null || mt.data.header == null) if (t == null || t.data == null || t.data.header == null)
{ {
continue; continue;
} }
@ -80,7 +80,7 @@ namespace DotRecast.Detour
float u = frand.Next(); float u = frand.Next();
if (u * tsum <= area) if (u * tsum <= area)
{ {
tile = mt; tile = t;
} }
} }
@ -146,9 +146,9 @@ namespace DotRecast.Detour
} }
float s = frand.Next(); float s = frand.Next();
float t = frand.Next(); float t0 = frand.Next();
var pt = DtUtils.RandomPointInConvexPoly(verts, poly.vertCount, areas, s, t); DtUtils.RandomPointInConvexPoly(verts, poly.vertCount, areas, s, t0, out var pt);
ClosestPointOnPoly(polyRef, pt, out var closest, out var _); ClosestPointOnPoly(polyRef, pt, out var closest, out var _);
randomRef = polyRef; randomRef = polyRef;
@ -387,7 +387,7 @@ namespace DotRecast.Detour
float t = frand.Next(); float t = frand.Next();
Span<float> areas = stackalloc float[randomPolyVerts.Length / 3]; Span<float> areas = stackalloc float[randomPolyVerts.Length / 3];
RcVec3f pt = DtUtils.RandomPointInConvexPoly(randomPolyVerts, randomPolyVerts.Length / 3, areas, s, t); DtUtils.RandomPointInConvexPoly(randomPolyVerts, randomPolyVerts.Length / 3, areas, s, t, out var pt);
ClosestPointOnPoly(randomPolyRef, pt, out var closest, out var _); ClosestPointOnPoly(randomPolyRef, pt, out var closest, out var _);
randomRef = randomPolyRef; randomRef = randomPolyRef;

View File

@ -165,7 +165,7 @@ namespace DotRecast.Detour
// Returns a random point in a convex polygon. // Returns a random point in a convex polygon.
// Adapted from Graphics Gems article. // Adapted from Graphics Gems article.
public static RcVec3f RandomPointInConvexPoly(Span<float> pts, int npts, Span<float> areas, float s, float t) public static void RandomPointInConvexPoly(Span<float> pts, int npts, Span<float> areas, float s, float t, out RcVec3f @out)
{ {
// Calc triangle araes // Calc triangle araes
float areasum = 0.0f; float areasum = 0.0f;
@ -202,7 +202,7 @@ namespace DotRecast.Detour
int pb = (tri - 1) * 3; int pb = (tri - 1) * 3;
int pc = tri * 3; int pc = tri * 3;
return new RcVec3f() @out = new RcVec3f()
{ {
X = a * pts[pa] + b * pts[pb] + c * pts[pc], X = a * pts[pa] + b * pts[pb] + c * pts[pc],
Y = a * pts[pa + 1] + b * pts[pb + 1] + c * pts[pc + 1], Y = a * pts[pa + 1] + b * pts[pb + 1] + c * pts[pc + 1],