ENH: boundBox: Change distanceFromBoxSqr to nearest()

Returns the nearest point instead of a distance
This commit is contained in:
laurence
2012-12-12 11:07:52 +00:00
parent ec634a897c
commit 44d1ed3eae
3 changed files with 18 additions and 20 deletions

View File

@ -791,15 +791,19 @@ Foam::DistributedDelaunayMesh<Triangulation>::rangeInsertReferredWithInfo
label count = 0;
for (PointIterator it = begin; it != end; ++it)
{
const scalar distFromBbSqr = bb.distanceFromBoxSqr
(
topoint(it->point())
);
const pointFromPoint samplePoint = topoint(it->point());
pointsBbDistSqr.append
(
std::make_pair(distFromBbSqr, count++)
);
if (!bb.contains(samplePoint))
{
const Foam::point nearestPoint = bb.nearest(samplePoint);
const scalar distFromBbSqr = magSqr(nearestPoint - samplePoint);
pointsBbDistSqr.append
(
std::make_pair(distFromBbSqr, count++)
);
}
}
std::random_shuffle(pointsBbDistSqr.begin(), pointsBbDistSqr.end());

View File

@ -300,21 +300,14 @@ bool Foam::boundBox::containsAny
}
Foam::scalar Foam::boundBox::distanceFromBoxSqr(const point& pt) const
Foam::point Foam::boundBox::nearest(const point& pt) const
{
if (contains(pt))
{
return 0;
}
// Clip the point to the range of the bounding box
const scalar surfPtx = Foam::max(Foam::min(pt.x(), max_.x()), min_.x());
const scalar surfPty = Foam::max(Foam::min(pt.y(), max_.y()), min_.y());
const scalar surfPtz = Foam::max(Foam::min(pt.z(), max_.z()), min_.z());
const point surfacePt(surfPtx, surfPty, surfPtz);
return magSqr(pt - surfacePt);
return point(surfPtx, surfPty, surfPtz);
}

View File

@ -225,9 +225,10 @@ public:
const FixedList<label, Size>& indices
) const;
//- Distance of a point from the box.
// Return 0 if inside.
scalar distanceFromBoxSqr(const point&) const;
//- Return the nearest point on the boundBox to the supplied point.
// If point is inside the boundBox then the point is returned
// unchanged.
point nearest(const point&) const;
// Friend Operators