Commit 32a6c1d9 authored by Mark Olesen's avatar Mark Olesen
Browse files

ENH: relocate randomPointInPlane as plane::somePointInPlane

- makes more sense to bundle it with plane.
parent b1be223a
......@@ -87,73 +87,6 @@ scalar calcVertexNormalWeight
}
point randomPointInPlane(const plane& p)
{
// Perturb base point
const point& refPt = p.refPoint();
// ax + by + cz + d = 0
const FixedList<scalar, 4>& planeCoeffs = p.planeCoeffs();
const scalar perturbX = refPt.x() + 1e-3;
const scalar perturbY = refPt.y() + 1e-3;
const scalar perturbZ = refPt.z() + 1e-3;
if (mag(planeCoeffs[2]) < SMALL)
{
if (mag(planeCoeffs[1]) < SMALL)
{
const scalar x =
-1.0
*(
planeCoeffs[3]
+ planeCoeffs[1]*perturbY
+ planeCoeffs[2]*perturbZ
)/planeCoeffs[0];
return point
(
x,
perturbY,
perturbZ
);
}
const scalar y =
-1.0
*(
planeCoeffs[3]
+ planeCoeffs[0]*perturbX
+ planeCoeffs[2]*perturbZ
)/planeCoeffs[1];
return point
(
perturbX,
y,
perturbZ
);
}
else
{
const scalar z =
-1.0
*(
planeCoeffs[3]
+ planeCoeffs[0]*perturbX
+ planeCoeffs[1]*perturbY
)/planeCoeffs[2];
return point
(
perturbX,
perturbY,
z
);
}
}
triadField calcVertexCoordSys
(
const triSurface& surf,
......@@ -178,8 +111,8 @@ triadField calcVertexCoordSys
plane p(pt, normal);
// Pick random point in plane
vector dir1 = pt - randomPointInPlane(p);
// Pick arbitrary point in plane
vector dir1 = pt - p.somePointInPlane(1e-3);
dir1 /= mag(dir1);
vector dir2 = dir1 ^ normal;
......
......@@ -3,7 +3,7 @@
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation
\\/ M anipulation | Copyright (C) 2016 OpenCFD Ltd.
\\/ M anipulation | Copyright (C) 2016-2017 OpenCFD Ltd.
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
......@@ -424,6 +424,34 @@ Foam::point Foam::plane::planePlaneIntersect
}
Foam::point Foam::plane::somePointInPlane(const scalar dist) const
{
// ax + by + cz + d = 0
const FixedList<scalar, 4> coeff(planeCoeffs());
// Perturb the base-point
point p = refPoint() + point::uniform(dist);
if (Foam::mag(coeff[2]) < SMALL)
{
if (Foam::mag(coeff[1]) < SMALL)
{
p[0] = -1.0*(coeff[1]*p[1] + coeff[2]*p[2] + coeff[3])/coeff[0];
}
else
{
p[1] = -1.0*(coeff[0]*p[0] + coeff[2]*p[2] + coeff[3])/coeff[1];
}
}
else
{
p[2] = -1.0*(coeff[0]*p[0] + coeff[1]*p[1] + coeff[3])/coeff[2];
}
return p;
}
Foam::plane::side Foam::plane::sideOfPlane(const point& p) const
{
const scalar angle((p - point_) & normal_);
......@@ -464,14 +492,7 @@ void Foam::plane::writeDict(Ostream& os) const
bool Foam::operator==(const plane& a, const plane& b)
{
if (a.point_ == b.point_ && a.normal_ == b.normal_)
{
return true;
}
else
{
return false;
}
return (a.point_ == b.point_ && a.normal_ == b.normal_);
}
bool Foam::operator!=(const plane& a, const plane& b)
......@@ -482,9 +503,9 @@ bool Foam::operator!=(const plane& a, const plane& b)
// * * * * * * * * * * * * * * * Friend Functions * * * * * * * * * * * * * //
Foam::Ostream& Foam::operator<<(Ostream& os, const plane& a)
Foam::Ostream& Foam::operator<<(Ostream& os, const plane& pln)
{
os << a.normal_ << token::SPACE << a.point_;
os << pln.normal_ << token::SPACE << pln.point_;
return os;
}
......
......@@ -3,7 +3,7 @@
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation
\\/ M anipulation |
\\/ M anipulation | Copyright (C) 2017 OpenCFD Ltd.
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
......@@ -25,7 +25,7 @@ Class
Foam::plane
Description
Geometric class that creates a 2D plane and can return the intersection
Geometric class that creates a 3D plane and can return the intersection
point between a line and the plane.
SourceFiles
......@@ -49,13 +49,13 @@ namespace Foam
// Forward declaration of friend functions and operators
class plane;
bool operator==(const plane&, const plane&);
bool operator!=(const plane&, const plane&);
Ostream& operator<<(Ostream&, const plane&);
bool operator==(const plane& a, const plane& b);
bool operator!=(const plane& a, const plane& b);
Ostream& operator<<(Ostream& os, const plane& pln);
/*---------------------------------------------------------------------------*\
Class plane Declaration
Class plane Declaration
\*---------------------------------------------------------------------------*/
class plane
......@@ -160,7 +160,7 @@ public:
//- Return plane normal
const vector& normal() const;
//- Return or return plane base point
//- Return plane base point
const point& refPoint() const;
//- Return coefficients for the
......@@ -196,7 +196,15 @@ public:
ray planeIntersect(const plane&) const;
//- Return the cutting point between this plane and two other planes
point planePlaneIntersect(const plane&, const plane&) const;
point planePlaneIntersect
(
const plane& plane2,
const plane& plane3
)
const;
//- Return a point somewhere on the plane, a distance from the base
point somePointInPlane(const scalar dist = 1e-3) const;
//- Return the side of the plane that the point is on.
// If the point is on the plane, then returns NORMAL.
......@@ -206,19 +214,20 @@ public:
point mirror(const point& p) const;
//- Write to dictionary
void writeDict(Ostream&) const;
void writeDict(Ostream& os) const;
// friend Operators
friend bool operator==(const plane&, const plane&);
friend bool operator!=(const plane&, const plane&);
friend bool operator==(const plane& a, const plane& b);
friend bool operator!=(const plane& a, const plane& b);
// IOstream Operators
//- Write plane properties
friend Ostream& operator<<(Ostream&, const plane&);
friend Ostream& operator<<(Ostream& os, const plane& pln);
};
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment