Fix findRandomPointAroundCircle in Detour lib to return points inside circle

This commit is contained in:
Wojtek Figat
2021-03-01 14:37:19 +01:00
parent 99bc3289e8
commit e218cc417f
3 changed files with 17 additions and 5 deletions

View File

@@ -183,6 +183,13 @@ float dtDistancePtSegSqr2D(const float* pt, const float* p, const float* q, floa
return dx*dx + dz*dz;
}
float dtDistancePtPtSqr2D(const float* pt, const float* p)
{
float dx = pt[0] - p[0];
float dz = pt[2] - p[2];
return dx*dx + dz*dz;
}
void dtCalcPolyCenter(float* tc, const unsigned short* idx, int nidx, const float* verts)
{
tc[0] = 0.0f;

View File

@@ -417,6 +417,8 @@ bool dtDistancePtPolyEdgesSqr(const float* pt, const float* verts, const int nve
float dtDistancePtSegSqr2D(const float* pt, const float* p, const float* q, float& t);
float dtDistancePtPtSqr2D(const float* pt, const float* p);
/// Derives the centroid of a convex polygon.
/// @param[out] tc The centroid of the polgyon. [(x, y, z)]
/// @param[in] idx The polygon indices. [(vertIndex) * @p nidx]

View File

@@ -482,12 +482,15 @@ dtStatus dtNavMeshQuery::findRandomPointAroundCircle(dtPolyRef startRef, const f
dtVcopy(&verts[j*3],v);
}
const float s = frand();
const float t = frand();
float pt[3];
dtRandomPointInConvexPoly(verts, randomPoly->vertCount, areas, s, t, pt);
do
{
const float s = frand();
const float t = frand();
dtRandomPointInConvexPoly(verts, randomPoly->vertCount, areas, s, t, pt);
}
while (dtDistancePtPtSqr2D(centerPos, pt) > radiusSqr);
float h = 0.0f;
dtStatus stat = getPolyHeight(randomPolyRef, pt, &h);
if (dtStatusFailed(status))