1894 lines
58 KiB
C#
1894 lines
58 KiB
C#
using System;
|
|
using TriangleNet.Geometry;
|
|
using TriangleNet.Tools;
|
|
|
|
namespace TriangleNet
|
|
{
|
|
public class RobustPredicates : IPredicates
|
|
{
|
|
private static readonly object creationLock;
|
|
|
|
private static RobustPredicates _default;
|
|
|
|
private static double epsilon;
|
|
|
|
private static double splitter;
|
|
|
|
private static double resulterrbound;
|
|
|
|
private static double ccwerrboundA;
|
|
|
|
private static double ccwerrboundB;
|
|
|
|
private static double ccwerrboundC;
|
|
|
|
private static double iccerrboundA;
|
|
|
|
private static double iccerrboundB;
|
|
|
|
private static double iccerrboundC;
|
|
|
|
private double[] fin1;
|
|
|
|
private double[] fin2;
|
|
|
|
private double[] abdet;
|
|
|
|
private double[] axbc;
|
|
|
|
private double[] axxbc;
|
|
|
|
private double[] aybc;
|
|
|
|
private double[] ayybc;
|
|
|
|
private double[] adet;
|
|
|
|
private double[] bxca;
|
|
|
|
private double[] bxxca;
|
|
|
|
private double[] byca;
|
|
|
|
private double[] byyca;
|
|
|
|
private double[] bdet;
|
|
|
|
private double[] cxab;
|
|
|
|
private double[] cxxab;
|
|
|
|
private double[] cyab;
|
|
|
|
private double[] cyyab;
|
|
|
|
private double[] cdet;
|
|
|
|
private double[] temp8;
|
|
|
|
private double[] temp16a;
|
|
|
|
private double[] temp16b;
|
|
|
|
private double[] temp16c;
|
|
|
|
private double[] temp32a;
|
|
|
|
private double[] temp32b;
|
|
|
|
private double[] temp48;
|
|
|
|
private double[] temp64;
|
|
|
|
public static RobustPredicates Default
|
|
{
|
|
get
|
|
{
|
|
if (_default == null)
|
|
{
|
|
lock (creationLock)
|
|
{
|
|
if (_default == null)
|
|
{
|
|
_default = new RobustPredicates();
|
|
}
|
|
}
|
|
}
|
|
return _default;
|
|
}
|
|
}
|
|
|
|
static RobustPredicates()
|
|
{
|
|
creationLock = new object();
|
|
bool flag = true;
|
|
double num = 0.5;
|
|
epsilon = 1.0;
|
|
splitter = 1.0;
|
|
double num2 = 1.0;
|
|
double num3;
|
|
do
|
|
{
|
|
num3 = num2;
|
|
epsilon *= num;
|
|
if (flag)
|
|
{
|
|
splitter *= 2.0;
|
|
}
|
|
flag = !flag;
|
|
num2 = 1.0 + epsilon;
|
|
}
|
|
while (num2 != 1.0 && num2 != num3);
|
|
splitter += 1.0;
|
|
resulterrbound = (3.0 + 8.0 * epsilon) * epsilon;
|
|
ccwerrboundA = (3.0 + 16.0 * epsilon) * epsilon;
|
|
ccwerrboundB = (2.0 + 12.0 * epsilon) * epsilon;
|
|
ccwerrboundC = (9.0 + 64.0 * epsilon) * epsilon * epsilon;
|
|
iccerrboundA = (10.0 + 96.0 * epsilon) * epsilon;
|
|
iccerrboundB = (4.0 + 48.0 * epsilon) * epsilon;
|
|
iccerrboundC = (44.0 + 576.0 * epsilon) * epsilon * epsilon;
|
|
}
|
|
|
|
public RobustPredicates()
|
|
{
|
|
AllocateWorkspace();
|
|
}
|
|
|
|
public double CounterClockwise(Point pa, Point pb, Point pc)
|
|
{
|
|
Statistic.CounterClockwiseCount++;
|
|
double num = (pa.x - pc.x) * (pb.y - pc.y);
|
|
double num2 = (pa.y - pc.y) * (pb.x - pc.x);
|
|
double num3 = num - num2;
|
|
if (Behavior.NoExact)
|
|
{
|
|
return num3;
|
|
}
|
|
double num4;
|
|
if (num > 0.0)
|
|
{
|
|
if (num2 <= 0.0)
|
|
{
|
|
return num3;
|
|
}
|
|
num4 = num + num2;
|
|
}
|
|
else
|
|
{
|
|
if (!(num < 0.0))
|
|
{
|
|
return num3;
|
|
}
|
|
if (num2 >= 0.0)
|
|
{
|
|
return num3;
|
|
}
|
|
num4 = 0.0 - num - num2;
|
|
}
|
|
double num5 = ccwerrboundA * num4;
|
|
if (num3 >= num5 || 0.0 - num3 >= num5)
|
|
{
|
|
return num3;
|
|
}
|
|
Statistic.CounterClockwiseAdaptCount++;
|
|
return CounterClockwiseAdapt(pa, pb, pc, num4);
|
|
}
|
|
|
|
public double InCircle(Point pa, Point pb, Point pc, Point pd)
|
|
{
|
|
Statistic.InCircleCount++;
|
|
double num = pa.x - pd.x;
|
|
double num2 = pb.x - pd.x;
|
|
double num3 = pc.x - pd.x;
|
|
double num4 = pa.y - pd.y;
|
|
double num5 = pb.y - pd.y;
|
|
double num6 = pc.y - pd.y;
|
|
double num7 = num2 * num6;
|
|
double num8 = num3 * num5;
|
|
double num9 = num * num + num4 * num4;
|
|
double num10 = num3 * num4;
|
|
double num11 = num * num6;
|
|
double num12 = num2 * num2 + num5 * num5;
|
|
double num13 = num * num5;
|
|
double num14 = num2 * num4;
|
|
double num15 = num3 * num3 + num6 * num6;
|
|
double num16 = num9 * (num7 - num8) + num12 * (num10 - num11) + num15 * (num13 - num14);
|
|
if (Behavior.NoExact)
|
|
{
|
|
return num16;
|
|
}
|
|
double num17 = (Math.Abs(num7) + Math.Abs(num8)) * num9 + (Math.Abs(num10) + Math.Abs(num11)) * num12 + (Math.Abs(num13) + Math.Abs(num14)) * num15;
|
|
double num18 = iccerrboundA * num17;
|
|
if (num16 > num18 || 0.0 - num16 > num18)
|
|
{
|
|
return num16;
|
|
}
|
|
Statistic.InCircleAdaptCount++;
|
|
return InCircleAdapt(pa, pb, pc, pd, num17);
|
|
}
|
|
|
|
public double NonRegular(Point pa, Point pb, Point pc, Point pd)
|
|
{
|
|
return InCircle(pa, pb, pc, pd);
|
|
}
|
|
|
|
public Point FindCircumcenter(Point org, Point dest, Point apex, ref double xi, ref double eta, double offconstant)
|
|
{
|
|
Statistic.CircumcenterCount++;
|
|
double num = dest.x - org.x;
|
|
double num2 = dest.y - org.y;
|
|
double num3 = apex.x - org.x;
|
|
double num4 = apex.y - org.y;
|
|
double num5 = num * num + num2 * num2;
|
|
double num6 = num3 * num3 + num4 * num4;
|
|
double num7 = (dest.x - apex.x) * (dest.x - apex.x) + (dest.y - apex.y) * (dest.y - apex.y);
|
|
double num8;
|
|
if (Behavior.NoExact)
|
|
{
|
|
num8 = 0.5 / (num * num4 - num3 * num2);
|
|
}
|
|
else
|
|
{
|
|
num8 = 0.5 / CounterClockwise(dest, apex, org);
|
|
Statistic.CounterClockwiseCount--;
|
|
}
|
|
double num9 = (num4 * num5 - num2 * num6) * num8;
|
|
double num10 = (num * num6 - num3 * num5) * num8;
|
|
if (num5 < num6 && num5 < num7)
|
|
{
|
|
if (offconstant > 0.0)
|
|
{
|
|
double num11 = 0.5 * num - offconstant * num2;
|
|
double num12 = 0.5 * num2 + offconstant * num;
|
|
if (num11 * num11 + num12 * num12 < num9 * num9 + num10 * num10)
|
|
{
|
|
num9 = num11;
|
|
num10 = num12;
|
|
}
|
|
}
|
|
}
|
|
else if (num6 < num7)
|
|
{
|
|
if (offconstant > 0.0)
|
|
{
|
|
double num11 = 0.5 * num3 + offconstant * num4;
|
|
double num12 = 0.5 * num4 - offconstant * num3;
|
|
if (num11 * num11 + num12 * num12 < num9 * num9 + num10 * num10)
|
|
{
|
|
num9 = num11;
|
|
num10 = num12;
|
|
}
|
|
}
|
|
}
|
|
else if (offconstant > 0.0)
|
|
{
|
|
double num11 = 0.5 * (apex.x - dest.x) - offconstant * (apex.y - dest.y);
|
|
double num12 = 0.5 * (apex.y - dest.y) + offconstant * (apex.x - dest.x);
|
|
if (num11 * num11 + num12 * num12 < (num9 - num) * (num9 - num) + (num10 - num2) * (num10 - num2))
|
|
{
|
|
num9 = num + num11;
|
|
num10 = num2 + num12;
|
|
}
|
|
}
|
|
xi = (num4 * num9 - num3 * num10) * (2.0 * num8);
|
|
eta = (num * num10 - num2 * num9) * (2.0 * num8);
|
|
return new Point(org.x + num9, org.y + num10);
|
|
}
|
|
|
|
public Point FindCircumcenter(Point org, Point dest, Point apex, ref double xi, ref double eta)
|
|
{
|
|
Statistic.CircumcenterCount++;
|
|
double num = dest.x - org.x;
|
|
double num2 = dest.y - org.y;
|
|
double num3 = apex.x - org.x;
|
|
double num4 = apex.y - org.y;
|
|
double num5 = num * num + num2 * num2;
|
|
double num6 = num3 * num3 + num4 * num4;
|
|
double num7;
|
|
if (Behavior.NoExact)
|
|
{
|
|
num7 = 0.5 / (num * num4 - num3 * num2);
|
|
}
|
|
else
|
|
{
|
|
num7 = 0.5 / CounterClockwise(dest, apex, org);
|
|
Statistic.CounterClockwiseCount--;
|
|
}
|
|
double num8 = (num4 * num5 - num2 * num6) * num7;
|
|
double num9 = (num * num6 - num3 * num5) * num7;
|
|
xi = (num4 * num8 - num3 * num9) * (2.0 * num7);
|
|
eta = (num * num9 - num2 * num8) * (2.0 * num7);
|
|
return new Point(org.x + num8, org.y + num9);
|
|
}
|
|
|
|
private int FastExpansionSumZeroElim(int elen, double[] e, int flen, double[] f, double[] h)
|
|
{
|
|
double num = e[0];
|
|
double num2 = f[0];
|
|
int num4;
|
|
int num3 = (num4 = 0);
|
|
double num5;
|
|
if (num2 > num == num2 > 0.0 - num)
|
|
{
|
|
num5 = num;
|
|
num = e[++num3];
|
|
}
|
|
else
|
|
{
|
|
num5 = num2;
|
|
num2 = f[++num4];
|
|
}
|
|
int num6 = 0;
|
|
if (num3 < elen && num4 < flen)
|
|
{
|
|
double num7;
|
|
double num9;
|
|
if (num2 > num == num2 > 0.0 - num)
|
|
{
|
|
num7 = num + num5;
|
|
double num8 = num7 - num;
|
|
num9 = num5 - num8;
|
|
num = e[++num3];
|
|
}
|
|
else
|
|
{
|
|
num7 = num2 + num5;
|
|
double num8 = num7 - num2;
|
|
num9 = num5 - num8;
|
|
num2 = f[++num4];
|
|
}
|
|
num5 = num7;
|
|
if (num9 != 0.0)
|
|
{
|
|
h[num6++] = num9;
|
|
}
|
|
while (num3 < elen && num4 < flen)
|
|
{
|
|
if (num2 > num == num2 > 0.0 - num)
|
|
{
|
|
num7 = num5 + num;
|
|
double num8 = num7 - num5;
|
|
double num10 = num7 - num8;
|
|
double num11 = num - num8;
|
|
num9 = num5 - num10 + num11;
|
|
num = e[++num3];
|
|
}
|
|
else
|
|
{
|
|
num7 = num5 + num2;
|
|
double num8 = num7 - num5;
|
|
double num10 = num7 - num8;
|
|
double num11 = num2 - num8;
|
|
num9 = num5 - num10 + num11;
|
|
num2 = f[++num4];
|
|
}
|
|
num5 = num7;
|
|
if (num9 != 0.0)
|
|
{
|
|
h[num6++] = num9;
|
|
}
|
|
}
|
|
}
|
|
while (num3 < elen)
|
|
{
|
|
double num7 = num5 + num;
|
|
double num8 = num7 - num5;
|
|
double num10 = num7 - num8;
|
|
double num11 = num - num8;
|
|
double num9 = num5 - num10 + num11;
|
|
num = e[++num3];
|
|
num5 = num7;
|
|
if (num9 != 0.0)
|
|
{
|
|
h[num6++] = num9;
|
|
}
|
|
}
|
|
while (num4 < flen)
|
|
{
|
|
double num7 = num5 + num2;
|
|
double num8 = num7 - num5;
|
|
double num10 = num7 - num8;
|
|
double num11 = num2 - num8;
|
|
double num9 = num5 - num10 + num11;
|
|
num2 = f[++num4];
|
|
num5 = num7;
|
|
if (num9 != 0.0)
|
|
{
|
|
h[num6++] = num9;
|
|
}
|
|
}
|
|
if (num5 != 0.0 || num6 == 0)
|
|
{
|
|
h[num6++] = num5;
|
|
}
|
|
return num6;
|
|
}
|
|
|
|
private int ScaleExpansionZeroElim(int elen, double[] e, double b, double[] h)
|
|
{
|
|
double num = splitter * b;
|
|
double num2 = num - b;
|
|
double num3 = num - num2;
|
|
double num4 = b - num3;
|
|
double num5 = e[0] * b;
|
|
double num6 = splitter * e[0];
|
|
num2 = num6 - e[0];
|
|
double num7 = num6 - num2;
|
|
double num8 = e[0] - num7;
|
|
double num9 = num5 - num7 * num3 - num8 * num3 - num7 * num4;
|
|
double num10 = num8 * num4 - num9;
|
|
int num11 = 0;
|
|
if (num10 != 0.0)
|
|
{
|
|
h[num11++] = num10;
|
|
}
|
|
for (int i = 1; i < elen; i++)
|
|
{
|
|
double num12 = e[i];
|
|
double num13 = num12 * b;
|
|
double num14 = splitter * num12;
|
|
num2 = num14 - num12;
|
|
num7 = num14 - num2;
|
|
num8 = num12 - num7;
|
|
num9 = num13 - num7 * num3 - num8 * num3 - num7 * num4;
|
|
double num15 = num8 * num4 - num9;
|
|
double num16 = num5 + num15;
|
|
double num17 = num16 - num5;
|
|
double num18 = num16 - num17;
|
|
double num19 = num15 - num17;
|
|
num10 = num5 - num18 + num19;
|
|
if (num10 != 0.0)
|
|
{
|
|
h[num11++] = num10;
|
|
}
|
|
num5 = num13 + num16;
|
|
num17 = num5 - num13;
|
|
num10 = num16 - num17;
|
|
if (num10 != 0.0)
|
|
{
|
|
h[num11++] = num10;
|
|
}
|
|
}
|
|
if (num5 != 0.0 || num11 == 0)
|
|
{
|
|
h[num11++] = num5;
|
|
}
|
|
return num11;
|
|
}
|
|
|
|
private double Estimate(int elen, double[] e)
|
|
{
|
|
double num = e[0];
|
|
for (int i = 1; i < elen; i++)
|
|
{
|
|
num += e[i];
|
|
}
|
|
return num;
|
|
}
|
|
|
|
private double CounterClockwiseAdapt(Point pa, Point pb, Point pc, double detsum)
|
|
{
|
|
double[] array = new double[5];
|
|
double[] array2 = new double[5];
|
|
double[] array3 = new double[8];
|
|
double[] array4 = new double[12];
|
|
double[] array5 = new double[16];
|
|
double num = pa.x - pc.x;
|
|
double num2 = pb.x - pc.x;
|
|
double num3 = pa.y - pc.y;
|
|
double num4 = pb.y - pc.y;
|
|
double num5 = num * num4;
|
|
double num6 = splitter * num;
|
|
double num7 = num6 - num;
|
|
double num8 = num6 - num7;
|
|
double num9 = num - num8;
|
|
double num10 = splitter * num4;
|
|
num7 = num10 - num4;
|
|
double num11 = num10 - num7;
|
|
double num12 = num4 - num11;
|
|
double num13 = num5 - num8 * num11 - num9 * num11 - num8 * num12;
|
|
double num14 = num9 * num12 - num13;
|
|
double num15 = num3 * num2;
|
|
double num16 = splitter * num3;
|
|
num7 = num16 - num3;
|
|
num8 = num16 - num7;
|
|
num9 = num3 - num8;
|
|
double num17 = splitter * num2;
|
|
num7 = num17 - num2;
|
|
num11 = num17 - num7;
|
|
num12 = num2 - num11;
|
|
num13 = num15 - num8 * num11 - num9 * num11 - num8 * num12;
|
|
double num18 = num9 * num12 - num13;
|
|
double num19 = num14 - num18;
|
|
double num20 = num14 - num19;
|
|
double num21 = num19 + num20;
|
|
double num22 = num20 - num18;
|
|
double num23 = num14 - num21;
|
|
array[0] = num23 + num22;
|
|
double num24 = num5 + num19;
|
|
num20 = num24 - num5;
|
|
num21 = num24 - num20;
|
|
num22 = num19 - num20;
|
|
num23 = num5 - num21;
|
|
double num25 = num23 + num22;
|
|
num19 = num25 - num15;
|
|
num20 = num25 - num19;
|
|
num21 = num19 + num20;
|
|
num22 = num20 - num15;
|
|
num23 = num25 - num21;
|
|
array[1] = num23 + num22;
|
|
double num26 = num24 + num19;
|
|
num20 = num26 - num24;
|
|
num21 = num26 - num20;
|
|
num22 = num19 - num20;
|
|
num23 = num24 - num21;
|
|
array[2] = num23 + num22;
|
|
array[3] = num26;
|
|
double num27 = Estimate(4, array);
|
|
double num28 = ccwerrboundB * detsum;
|
|
if (num27 >= num28 || 0.0 - num27 >= num28)
|
|
{
|
|
return num27;
|
|
}
|
|
num20 = pa.x - num;
|
|
num21 = num + num20;
|
|
num22 = num20 - pc.x;
|
|
num23 = pa.x - num21;
|
|
double num29 = num23 + num22;
|
|
num20 = pb.x - num2;
|
|
num21 = num2 + num20;
|
|
num22 = num20 - pc.x;
|
|
num23 = pb.x - num21;
|
|
double num30 = num23 + num22;
|
|
num20 = pa.y - num3;
|
|
num21 = num3 + num20;
|
|
num22 = num20 - pc.y;
|
|
num23 = pa.y - num21;
|
|
double num31 = num23 + num22;
|
|
num20 = pb.y - num4;
|
|
num21 = num4 + num20;
|
|
num22 = num20 - pc.y;
|
|
num23 = pb.y - num21;
|
|
double num32 = num23 + num22;
|
|
if (num29 == 0.0 && num31 == 0.0 && num30 == 0.0 && num32 == 0.0)
|
|
{
|
|
return num27;
|
|
}
|
|
num28 = ccwerrboundC * detsum + resulterrbound * ((num27 >= 0.0) ? num27 : (0.0 - num27));
|
|
num27 += num * num32 + num4 * num29 - (num3 * num30 + num2 * num31);
|
|
if (num27 >= num28 || 0.0 - num27 >= num28)
|
|
{
|
|
return num27;
|
|
}
|
|
double num33 = num29 * num4;
|
|
double num34 = splitter * num29;
|
|
num7 = num34 - num29;
|
|
num8 = num34 - num7;
|
|
num9 = num29 - num8;
|
|
double num35 = splitter * num4;
|
|
num7 = num35 - num4;
|
|
num11 = num35 - num7;
|
|
num12 = num4 - num11;
|
|
num13 = num33 - num8 * num11 - num9 * num11 - num8 * num12;
|
|
double num36 = num9 * num12 - num13;
|
|
double num37 = num31 * num2;
|
|
double num38 = splitter * num31;
|
|
num7 = num38 - num31;
|
|
num8 = num38 - num7;
|
|
num9 = num31 - num8;
|
|
double num39 = splitter * num2;
|
|
num7 = num39 - num2;
|
|
num11 = num39 - num7;
|
|
num12 = num2 - num11;
|
|
num13 = num37 - num8 * num11 - num9 * num11 - num8 * num12;
|
|
double num40 = num9 * num12 - num13;
|
|
num19 = num36 - num40;
|
|
num20 = num36 - num19;
|
|
num21 = num19 + num20;
|
|
num22 = num20 - num40;
|
|
num23 = num36 - num21;
|
|
array2[0] = num23 + num22;
|
|
num24 = num33 + num19;
|
|
num20 = num24 - num33;
|
|
num21 = num24 - num20;
|
|
num22 = num19 - num20;
|
|
num23 = num33 - num21;
|
|
double num41 = num23 + num22;
|
|
num19 = num41 - num37;
|
|
num20 = num41 - num19;
|
|
num21 = num19 + num20;
|
|
num22 = num20 - num37;
|
|
num23 = num41 - num21;
|
|
array2[1] = num23 + num22;
|
|
double num42 = num24 + num19;
|
|
num20 = num42 - num24;
|
|
num21 = num42 - num20;
|
|
num22 = num19 - num20;
|
|
num23 = num24 - num21;
|
|
array2[2] = num23 + num22;
|
|
array2[3] = num42;
|
|
int elen = FastExpansionSumZeroElim(4, array, 4, array2, array3);
|
|
num33 = num * num32;
|
|
double num43 = splitter * num;
|
|
num7 = num43 - num;
|
|
num8 = num43 - num7;
|
|
num9 = num - num8;
|
|
double num44 = splitter * num32;
|
|
num7 = num44 - num32;
|
|
num11 = num44 - num7;
|
|
num12 = num32 - num11;
|
|
num13 = num33 - num8 * num11 - num9 * num11 - num8 * num12;
|
|
double num45 = num9 * num12 - num13;
|
|
num37 = num3 * num30;
|
|
double num46 = splitter * num3;
|
|
num7 = num46 - num3;
|
|
num8 = num46 - num7;
|
|
num9 = num3 - num8;
|
|
double num47 = splitter * num30;
|
|
num7 = num47 - num30;
|
|
num11 = num47 - num7;
|
|
num12 = num30 - num11;
|
|
num13 = num37 - num8 * num11 - num9 * num11 - num8 * num12;
|
|
num40 = num9 * num12 - num13;
|
|
num19 = num45 - num40;
|
|
num20 = num45 - num19;
|
|
num21 = num19 + num20;
|
|
num22 = num20 - num40;
|
|
num23 = num45 - num21;
|
|
array2[0] = num23 + num22;
|
|
num24 = num33 + num19;
|
|
num20 = num24 - num33;
|
|
num21 = num24 - num20;
|
|
num22 = num19 - num20;
|
|
num23 = num33 - num21;
|
|
double num48 = num23 + num22;
|
|
num19 = num48 - num37;
|
|
num20 = num48 - num19;
|
|
num21 = num19 + num20;
|
|
num22 = num20 - num37;
|
|
num23 = num48 - num21;
|
|
array2[1] = num23 + num22;
|
|
num42 = num24 + num19;
|
|
num20 = num42 - num24;
|
|
num21 = num42 - num20;
|
|
num22 = num19 - num20;
|
|
num23 = num24 - num21;
|
|
array2[2] = num23 + num22;
|
|
array2[3] = num42;
|
|
int elen2 = FastExpansionSumZeroElim(elen, array3, 4, array2, array4);
|
|
num33 = num29 * num32;
|
|
double num49 = splitter * num29;
|
|
num7 = num49 - num29;
|
|
num8 = num49 - num7;
|
|
num9 = num29 - num8;
|
|
double num50 = splitter * num32;
|
|
num7 = num50 - num32;
|
|
num11 = num50 - num7;
|
|
num12 = num32 - num11;
|
|
num13 = num33 - num8 * num11 - num9 * num11 - num8 * num12;
|
|
double num51 = num9 * num12 - num13;
|
|
num37 = num31 * num30;
|
|
double num52 = splitter * num31;
|
|
num7 = num52 - num31;
|
|
num8 = num52 - num7;
|
|
num9 = num31 - num8;
|
|
double num53 = splitter * num30;
|
|
num7 = num53 - num30;
|
|
num11 = num53 - num7;
|
|
num12 = num30 - num11;
|
|
num13 = num37 - num8 * num11 - num9 * num11 - num8 * num12;
|
|
num40 = num9 * num12 - num13;
|
|
num19 = num51 - num40;
|
|
num20 = num51 - num19;
|
|
num21 = num19 + num20;
|
|
num22 = num20 - num40;
|
|
num23 = num51 - num21;
|
|
array2[0] = num23 + num22;
|
|
num24 = num33 + num19;
|
|
num20 = num24 - num33;
|
|
num21 = num24 - num20;
|
|
num22 = num19 - num20;
|
|
num23 = num33 - num21;
|
|
double num54 = num23 + num22;
|
|
num19 = num54 - num37;
|
|
num20 = num54 - num19;
|
|
num21 = num19 + num20;
|
|
num22 = num20 - num37;
|
|
num23 = num54 - num21;
|
|
array2[1] = num23 + num22;
|
|
num42 = num24 + num19;
|
|
num20 = num42 - num24;
|
|
num21 = num42 - num20;
|
|
num22 = num19 - num20;
|
|
num23 = num24 - num21;
|
|
array2[2] = num23 + num22;
|
|
array2[3] = num42;
|
|
int num55 = FastExpansionSumZeroElim(elen2, array4, 4, array2, array5);
|
|
return array5[num55 - 1];
|
|
}
|
|
|
|
private double InCircleAdapt(Point pa, Point pb, Point pc, Point pd, double permanent)
|
|
{
|
|
double[] array = new double[4];
|
|
double[] array2 = new double[4];
|
|
double[] array3 = new double[4];
|
|
double[] array4 = new double[4];
|
|
double[] array5 = new double[4];
|
|
double[] array6 = new double[4];
|
|
double[] array7 = new double[5];
|
|
double[] array8 = new double[5];
|
|
double[] array9 = new double[8];
|
|
double[] array10 = new double[8];
|
|
double[] array11 = new double[8];
|
|
double[] array12 = new double[8];
|
|
double[] array13 = new double[8];
|
|
double[] array14 = new double[8];
|
|
double[] array15 = new double[8];
|
|
double[] array16 = new double[8];
|
|
double[] array17 = new double[8];
|
|
double[] array18 = new double[8];
|
|
double[] array19 = new double[8];
|
|
double[] array20 = new double[8];
|
|
double[] array21 = new double[8];
|
|
double[] array22 = new double[8];
|
|
double[] array23 = new double[8];
|
|
double[] array24 = new double[8];
|
|
double[] array25 = new double[8];
|
|
double[] array26 = new double[8];
|
|
int elen = 0;
|
|
int elen2 = 0;
|
|
int elen3 = 0;
|
|
int elen4 = 0;
|
|
int elen5 = 0;
|
|
int elen6 = 0;
|
|
double[] array27 = new double[16];
|
|
double[] array28 = new double[16];
|
|
double[] array29 = new double[16];
|
|
double[] array30 = new double[16];
|
|
double[] array31 = new double[16];
|
|
double[] array32 = new double[16];
|
|
double[] array33 = new double[8];
|
|
double[] array34 = new double[8];
|
|
double[] array35 = new double[8];
|
|
double[] array36 = new double[8];
|
|
double[] array37 = new double[8];
|
|
double[] array38 = new double[8];
|
|
double[] array39 = new double[8];
|
|
double[] array40 = new double[8];
|
|
double[] array41 = new double[8];
|
|
double[] array42 = new double[4];
|
|
double[] array43 = new double[4];
|
|
double[] array44 = new double[4];
|
|
double num = pa.x - pd.x;
|
|
double num2 = pb.x - pd.x;
|
|
double num3 = pc.x - pd.x;
|
|
double num4 = pa.y - pd.y;
|
|
double num5 = pb.y - pd.y;
|
|
double num6 = pc.y - pd.y;
|
|
num = pa.x - pd.x;
|
|
num2 = pb.x - pd.x;
|
|
num3 = pc.x - pd.x;
|
|
num4 = pa.y - pd.y;
|
|
num5 = pb.y - pd.y;
|
|
num6 = pc.y - pd.y;
|
|
double num7 = num2 * num6;
|
|
double num8 = splitter * num2;
|
|
double num9 = num8 - num2;
|
|
double num10 = num8 - num9;
|
|
double num11 = num2 - num10;
|
|
double num12 = splitter * num6;
|
|
num9 = num12 - num6;
|
|
double num13 = num12 - num9;
|
|
double num14 = num6 - num13;
|
|
double num15 = num7 - num10 * num13 - num11 * num13 - num10 * num14;
|
|
double num16 = num11 * num14 - num15;
|
|
double num17 = num3 * num5;
|
|
double num18 = splitter * num3;
|
|
num9 = num18 - num3;
|
|
num10 = num18 - num9;
|
|
num11 = num3 - num10;
|
|
double num19 = splitter * num5;
|
|
num9 = num19 - num5;
|
|
num13 = num19 - num9;
|
|
num14 = num5 - num13;
|
|
num15 = num17 - num10 * num13 - num11 * num13 - num10 * num14;
|
|
double num20 = num11 * num14 - num15;
|
|
double num21 = num16 - num20;
|
|
double num22 = num16 - num21;
|
|
double num23 = num21 + num22;
|
|
double num24 = num22 - num20;
|
|
double num25 = num16 - num23;
|
|
array[0] = num25 + num24;
|
|
double num26 = num7 + num21;
|
|
num22 = num26 - num7;
|
|
num23 = num26 - num22;
|
|
num24 = num21 - num22;
|
|
num25 = num7 - num23;
|
|
double num27 = num25 + num24;
|
|
num21 = num27 - num17;
|
|
num22 = num27 - num21;
|
|
num23 = num21 + num22;
|
|
num24 = num22 - num17;
|
|
num25 = num27 - num23;
|
|
array[1] = num25 + num24;
|
|
double num28 = num26 + num21;
|
|
num22 = num28 - num26;
|
|
num23 = num28 - num22;
|
|
num24 = num21 - num22;
|
|
num25 = num26 - num23;
|
|
array[2] = num25 + num24;
|
|
array[3] = num28;
|
|
int elen7 = ScaleExpansionZeroElim(4, array, num, axbc);
|
|
int elen8 = ScaleExpansionZeroElim(elen7, axbc, num, axxbc);
|
|
int elen9 = ScaleExpansionZeroElim(4, array, num4, aybc);
|
|
int flen = ScaleExpansionZeroElim(elen9, aybc, num4, ayybc);
|
|
int elen10 = FastExpansionSumZeroElim(elen8, axxbc, flen, ayybc, adet);
|
|
double num29 = num3 * num4;
|
|
double num30 = splitter * num3;
|
|
num9 = num30 - num3;
|
|
num10 = num30 - num9;
|
|
num11 = num3 - num10;
|
|
double num31 = splitter * num4;
|
|
num9 = num31 - num4;
|
|
num13 = num31 - num9;
|
|
num14 = num4 - num13;
|
|
num15 = num29 - num10 * num13 - num11 * num13 - num10 * num14;
|
|
double num32 = num11 * num14 - num15;
|
|
double num33 = num * num6;
|
|
double num34 = splitter * num;
|
|
num9 = num34 - num;
|
|
num10 = num34 - num9;
|
|
num11 = num - num10;
|
|
double num35 = splitter * num6;
|
|
num9 = num35 - num6;
|
|
num13 = num35 - num9;
|
|
num14 = num6 - num13;
|
|
num15 = num33 - num10 * num13 - num11 * num13 - num10 * num14;
|
|
double num36 = num11 * num14 - num15;
|
|
num21 = num32 - num36;
|
|
num22 = num32 - num21;
|
|
num23 = num21 + num22;
|
|
num24 = num22 - num36;
|
|
num25 = num32 - num23;
|
|
array2[0] = num25 + num24;
|
|
num26 = num29 + num21;
|
|
num22 = num26 - num29;
|
|
num23 = num26 - num22;
|
|
num24 = num21 - num22;
|
|
num25 = num29 - num23;
|
|
num27 = num25 + num24;
|
|
num21 = num27 - num33;
|
|
num22 = num27 - num21;
|
|
num23 = num21 + num22;
|
|
num24 = num22 - num33;
|
|
num25 = num27 - num23;
|
|
array2[1] = num25 + num24;
|
|
double num37 = num26 + num21;
|
|
num22 = num37 - num26;
|
|
num23 = num37 - num22;
|
|
num24 = num21 - num22;
|
|
num25 = num26 - num23;
|
|
array2[2] = num25 + num24;
|
|
array2[3] = num37;
|
|
int elen11 = ScaleExpansionZeroElim(4, array2, num2, bxca);
|
|
int elen12 = ScaleExpansionZeroElim(elen11, bxca, num2, bxxca);
|
|
int elen13 = ScaleExpansionZeroElim(4, array2, num5, byca);
|
|
int flen2 = ScaleExpansionZeroElim(elen13, byca, num5, byyca);
|
|
int flen3 = FastExpansionSumZeroElim(elen12, bxxca, flen2, byyca, bdet);
|
|
double num38 = num * num5;
|
|
double num39 = splitter * num;
|
|
num9 = num39 - num;
|
|
num10 = num39 - num9;
|
|
num11 = num - num10;
|
|
double num40 = splitter * num5;
|
|
num9 = num40 - num5;
|
|
num13 = num40 - num9;
|
|
num14 = num5 - num13;
|
|
num15 = num38 - num10 * num13 - num11 * num13 - num10 * num14;
|
|
double num41 = num11 * num14 - num15;
|
|
double num42 = num2 * num4;
|
|
double num43 = splitter * num2;
|
|
num9 = num43 - num2;
|
|
num10 = num43 - num9;
|
|
num11 = num2 - num10;
|
|
double num44 = splitter * num4;
|
|
num9 = num44 - num4;
|
|
num13 = num44 - num9;
|
|
num14 = num4 - num13;
|
|
num15 = num42 - num10 * num13 - num11 * num13 - num10 * num14;
|
|
double num45 = num11 * num14 - num15;
|
|
num21 = num41 - num45;
|
|
num22 = num41 - num21;
|
|
num23 = num21 + num22;
|
|
num24 = num22 - num45;
|
|
num25 = num41 - num23;
|
|
array3[0] = num25 + num24;
|
|
num26 = num38 + num21;
|
|
num22 = num26 - num38;
|
|
num23 = num26 - num22;
|
|
num24 = num21 - num22;
|
|
num25 = num38 - num23;
|
|
num27 = num25 + num24;
|
|
num21 = num27 - num42;
|
|
num22 = num27 - num21;
|
|
num23 = num21 + num22;
|
|
num24 = num22 - num42;
|
|
num25 = num27 - num23;
|
|
array3[1] = num25 + num24;
|
|
double num46 = num26 + num21;
|
|
num22 = num46 - num26;
|
|
num23 = num46 - num22;
|
|
num24 = num21 - num22;
|
|
num25 = num26 - num23;
|
|
array3[2] = num25 + num24;
|
|
array3[3] = num46;
|
|
int elen14 = ScaleExpansionZeroElim(4, array3, num3, cxab);
|
|
int elen15 = ScaleExpansionZeroElim(elen14, cxab, num3, cxxab);
|
|
int elen16 = ScaleExpansionZeroElim(4, array3, num6, cyab);
|
|
int flen4 = ScaleExpansionZeroElim(elen16, cyab, num6, cyyab);
|
|
int flen5 = FastExpansionSumZeroElim(elen15, cxxab, flen4, cyyab, cdet);
|
|
int elen17 = FastExpansionSumZeroElim(elen10, adet, flen3, bdet, abdet);
|
|
int num47 = FastExpansionSumZeroElim(elen17, abdet, flen5, cdet, fin1);
|
|
double num48 = Estimate(num47, fin1);
|
|
double num49 = iccerrboundB * permanent;
|
|
if (num48 >= num49 || 0.0 - num48 >= num49)
|
|
{
|
|
return num48;
|
|
}
|
|
num22 = pa.x - num;
|
|
num23 = num + num22;
|
|
num24 = num22 - pd.x;
|
|
num25 = pa.x - num23;
|
|
double num50 = num25 + num24;
|
|
num22 = pa.y - num4;
|
|
num23 = num4 + num22;
|
|
num24 = num22 - pd.y;
|
|
num25 = pa.y - num23;
|
|
double num51 = num25 + num24;
|
|
num22 = pb.x - num2;
|
|
num23 = num2 + num22;
|
|
num24 = num22 - pd.x;
|
|
num25 = pb.x - num23;
|
|
double num52 = num25 + num24;
|
|
num22 = pb.y - num5;
|
|
num23 = num5 + num22;
|
|
num24 = num22 - pd.y;
|
|
num25 = pb.y - num23;
|
|
double num53 = num25 + num24;
|
|
num22 = pc.x - num3;
|
|
num23 = num3 + num22;
|
|
num24 = num22 - pd.x;
|
|
num25 = pc.x - num23;
|
|
double num54 = num25 + num24;
|
|
num22 = pc.y - num6;
|
|
num23 = num6 + num22;
|
|
num24 = num22 - pd.y;
|
|
num25 = pc.y - num23;
|
|
double num55 = num25 + num24;
|
|
if (num50 == 0.0 && num52 == 0.0 && num54 == 0.0 && num51 == 0.0 && num53 == 0.0 && num55 == 0.0)
|
|
{
|
|
return num48;
|
|
}
|
|
num49 = iccerrboundC * permanent + resulterrbound * ((num48 >= 0.0) ? num48 : (0.0 - num48));
|
|
num48 += (num * num + num4 * num4) * (num2 * num55 + num6 * num52 - (num5 * num54 + num3 * num53)) + 2.0 * (num * num50 + num4 * num51) * (num2 * num6 - num5 * num3) + ((num2 * num2 + num5 * num5) * (num3 * num51 + num4 * num54 - (num6 * num50 + num * num55)) + 2.0 * (num2 * num52 + num5 * num53) * (num3 * num4 - num6 * num)) + ((num3 * num3 + num6 * num6) * (num * num53 + num5 * num50 - (num4 * num52 + num2 * num51)) + 2.0 * (num3 * num54 + num6 * num55) * (num * num5 - num4 * num2));
|
|
if (num48 >= num49 || 0.0 - num48 >= num49)
|
|
{
|
|
return num48;
|
|
}
|
|
double[] array45 = fin1;
|
|
double[] array46 = fin2;
|
|
if (num52 != 0.0 || num53 != 0.0 || num54 != 0.0 || num55 != 0.0)
|
|
{
|
|
double num56 = num * num;
|
|
double num57 = splitter * num;
|
|
num9 = num57 - num;
|
|
num10 = num57 - num9;
|
|
num11 = num - num10;
|
|
num15 = num56 - num10 * num10 - (num10 + num10) * num11;
|
|
double num58 = num11 * num11 - num15;
|
|
double num59 = num4 * num4;
|
|
double num60 = splitter * num4;
|
|
num9 = num60 - num4;
|
|
num10 = num60 - num9;
|
|
num11 = num4 - num10;
|
|
num15 = num59 - num10 * num10 - (num10 + num10) * num11;
|
|
double num61 = num11 * num11 - num15;
|
|
num21 = num58 + num61;
|
|
num22 = num21 - num58;
|
|
num23 = num21 - num22;
|
|
num24 = num61 - num22;
|
|
num25 = num58 - num23;
|
|
array4[0] = num25 + num24;
|
|
num26 = num56 + num21;
|
|
num22 = num26 - num56;
|
|
num23 = num26 - num22;
|
|
num24 = num21 - num22;
|
|
num25 = num56 - num23;
|
|
num27 = num25 + num24;
|
|
num21 = num27 + num59;
|
|
num22 = num21 - num27;
|
|
num23 = num21 - num22;
|
|
num24 = num59 - num22;
|
|
num25 = num27 - num23;
|
|
array4[1] = num25 + num24;
|
|
double num62 = num26 + num21;
|
|
num22 = num62 - num26;
|
|
num23 = num62 - num22;
|
|
num24 = num21 - num22;
|
|
num25 = num26 - num23;
|
|
array4[2] = num25 + num24;
|
|
array4[3] = num62;
|
|
}
|
|
if (num54 != 0.0 || num55 != 0.0 || num50 != 0.0 || num51 != 0.0)
|
|
{
|
|
double num63 = num2 * num2;
|
|
double num64 = splitter * num2;
|
|
num9 = num64 - num2;
|
|
num10 = num64 - num9;
|
|
num11 = num2 - num10;
|
|
num15 = num63 - num10 * num10 - (num10 + num10) * num11;
|
|
double num65 = num11 * num11 - num15;
|
|
double num66 = num5 * num5;
|
|
double num67 = splitter * num5;
|
|
num9 = num67 - num5;
|
|
num10 = num67 - num9;
|
|
num11 = num5 - num10;
|
|
num15 = num66 - num10 * num10 - (num10 + num10) * num11;
|
|
double num68 = num11 * num11 - num15;
|
|
num21 = num65 + num68;
|
|
num22 = num21 - num65;
|
|
num23 = num21 - num22;
|
|
num24 = num68 - num22;
|
|
num25 = num65 - num23;
|
|
array5[0] = num25 + num24;
|
|
num26 = num63 + num21;
|
|
num22 = num26 - num63;
|
|
num23 = num26 - num22;
|
|
num24 = num21 - num22;
|
|
num25 = num63 - num23;
|
|
num27 = num25 + num24;
|
|
num21 = num27 + num66;
|
|
num22 = num21 - num27;
|
|
num23 = num21 - num22;
|
|
num24 = num66 - num22;
|
|
num25 = num27 - num23;
|
|
array5[1] = num25 + num24;
|
|
double num69 = num26 + num21;
|
|
num22 = num69 - num26;
|
|
num23 = num69 - num22;
|
|
num24 = num21 - num22;
|
|
num25 = num26 - num23;
|
|
array5[2] = num25 + num24;
|
|
array5[3] = num69;
|
|
}
|
|
if (num50 != 0.0 || num51 != 0.0 || num52 != 0.0 || num53 != 0.0)
|
|
{
|
|
double num70 = num3 * num3;
|
|
double num71 = splitter * num3;
|
|
num9 = num71 - num3;
|
|
num10 = num71 - num9;
|
|
num11 = num3 - num10;
|
|
num15 = num70 - num10 * num10 - (num10 + num10) * num11;
|
|
double num72 = num11 * num11 - num15;
|
|
double num73 = num6 * num6;
|
|
double num74 = splitter * num6;
|
|
num9 = num74 - num6;
|
|
num10 = num74 - num9;
|
|
num11 = num6 - num10;
|
|
num15 = num73 - num10 * num10 - (num10 + num10) * num11;
|
|
double num75 = num11 * num11 - num15;
|
|
num21 = num72 + num75;
|
|
num22 = num21 - num72;
|
|
num23 = num21 - num22;
|
|
num24 = num75 - num22;
|
|
num25 = num72 - num23;
|
|
array6[0] = num25 + num24;
|
|
num26 = num70 + num21;
|
|
num22 = num26 - num70;
|
|
num23 = num26 - num22;
|
|
num24 = num21 - num22;
|
|
num25 = num70 - num23;
|
|
num27 = num25 + num24;
|
|
num21 = num27 + num73;
|
|
num22 = num21 - num27;
|
|
num23 = num21 - num22;
|
|
num24 = num73 - num22;
|
|
num25 = num27 - num23;
|
|
array6[1] = num25 + num24;
|
|
double num76 = num26 + num21;
|
|
num22 = num76 - num26;
|
|
num23 = num76 - num22;
|
|
num24 = num21 - num22;
|
|
num25 = num26 - num23;
|
|
array6[2] = num25 + num24;
|
|
array6[3] = num76;
|
|
}
|
|
if (num50 != 0.0)
|
|
{
|
|
elen = ScaleExpansionZeroElim(4, array, num50, array21);
|
|
int elen18 = ScaleExpansionZeroElim(elen, array21, 2.0 * num, temp16a);
|
|
int elen19 = ScaleExpansionZeroElim(4, array6, num50, array10);
|
|
int flen6 = ScaleExpansionZeroElim(elen19, array10, num5, temp16b);
|
|
int elen20 = ScaleExpansionZeroElim(4, array5, num50, array9);
|
|
int elen21 = ScaleExpansionZeroElim(elen20, array9, 0.0 - num6, temp16c);
|
|
int flen7 = FastExpansionSumZeroElim(elen18, temp16a, flen6, temp16b, temp32a);
|
|
int flen8 = FastExpansionSumZeroElim(elen21, temp16c, flen7, temp32a, temp48);
|
|
num47 = FastExpansionSumZeroElim(num47, array45, flen8, temp48, array46);
|
|
double[] array47 = array45;
|
|
array45 = array46;
|
|
array46 = array47;
|
|
}
|
|
if (num51 != 0.0)
|
|
{
|
|
elen2 = ScaleExpansionZeroElim(4, array, num51, array22);
|
|
int elen18 = ScaleExpansionZeroElim(elen2, array22, 2.0 * num4, temp16a);
|
|
int elen22 = ScaleExpansionZeroElim(4, array5, num51, array11);
|
|
int flen6 = ScaleExpansionZeroElim(elen22, array11, num3, temp16b);
|
|
int elen23 = ScaleExpansionZeroElim(4, array6, num51, array12);
|
|
int elen21 = ScaleExpansionZeroElim(elen23, array12, 0.0 - num2, temp16c);
|
|
int flen7 = FastExpansionSumZeroElim(elen18, temp16a, flen6, temp16b, temp32a);
|
|
int flen8 = FastExpansionSumZeroElim(elen21, temp16c, flen7, temp32a, temp48);
|
|
num47 = FastExpansionSumZeroElim(num47, array45, flen8, temp48, array46);
|
|
double[] array48 = array45;
|
|
array45 = array46;
|
|
array46 = array48;
|
|
}
|
|
if (num52 != 0.0)
|
|
{
|
|
elen3 = ScaleExpansionZeroElim(4, array2, num52, array23);
|
|
int elen18 = ScaleExpansionZeroElim(elen3, array23, 2.0 * num2, temp16a);
|
|
int elen24 = ScaleExpansionZeroElim(4, array4, num52, array13);
|
|
int flen6 = ScaleExpansionZeroElim(elen24, array13, num6, temp16b);
|
|
int elen25 = ScaleExpansionZeroElim(4, array6, num52, array14);
|
|
int elen21 = ScaleExpansionZeroElim(elen25, array14, 0.0 - num4, temp16c);
|
|
int flen7 = FastExpansionSumZeroElim(elen18, temp16a, flen6, temp16b, temp32a);
|
|
int flen8 = FastExpansionSumZeroElim(elen21, temp16c, flen7, temp32a, temp48);
|
|
num47 = FastExpansionSumZeroElim(num47, array45, flen8, temp48, array46);
|
|
double[] array49 = array45;
|
|
array45 = array46;
|
|
array46 = array49;
|
|
}
|
|
if (num53 != 0.0)
|
|
{
|
|
elen4 = ScaleExpansionZeroElim(4, array2, num53, array24);
|
|
int elen18 = ScaleExpansionZeroElim(elen4, array24, 2.0 * num5, temp16a);
|
|
int elen26 = ScaleExpansionZeroElim(4, array6, num53, array16);
|
|
int flen6 = ScaleExpansionZeroElim(elen26, array16, num, temp16b);
|
|
int elen27 = ScaleExpansionZeroElim(4, array4, num53, array15);
|
|
int elen21 = ScaleExpansionZeroElim(elen27, array15, 0.0 - num3, temp16c);
|
|
int flen7 = FastExpansionSumZeroElim(elen18, temp16a, flen6, temp16b, temp32a);
|
|
int flen8 = FastExpansionSumZeroElim(elen21, temp16c, flen7, temp32a, temp48);
|
|
num47 = FastExpansionSumZeroElim(num47, array45, flen8, temp48, array46);
|
|
double[] array50 = array45;
|
|
array45 = array46;
|
|
array46 = array50;
|
|
}
|
|
if (num54 != 0.0)
|
|
{
|
|
elen5 = ScaleExpansionZeroElim(4, array3, num54, array25);
|
|
int elen18 = ScaleExpansionZeroElim(elen5, array25, 2.0 * num3, temp16a);
|
|
int elen28 = ScaleExpansionZeroElim(4, array5, num54, array18);
|
|
int flen6 = ScaleExpansionZeroElim(elen28, array18, num4, temp16b);
|
|
int elen29 = ScaleExpansionZeroElim(4, array4, num54, array17);
|
|
int elen21 = ScaleExpansionZeroElim(elen29, array17, 0.0 - num5, temp16c);
|
|
int flen7 = FastExpansionSumZeroElim(elen18, temp16a, flen6, temp16b, temp32a);
|
|
int flen8 = FastExpansionSumZeroElim(elen21, temp16c, flen7, temp32a, temp48);
|
|
num47 = FastExpansionSumZeroElim(num47, array45, flen8, temp48, array46);
|
|
double[] array51 = array45;
|
|
array45 = array46;
|
|
array46 = array51;
|
|
}
|
|
if (num55 != 0.0)
|
|
{
|
|
elen6 = ScaleExpansionZeroElim(4, array3, num55, array26);
|
|
int elen18 = ScaleExpansionZeroElim(elen6, array26, 2.0 * num6, temp16a);
|
|
int elen30 = ScaleExpansionZeroElim(4, array4, num55, array19);
|
|
int flen6 = ScaleExpansionZeroElim(elen30, array19, num2, temp16b);
|
|
int elen31 = ScaleExpansionZeroElim(4, array5, num55, array20);
|
|
int elen21 = ScaleExpansionZeroElim(elen31, array20, 0.0 - num, temp16c);
|
|
int flen7 = FastExpansionSumZeroElim(elen18, temp16a, flen6, temp16b, temp32a);
|
|
int flen8 = FastExpansionSumZeroElim(elen21, temp16c, flen7, temp32a, temp48);
|
|
num47 = FastExpansionSumZeroElim(num47, array45, flen8, temp48, array46);
|
|
double[] array52 = array45;
|
|
array45 = array46;
|
|
array46 = array52;
|
|
}
|
|
if (num50 != 0.0 || num51 != 0.0)
|
|
{
|
|
int elen32;
|
|
int elen33;
|
|
if (num52 != 0.0 || num53 != 0.0 || num54 != 0.0 || num55 != 0.0)
|
|
{
|
|
double num77 = num52 * num6;
|
|
double num78 = splitter * num52;
|
|
num9 = num78 - num52;
|
|
num10 = num78 - num9;
|
|
num11 = num52 - num10;
|
|
double num79 = splitter * num6;
|
|
num9 = num79 - num6;
|
|
num13 = num79 - num9;
|
|
num14 = num6 - num13;
|
|
num15 = num77 - num10 * num13 - num11 * num13 - num10 * num14;
|
|
double num80 = num11 * num14 - num15;
|
|
double num81 = num2 * num55;
|
|
double num82 = splitter * num2;
|
|
num9 = num82 - num2;
|
|
num10 = num82 - num9;
|
|
num11 = num2 - num10;
|
|
double num83 = splitter * num55;
|
|
num9 = num83 - num55;
|
|
num13 = num83 - num9;
|
|
num14 = num55 - num13;
|
|
num15 = num81 - num10 * num13 - num11 * num13 - num10 * num14;
|
|
double num84 = num11 * num14 - num15;
|
|
num21 = num80 + num84;
|
|
num22 = num21 - num80;
|
|
num23 = num21 - num22;
|
|
num24 = num84 - num22;
|
|
num25 = num80 - num23;
|
|
array7[0] = num25 + num24;
|
|
num26 = num77 + num21;
|
|
num22 = num26 - num77;
|
|
num23 = num26 - num22;
|
|
num24 = num21 - num22;
|
|
num25 = num77 - num23;
|
|
num27 = num25 + num24;
|
|
num21 = num27 + num81;
|
|
num22 = num21 - num27;
|
|
num23 = num21 - num22;
|
|
num24 = num81 - num22;
|
|
num25 = num27 - num23;
|
|
array7[1] = num25 + num24;
|
|
double num85 = num26 + num21;
|
|
num22 = num85 - num26;
|
|
num23 = num85 - num22;
|
|
num24 = num21 - num22;
|
|
num25 = num26 - num23;
|
|
array7[2] = num25 + num24;
|
|
array7[3] = num85;
|
|
double num86 = 0.0 - num5;
|
|
num77 = num54 * num86;
|
|
double num87 = splitter * num54;
|
|
num9 = num87 - num54;
|
|
num10 = num87 - num9;
|
|
num11 = num54 - num10;
|
|
double num88 = splitter * num86;
|
|
num9 = num88 - num86;
|
|
num13 = num88 - num9;
|
|
num14 = num86 - num13;
|
|
num15 = num77 - num10 * num13 - num11 * num13 - num10 * num14;
|
|
num80 = num11 * num14 - num15;
|
|
num86 = 0.0 - num53;
|
|
num81 = num3 * num86;
|
|
double num89 = splitter * num3;
|
|
num9 = num89 - num3;
|
|
num10 = num89 - num9;
|
|
num11 = num3 - num10;
|
|
double num90 = splitter * num86;
|
|
num9 = num90 - num86;
|
|
num13 = num90 - num9;
|
|
num14 = num86 - num13;
|
|
num15 = num81 - num10 * num13 - num11 * num13 - num10 * num14;
|
|
num84 = num11 * num14 - num15;
|
|
num21 = num80 + num84;
|
|
num22 = num21 - num80;
|
|
num23 = num21 - num22;
|
|
num24 = num84 - num22;
|
|
num25 = num80 - num23;
|
|
array8[0] = num25 + num24;
|
|
num26 = num77 + num21;
|
|
num22 = num26 - num77;
|
|
num23 = num26 - num22;
|
|
num24 = num21 - num22;
|
|
num25 = num77 - num23;
|
|
num27 = num25 + num24;
|
|
num21 = num27 + num81;
|
|
num22 = num21 - num27;
|
|
num23 = num21 - num22;
|
|
num24 = num81 - num22;
|
|
num25 = num27 - num23;
|
|
array8[1] = num25 + num24;
|
|
double num91 = num26 + num21;
|
|
num22 = num91 - num26;
|
|
num23 = num91 - num22;
|
|
num24 = num21 - num22;
|
|
num25 = num26 - num23;
|
|
array8[2] = num25 + num24;
|
|
array8[3] = num91;
|
|
elen32 = FastExpansionSumZeroElim(4, array7, 4, array8, array40);
|
|
num77 = num52 * num55;
|
|
double num92 = splitter * num52;
|
|
num9 = num92 - num52;
|
|
num10 = num92 - num9;
|
|
num11 = num52 - num10;
|
|
double num93 = splitter * num55;
|
|
num9 = num93 - num55;
|
|
num13 = num93 - num9;
|
|
num14 = num55 - num13;
|
|
num15 = num77 - num10 * num13 - num11 * num13 - num10 * num14;
|
|
num80 = num11 * num14 - num15;
|
|
num81 = num54 * num53;
|
|
double num94 = splitter * num54;
|
|
num9 = num94 - num54;
|
|
num10 = num94 - num9;
|
|
num11 = num54 - num10;
|
|
double num95 = splitter * num53;
|
|
num9 = num95 - num53;
|
|
num13 = num95 - num9;
|
|
num14 = num53 - num13;
|
|
num15 = num81 - num10 * num13 - num11 * num13 - num10 * num14;
|
|
num84 = num11 * num14 - num15;
|
|
num21 = num80 - num84;
|
|
num22 = num80 - num21;
|
|
num23 = num21 + num22;
|
|
num24 = num22 - num84;
|
|
num25 = num80 - num23;
|
|
array43[0] = num25 + num24;
|
|
num26 = num77 + num21;
|
|
num22 = num26 - num77;
|
|
num23 = num26 - num22;
|
|
num24 = num21 - num22;
|
|
num25 = num77 - num23;
|
|
num27 = num25 + num24;
|
|
num21 = num27 - num81;
|
|
num22 = num27 - num21;
|
|
num23 = num21 + num22;
|
|
num24 = num22 - num81;
|
|
num25 = num27 - num23;
|
|
array43[1] = num25 + num24;
|
|
double num96 = num26 + num21;
|
|
num22 = num96 - num26;
|
|
num23 = num96 - num22;
|
|
num24 = num21 - num22;
|
|
num25 = num26 - num23;
|
|
array43[2] = num25 + num24;
|
|
array43[3] = num96;
|
|
elen33 = 4;
|
|
}
|
|
else
|
|
{
|
|
array40[0] = 0.0;
|
|
elen32 = 1;
|
|
array43[0] = 0.0;
|
|
elen33 = 1;
|
|
}
|
|
if (num50 != 0.0)
|
|
{
|
|
int elen18 = ScaleExpansionZeroElim(elen, array21, num50, temp16a);
|
|
int elen34 = ScaleExpansionZeroElim(elen32, array40, num50, array27);
|
|
int flen7 = ScaleExpansionZeroElim(elen34, array27, 2.0 * num, temp32a);
|
|
int flen8 = FastExpansionSumZeroElim(elen18, temp16a, flen7, temp32a, temp48);
|
|
num47 = FastExpansionSumZeroElim(num47, array45, flen8, temp48, array46);
|
|
double[] array53 = array45;
|
|
array45 = array46;
|
|
array46 = array53;
|
|
if (num53 != 0.0)
|
|
{
|
|
int elen35 = ScaleExpansionZeroElim(4, array6, num50, temp8);
|
|
elen18 = ScaleExpansionZeroElim(elen35, temp8, num53, temp16a);
|
|
num47 = FastExpansionSumZeroElim(num47, array45, elen18, temp16a, array46);
|
|
double[] array54 = array45;
|
|
array45 = array46;
|
|
array46 = array54;
|
|
}
|
|
if (num55 != 0.0)
|
|
{
|
|
int elen35 = ScaleExpansionZeroElim(4, array5, 0.0 - num50, temp8);
|
|
elen18 = ScaleExpansionZeroElim(elen35, temp8, num55, temp16a);
|
|
num47 = FastExpansionSumZeroElim(num47, array45, elen18, temp16a, array46);
|
|
double[] array55 = array45;
|
|
array45 = array46;
|
|
array46 = array55;
|
|
}
|
|
flen7 = ScaleExpansionZeroElim(elen34, array27, num50, temp32a);
|
|
int elen36 = ScaleExpansionZeroElim(elen33, array43, num50, array33);
|
|
elen18 = ScaleExpansionZeroElim(elen36, array33, 2.0 * num, temp16a);
|
|
int flen6 = ScaleExpansionZeroElim(elen36, array33, num50, temp16b);
|
|
int flen9 = FastExpansionSumZeroElim(elen18, temp16a, flen6, temp16b, temp32b);
|
|
int flen10 = FastExpansionSumZeroElim(flen7, temp32a, flen9, temp32b, temp64);
|
|
num47 = FastExpansionSumZeroElim(num47, array45, flen10, temp64, array46);
|
|
double[] array56 = array45;
|
|
array45 = array46;
|
|
array46 = array56;
|
|
}
|
|
if (num51 != 0.0)
|
|
{
|
|
int elen18 = ScaleExpansionZeroElim(elen2, array22, num51, temp16a);
|
|
int elen37 = ScaleExpansionZeroElim(elen32, array40, num51, array28);
|
|
int flen7 = ScaleExpansionZeroElim(elen37, array28, 2.0 * num4, temp32a);
|
|
int flen8 = FastExpansionSumZeroElim(elen18, temp16a, flen7, temp32a, temp48);
|
|
num47 = FastExpansionSumZeroElim(num47, array45, flen8, temp48, array46);
|
|
double[] array57 = array45;
|
|
array45 = array46;
|
|
array46 = array57;
|
|
flen7 = ScaleExpansionZeroElim(elen37, array28, num51, temp32a);
|
|
int elen38 = ScaleExpansionZeroElim(elen33, array43, num51, array34);
|
|
elen18 = ScaleExpansionZeroElim(elen38, array34, 2.0 * num4, temp16a);
|
|
int flen6 = ScaleExpansionZeroElim(elen38, array34, num51, temp16b);
|
|
int flen9 = FastExpansionSumZeroElim(elen18, temp16a, flen6, temp16b, temp32b);
|
|
int flen10 = FastExpansionSumZeroElim(flen7, temp32a, flen9, temp32b, temp64);
|
|
num47 = FastExpansionSumZeroElim(num47, array45, flen10, temp64, array46);
|
|
double[] array58 = array45;
|
|
array45 = array46;
|
|
array46 = array58;
|
|
}
|
|
}
|
|
if (num52 != 0.0 || num53 != 0.0)
|
|
{
|
|
int elen39;
|
|
int elen40;
|
|
if (num54 != 0.0 || num55 != 0.0 || num50 != 0.0 || num51 != 0.0)
|
|
{
|
|
double num77 = num54 * num4;
|
|
double num97 = splitter * num54;
|
|
num9 = num97 - num54;
|
|
num10 = num97 - num9;
|
|
num11 = num54 - num10;
|
|
double num98 = splitter * num4;
|
|
num9 = num98 - num4;
|
|
num13 = num98 - num9;
|
|
num14 = num4 - num13;
|
|
num15 = num77 - num10 * num13 - num11 * num13 - num10 * num14;
|
|
double num80 = num11 * num14 - num15;
|
|
double num81 = num3 * num51;
|
|
double num99 = splitter * num3;
|
|
num9 = num99 - num3;
|
|
num10 = num99 - num9;
|
|
num11 = num3 - num10;
|
|
double num100 = splitter * num51;
|
|
num9 = num100 - num51;
|
|
num13 = num100 - num9;
|
|
num14 = num51 - num13;
|
|
num15 = num81 - num10 * num13 - num11 * num13 - num10 * num14;
|
|
double num84 = num11 * num14 - num15;
|
|
num21 = num80 + num84;
|
|
num22 = num21 - num80;
|
|
num23 = num21 - num22;
|
|
num24 = num84 - num22;
|
|
num25 = num80 - num23;
|
|
array7[0] = num25 + num24;
|
|
num26 = num77 + num21;
|
|
num22 = num26 - num77;
|
|
num23 = num26 - num22;
|
|
num24 = num21 - num22;
|
|
num25 = num77 - num23;
|
|
num27 = num25 + num24;
|
|
num21 = num27 + num81;
|
|
num22 = num21 - num27;
|
|
num23 = num21 - num22;
|
|
num24 = num81 - num22;
|
|
num25 = num27 - num23;
|
|
array7[1] = num25 + num24;
|
|
double num85 = num26 + num21;
|
|
num22 = num85 - num26;
|
|
num23 = num85 - num22;
|
|
num24 = num21 - num22;
|
|
num25 = num26 - num23;
|
|
array7[2] = num25 + num24;
|
|
array7[3] = num85;
|
|
double num86 = 0.0 - num6;
|
|
num77 = num50 * num86;
|
|
double num101 = splitter * num50;
|
|
num9 = num101 - num50;
|
|
num10 = num101 - num9;
|
|
num11 = num50 - num10;
|
|
double num102 = splitter * num86;
|
|
num9 = num102 - num86;
|
|
num13 = num102 - num9;
|
|
num14 = num86 - num13;
|
|
num15 = num77 - num10 * num13 - num11 * num13 - num10 * num14;
|
|
num80 = num11 * num14 - num15;
|
|
num86 = 0.0 - num55;
|
|
num81 = num * num86;
|
|
double num103 = splitter * num;
|
|
num9 = num103 - num;
|
|
num10 = num103 - num9;
|
|
num11 = num - num10;
|
|
double num104 = splitter * num86;
|
|
num9 = num104 - num86;
|
|
num13 = num104 - num9;
|
|
num14 = num86 - num13;
|
|
num15 = num81 - num10 * num13 - num11 * num13 - num10 * num14;
|
|
num84 = num11 * num14 - num15;
|
|
num21 = num80 + num84;
|
|
num22 = num21 - num80;
|
|
num23 = num21 - num22;
|
|
num24 = num84 - num22;
|
|
num25 = num80 - num23;
|
|
array8[0] = num25 + num24;
|
|
num26 = num77 + num21;
|
|
num22 = num26 - num77;
|
|
num23 = num26 - num22;
|
|
num24 = num21 - num22;
|
|
num25 = num77 - num23;
|
|
num27 = num25 + num24;
|
|
num21 = num27 + num81;
|
|
num22 = num21 - num27;
|
|
num23 = num21 - num22;
|
|
num24 = num81 - num22;
|
|
num25 = num27 - num23;
|
|
array8[1] = num25 + num24;
|
|
double num91 = num26 + num21;
|
|
num22 = num91 - num26;
|
|
num23 = num91 - num22;
|
|
num24 = num21 - num22;
|
|
num25 = num26 - num23;
|
|
array8[2] = num25 + num24;
|
|
array8[3] = num91;
|
|
elen39 = FastExpansionSumZeroElim(4, array7, 4, array8, array41);
|
|
num77 = num54 * num51;
|
|
double num105 = splitter * num54;
|
|
num9 = num105 - num54;
|
|
num10 = num105 - num9;
|
|
num11 = num54 - num10;
|
|
double num106 = splitter * num51;
|
|
num9 = num106 - num51;
|
|
num13 = num106 - num9;
|
|
num14 = num51 - num13;
|
|
num15 = num77 - num10 * num13 - num11 * num13 - num10 * num14;
|
|
num80 = num11 * num14 - num15;
|
|
num81 = num50 * num55;
|
|
double num107 = splitter * num50;
|
|
num9 = num107 - num50;
|
|
num10 = num107 - num9;
|
|
num11 = num50 - num10;
|
|
double num108 = splitter * num55;
|
|
num9 = num108 - num55;
|
|
num13 = num108 - num9;
|
|
num14 = num55 - num13;
|
|
num15 = num81 - num10 * num13 - num11 * num13 - num10 * num14;
|
|
num84 = num11 * num14 - num15;
|
|
num21 = num80 - num84;
|
|
num22 = num80 - num21;
|
|
num23 = num21 + num22;
|
|
num24 = num22 - num84;
|
|
num25 = num80 - num23;
|
|
array44[0] = num25 + num24;
|
|
num26 = num77 + num21;
|
|
num22 = num26 - num77;
|
|
num23 = num26 - num22;
|
|
num24 = num21 - num22;
|
|
num25 = num77 - num23;
|
|
num27 = num25 + num24;
|
|
num21 = num27 - num81;
|
|
num22 = num27 - num21;
|
|
num23 = num21 + num22;
|
|
num24 = num22 - num81;
|
|
num25 = num27 - num23;
|
|
array44[1] = num25 + num24;
|
|
double num109 = num26 + num21;
|
|
num22 = num109 - num26;
|
|
num23 = num109 - num22;
|
|
num24 = num21 - num22;
|
|
num25 = num26 - num23;
|
|
array44[2] = num25 + num24;
|
|
array44[3] = num109;
|
|
elen40 = 4;
|
|
}
|
|
else
|
|
{
|
|
array41[0] = 0.0;
|
|
elen39 = 1;
|
|
array44[0] = 0.0;
|
|
elen40 = 1;
|
|
}
|
|
if (num52 != 0.0)
|
|
{
|
|
int elen18 = ScaleExpansionZeroElim(elen3, array23, num52, temp16a);
|
|
int elen41 = ScaleExpansionZeroElim(elen39, array41, num52, array29);
|
|
int flen7 = ScaleExpansionZeroElim(elen41, array29, 2.0 * num2, temp32a);
|
|
int flen8 = FastExpansionSumZeroElim(elen18, temp16a, flen7, temp32a, temp48);
|
|
num47 = FastExpansionSumZeroElim(num47, array45, flen8, temp48, array46);
|
|
double[] array59 = array45;
|
|
array45 = array46;
|
|
array46 = array59;
|
|
if (num55 != 0.0)
|
|
{
|
|
int elen35 = ScaleExpansionZeroElim(4, array4, num52, temp8);
|
|
elen18 = ScaleExpansionZeroElim(elen35, temp8, num55, temp16a);
|
|
num47 = FastExpansionSumZeroElim(num47, array45, elen18, temp16a, array46);
|
|
double[] array60 = array45;
|
|
array45 = array46;
|
|
array46 = array60;
|
|
}
|
|
if (num51 != 0.0)
|
|
{
|
|
int elen35 = ScaleExpansionZeroElim(4, array6, 0.0 - num52, temp8);
|
|
elen18 = ScaleExpansionZeroElim(elen35, temp8, num51, temp16a);
|
|
num47 = FastExpansionSumZeroElim(num47, array45, elen18, temp16a, array46);
|
|
double[] array61 = array45;
|
|
array45 = array46;
|
|
array46 = array61;
|
|
}
|
|
flen7 = ScaleExpansionZeroElim(elen41, array29, num52, temp32a);
|
|
int elen42 = ScaleExpansionZeroElim(elen40, array44, num52, array35);
|
|
elen18 = ScaleExpansionZeroElim(elen42, array35, 2.0 * num2, temp16a);
|
|
int flen6 = ScaleExpansionZeroElim(elen42, array35, num52, temp16b);
|
|
int flen9 = FastExpansionSumZeroElim(elen18, temp16a, flen6, temp16b, temp32b);
|
|
int flen10 = FastExpansionSumZeroElim(flen7, temp32a, flen9, temp32b, temp64);
|
|
num47 = FastExpansionSumZeroElim(num47, array45, flen10, temp64, array46);
|
|
double[] array62 = array45;
|
|
array45 = array46;
|
|
array46 = array62;
|
|
}
|
|
if (num53 != 0.0)
|
|
{
|
|
int elen18 = ScaleExpansionZeroElim(elen4, array24, num53, temp16a);
|
|
int elen43 = ScaleExpansionZeroElim(elen39, array41, num53, array30);
|
|
int flen7 = ScaleExpansionZeroElim(elen43, array30, 2.0 * num5, temp32a);
|
|
int flen8 = FastExpansionSumZeroElim(elen18, temp16a, flen7, temp32a, temp48);
|
|
num47 = FastExpansionSumZeroElim(num47, array45, flen8, temp48, array46);
|
|
double[] array63 = array45;
|
|
array45 = array46;
|
|
array46 = array63;
|
|
flen7 = ScaleExpansionZeroElim(elen43, array30, num53, temp32a);
|
|
int elen44 = ScaleExpansionZeroElim(elen40, array44, num53, array36);
|
|
elen18 = ScaleExpansionZeroElim(elen44, array36, 2.0 * num5, temp16a);
|
|
int flen6 = ScaleExpansionZeroElim(elen44, array36, num53, temp16b);
|
|
int flen9 = FastExpansionSumZeroElim(elen18, temp16a, flen6, temp16b, temp32b);
|
|
int flen10 = FastExpansionSumZeroElim(flen7, temp32a, flen9, temp32b, temp64);
|
|
num47 = FastExpansionSumZeroElim(num47, array45, flen10, temp64, array46);
|
|
double[] array64 = array45;
|
|
array45 = array46;
|
|
array46 = array64;
|
|
}
|
|
}
|
|
if (num54 != 0.0 || num55 != 0.0)
|
|
{
|
|
int elen45;
|
|
int elen46;
|
|
if (num50 != 0.0 || num51 != 0.0 || num52 != 0.0 || num53 != 0.0)
|
|
{
|
|
double num77 = num50 * num5;
|
|
double num110 = splitter * num50;
|
|
num9 = num110 - num50;
|
|
num10 = num110 - num9;
|
|
num11 = num50 - num10;
|
|
double num111 = splitter * num5;
|
|
num9 = num111 - num5;
|
|
num13 = num111 - num9;
|
|
num14 = num5 - num13;
|
|
num15 = num77 - num10 * num13 - num11 * num13 - num10 * num14;
|
|
double num80 = num11 * num14 - num15;
|
|
double num81 = num * num53;
|
|
double num112 = splitter * num;
|
|
num9 = num112 - num;
|
|
num10 = num112 - num9;
|
|
num11 = num - num10;
|
|
double num113 = splitter * num53;
|
|
num9 = num113 - num53;
|
|
num13 = num113 - num9;
|
|
num14 = num53 - num13;
|
|
num15 = num81 - num10 * num13 - num11 * num13 - num10 * num14;
|
|
double num84 = num11 * num14 - num15;
|
|
num21 = num80 + num84;
|
|
num22 = num21 - num80;
|
|
num23 = num21 - num22;
|
|
num24 = num84 - num22;
|
|
num25 = num80 - num23;
|
|
array7[0] = num25 + num24;
|
|
num26 = num77 + num21;
|
|
num22 = num26 - num77;
|
|
num23 = num26 - num22;
|
|
num24 = num21 - num22;
|
|
num25 = num77 - num23;
|
|
num27 = num25 + num24;
|
|
num21 = num27 + num81;
|
|
num22 = num21 - num27;
|
|
num23 = num21 - num22;
|
|
num24 = num81 - num22;
|
|
num25 = num27 - num23;
|
|
array7[1] = num25 + num24;
|
|
double num85 = num26 + num21;
|
|
num22 = num85 - num26;
|
|
num23 = num85 - num22;
|
|
num24 = num21 - num22;
|
|
num25 = num26 - num23;
|
|
array7[2] = num25 + num24;
|
|
array7[3] = num85;
|
|
double num86 = 0.0 - num4;
|
|
num77 = num52 * num86;
|
|
double num114 = splitter * num52;
|
|
num9 = num114 - num52;
|
|
num10 = num114 - num9;
|
|
num11 = num52 - num10;
|
|
double num115 = splitter * num86;
|
|
num9 = num115 - num86;
|
|
num13 = num115 - num9;
|
|
num14 = num86 - num13;
|
|
num15 = num77 - num10 * num13 - num11 * num13 - num10 * num14;
|
|
num80 = num11 * num14 - num15;
|
|
num86 = 0.0 - num51;
|
|
num81 = num2 * num86;
|
|
double num116 = splitter * num2;
|
|
num9 = num116 - num2;
|
|
num10 = num116 - num9;
|
|
num11 = num2 - num10;
|
|
double num117 = splitter * num86;
|
|
num9 = num117 - num86;
|
|
num13 = num117 - num9;
|
|
num14 = num86 - num13;
|
|
num15 = num81 - num10 * num13 - num11 * num13 - num10 * num14;
|
|
num84 = num11 * num14 - num15;
|
|
num21 = num80 + num84;
|
|
num22 = num21 - num80;
|
|
num23 = num21 - num22;
|
|
num24 = num84 - num22;
|
|
num25 = num80 - num23;
|
|
array8[0] = num25 + num24;
|
|
num26 = num77 + num21;
|
|
num22 = num26 - num77;
|
|
num23 = num26 - num22;
|
|
num24 = num21 - num22;
|
|
num25 = num77 - num23;
|
|
num27 = num25 + num24;
|
|
num21 = num27 + num81;
|
|
num22 = num21 - num27;
|
|
num23 = num21 - num22;
|
|
num24 = num81 - num22;
|
|
num25 = num27 - num23;
|
|
array8[1] = num25 + num24;
|
|
double num91 = num26 + num21;
|
|
num22 = num91 - num26;
|
|
num23 = num91 - num22;
|
|
num24 = num21 - num22;
|
|
num25 = num26 - num23;
|
|
array8[2] = num25 + num24;
|
|
array8[3] = num91;
|
|
elen45 = FastExpansionSumZeroElim(4, array7, 4, array8, array39);
|
|
num77 = num50 * num53;
|
|
double num118 = splitter * num50;
|
|
num9 = num118 - num50;
|
|
num10 = num118 - num9;
|
|
num11 = num50 - num10;
|
|
double num119 = splitter * num53;
|
|
num9 = num119 - num53;
|
|
num13 = num119 - num9;
|
|
num14 = num53 - num13;
|
|
num15 = num77 - num10 * num13 - num11 * num13 - num10 * num14;
|
|
num80 = num11 * num14 - num15;
|
|
num81 = num52 * num51;
|
|
double num120 = splitter * num52;
|
|
num9 = num120 - num52;
|
|
num10 = num120 - num9;
|
|
num11 = num52 - num10;
|
|
double num121 = splitter * num51;
|
|
num9 = num121 - num51;
|
|
num13 = num121 - num9;
|
|
num14 = num51 - num13;
|
|
num15 = num81 - num10 * num13 - num11 * num13 - num10 * num14;
|
|
num84 = num11 * num14 - num15;
|
|
num21 = num80 - num84;
|
|
num22 = num80 - num21;
|
|
num23 = num21 + num22;
|
|
num24 = num22 - num84;
|
|
num25 = num80 - num23;
|
|
array42[0] = num25 + num24;
|
|
num26 = num77 + num21;
|
|
num22 = num26 - num77;
|
|
num23 = num26 - num22;
|
|
num24 = num21 - num22;
|
|
num25 = num77 - num23;
|
|
num27 = num25 + num24;
|
|
num21 = num27 - num81;
|
|
num22 = num27 - num21;
|
|
num23 = num21 + num22;
|
|
num24 = num22 - num81;
|
|
num25 = num27 - num23;
|
|
array42[1] = num25 + num24;
|
|
double num122 = num26 + num21;
|
|
num22 = num122 - num26;
|
|
num23 = num122 - num22;
|
|
num24 = num21 - num22;
|
|
num25 = num26 - num23;
|
|
array42[2] = num25 + num24;
|
|
array42[3] = num122;
|
|
elen46 = 4;
|
|
}
|
|
else
|
|
{
|
|
array39[0] = 0.0;
|
|
elen45 = 1;
|
|
array42[0] = 0.0;
|
|
elen46 = 1;
|
|
}
|
|
if (num54 != 0.0)
|
|
{
|
|
int elen18 = ScaleExpansionZeroElim(elen5, array25, num54, temp16a);
|
|
int elen47 = ScaleExpansionZeroElim(elen45, array39, num54, array31);
|
|
int flen7 = ScaleExpansionZeroElim(elen47, array31, 2.0 * num3, temp32a);
|
|
int flen8 = FastExpansionSumZeroElim(elen18, temp16a, flen7, temp32a, temp48);
|
|
num47 = FastExpansionSumZeroElim(num47, array45, flen8, temp48, array46);
|
|
double[] array65 = array45;
|
|
array45 = array46;
|
|
array46 = array65;
|
|
if (num51 != 0.0)
|
|
{
|
|
int elen35 = ScaleExpansionZeroElim(4, array5, num54, temp8);
|
|
elen18 = ScaleExpansionZeroElim(elen35, temp8, num51, temp16a);
|
|
num47 = FastExpansionSumZeroElim(num47, array45, elen18, temp16a, array46);
|
|
double[] array66 = array45;
|
|
array45 = array46;
|
|
array46 = array66;
|
|
}
|
|
if (num53 != 0.0)
|
|
{
|
|
int elen35 = ScaleExpansionZeroElim(4, array4, 0.0 - num54, temp8);
|
|
elen18 = ScaleExpansionZeroElim(elen35, temp8, num53, temp16a);
|
|
num47 = FastExpansionSumZeroElim(num47, array45, elen18, temp16a, array46);
|
|
double[] array67 = array45;
|
|
array45 = array46;
|
|
array46 = array67;
|
|
}
|
|
flen7 = ScaleExpansionZeroElim(elen47, array31, num54, temp32a);
|
|
int elen48 = ScaleExpansionZeroElim(elen46, array42, num54, array37);
|
|
elen18 = ScaleExpansionZeroElim(elen48, array37, 2.0 * num3, temp16a);
|
|
int flen6 = ScaleExpansionZeroElim(elen48, array37, num54, temp16b);
|
|
int flen9 = FastExpansionSumZeroElim(elen18, temp16a, flen6, temp16b, temp32b);
|
|
int flen10 = FastExpansionSumZeroElim(flen7, temp32a, flen9, temp32b, temp64);
|
|
num47 = FastExpansionSumZeroElim(num47, array45, flen10, temp64, array46);
|
|
double[] array68 = array45;
|
|
array45 = array46;
|
|
array46 = array68;
|
|
}
|
|
if (num55 != 0.0)
|
|
{
|
|
int elen18 = ScaleExpansionZeroElim(elen6, array26, num55, temp16a);
|
|
int elen49 = ScaleExpansionZeroElim(elen45, array39, num55, array32);
|
|
int flen7 = ScaleExpansionZeroElim(elen49, array32, 2.0 * num6, temp32a);
|
|
int flen8 = FastExpansionSumZeroElim(elen18, temp16a, flen7, temp32a, temp48);
|
|
num47 = FastExpansionSumZeroElim(num47, array45, flen8, temp48, array46);
|
|
double[] array69 = array45;
|
|
array45 = array46;
|
|
array46 = array69;
|
|
flen7 = ScaleExpansionZeroElim(elen49, array32, num55, temp32a);
|
|
int elen50 = ScaleExpansionZeroElim(elen46, array42, num55, array38);
|
|
elen18 = ScaleExpansionZeroElim(elen50, array38, 2.0 * num6, temp16a);
|
|
int flen6 = ScaleExpansionZeroElim(elen50, array38, num55, temp16b);
|
|
int flen9 = FastExpansionSumZeroElim(elen18, temp16a, flen6, temp16b, temp32b);
|
|
int flen10 = FastExpansionSumZeroElim(flen7, temp32a, flen9, temp32b, temp64);
|
|
num47 = FastExpansionSumZeroElim(num47, array45, flen10, temp64, array46);
|
|
double[] array70 = array45;
|
|
array45 = array46;
|
|
array46 = array70;
|
|
}
|
|
}
|
|
return array45[num47 - 1];
|
|
}
|
|
|
|
private void AllocateWorkspace()
|
|
{
|
|
fin1 = new double[1152];
|
|
fin2 = new double[1152];
|
|
abdet = new double[64];
|
|
axbc = new double[8];
|
|
axxbc = new double[16];
|
|
aybc = new double[8];
|
|
ayybc = new double[16];
|
|
adet = new double[32];
|
|
bxca = new double[8];
|
|
bxxca = new double[16];
|
|
byca = new double[8];
|
|
byyca = new double[16];
|
|
bdet = new double[32];
|
|
cxab = new double[8];
|
|
cxxab = new double[16];
|
|
cyab = new double[8];
|
|
cyyab = new double[16];
|
|
cdet = new double[32];
|
|
temp8 = new double[8];
|
|
temp16a = new double[16];
|
|
temp16b = new double[16];
|
|
temp16c = new double[16];
|
|
temp32a = new double[32];
|
|
temp32b = new double[32];
|
|
temp48 = new double[48];
|
|
temp64 = new double[64];
|
|
}
|
|
|
|
private void ClearWorkspace()
|
|
{
|
|
}
|
|
}
|
|
}
|