mirror of
https://github.com/NGSolve/netgen.git
synced 2024-12-26 05:50:32 +05:00
bug fix PointContainedIn2DElement
This commit is contained in:
parent
a2f434ebbf
commit
f65651ce0e
@ -4320,12 +4320,19 @@ namespace netgen
|
||||
double dxa = d.X()*a.Y()-d.Y()*a.X();
|
||||
double dxp = d.X()*p.Y()-d.Y()*p.X();
|
||||
|
||||
|
||||
double c0,c1,c2; // ,rt;
|
||||
lami[2]=0.;
|
||||
double eps = 1.E-12;
|
||||
|
||||
Vec3d dp13 = p3-p1;
|
||||
Vec3d dp24 = p4-p2;
|
||||
double d1 = dp13.Length2();
|
||||
double d2 = dp24.Length2();
|
||||
|
||||
// if(fabs(d.X()) <= eps && fabs(d.Y())<= eps)
|
||||
if (d.Length2() < sqr(eps))
|
||||
//if (d.Length2() < sqr(eps))
|
||||
if (d.Length2() < sqr(eps)*d1 && d.Length2() < sqr(eps)*d2)
|
||||
{
|
||||
//Solve Linear System
|
||||
|
||||
@ -4341,45 +4348,57 @@ namespace netgen
|
||||
*/
|
||||
}
|
||||
else
|
||||
if(fabs(dxb) <= eps)
|
||||
//if(fabs(dxb) <= eps)
|
||||
if(fabs(dxb) <= eps*fabs(dxc))
|
||||
{
|
||||
lami[1] = (dxp-dxa)/dxc;
|
||||
if(fabs(b.X()-d.X()*lami[1])>=eps)
|
||||
//if(fabs(b.X()-d.X()*lami[1])>=eps)
|
||||
if(fabs(b.X()+d.X()*lami[1])>=fabs(b.Y()+d.Y()*lami[1]))
|
||||
lami[0] = (p.X()-a.X() - c.X()*lami[1])/(b.X()+d.X()*lami[1]);
|
||||
else
|
||||
lami[0] = (p.Y()-a.Y() - c.Y()*lami[1])/(b.Y()+d.Y()*lami[1]);
|
||||
|
||||
}
|
||||
else
|
||||
if(fabs(dxc) <= eps)
|
||||
//if(fabs(dxc) <= eps)
|
||||
if(fabs(dxc) <= eps*fabs(dxb))
|
||||
{
|
||||
lami[0] = (dxp-dxa)/dxb;
|
||||
if(fabs(c.X()-d.X()*lami[0])>=eps)
|
||||
//if(fabs(c.X()-d.X()*lami[0])>=eps)
|
||||
if(fabs(c.X()+d.X()*lami[0])>=fabs(c.Y()+d.Y()*lami[0]))
|
||||
lami[1] = (p.X()-a.X() - b.X()*lami[0])/(c.X()+d.X()*lami[0]);
|
||||
else
|
||||
lami[1] = (p.Y()-a.Y() - b.Y()*lami[0])/(c.Y()+d.Y()*lami[0]);
|
||||
|
||||
}
|
||||
else //Solve quadratic equation
|
||||
{
|
||||
if(fabs(d.X()) >= eps)
|
||||
//if(fabs(d.X()) >= eps)
|
||||
if(fabs(d.X()) >= fabs(d.Y()))
|
||||
{
|
||||
c2 = d.X()*dxc;
|
||||
c1 = d.X()*dxc - c.X()*dxb - d.X()*(dxp-dxa);
|
||||
//c1 = d.X()*dxc - c.X()*dxb - d.X()*(dxp-dxa);
|
||||
c1 = b.X()*dxc - c.X()*dxb - d.X()*(dxp-dxa);
|
||||
c0 = -b.X()*(dxp -dxa) - (a.X()-p.X())*dxb;
|
||||
}
|
||||
else
|
||||
{
|
||||
c2 = d.Y()*dxc;
|
||||
c1 = d.Y()*dxc - c.Y()*dxb - d.Y()*(dxp-dxa);
|
||||
//c1 = d.Y()*dxc - c.Y()*dxb - d.Y()*(dxp-dxa);
|
||||
c1 = b.Y()*dxc - c.Y()*dxb - d.Y()*(dxp-dxa);
|
||||
c0 = -b.Y()*(dxp -dxa) - (a.Y()-p.Y())*dxb;
|
||||
}
|
||||
|
||||
double rt = c1*c1 - 4*c2*c0;
|
||||
|
||||
if (rt < 0.) return false;
|
||||
lami[1] = (-c1 + sqrt(rt))/2/c2;
|
||||
if(lami[1]<=1. && lami[1]>=0.)
|
||||
|
||||
if(lami[1]<=1.+eps && lami[1]>=0.-eps)
|
||||
{
|
||||
lami[0] = (dxp - dxa -dxc*lami[1])/dxb;
|
||||
if(lami[0]<=1. && lami[0]>=0.)
|
||||
|
||||
if(lami[0]<=1.+eps && lami[0]>=0.-eps)
|
||||
return true;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user