51 scalar denom = asqr*bsqr - adotb*adotb;
53 if (
mag(denom) < VSMALL)
56 <<
"Invalid arc definition - are the points co-linear? Denom ="
61 scalar fact = 0.5*(bsqr - adotb)/denom;
63 point centre = 0.5*a + fact*((a ^
b) ^ a);
77 if (((r1 ^ r2) & (r1 ^ r3)) < 0.0)
79 angle_ = 360.0 - angle_;
88 if (
mag(tempAxis)/(
mag(r1)*
mag(r3)) < 0.001)
101 return cylindricalCS(
"arcEdgeCS", centre, tempAxis, r1);
107 Foam::arcEdge::arcEdge
115 curvedEdge(points, start, end),
116 p1_(points_[start_]),
125 curvedEdge(points, is),
126 p1_(points_[start_]),
137 if (lambda < 0 || lambda > 1)
139 FatalErrorIn(
"arcEdge::position(const scalar lambda) const")
140 <<
"Parameter out of range, lambda = " << lambda
148 else if (lambda > 1 - SMALL)
154 return cs_.globalPosition(
vector(radius_, lambda*angle_, 0.0));