-
-
Save LingDong-/b7940e262e30eddbb4f32383d8a0d28d to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Image Warping | |
// with | |
// Closed Form Solutions to Homographic and Bilinear Methods | |
// and | |
// Some Other Funny Methods | |
final char HOMOGRAPHIC = 0; | |
final char BILINEAR = 1; | |
final char BIANGULAR = 2; | |
final char BARYCENTRIC = 3; | |
int method = HOMOGRAPHIC; // try change me | |
//Utils ----------------------------------------------- | |
float FLT_EPS = 0.01; | |
float DBL_EPS = 0.0001; | |
int sampler(PImage img, int x, int y){ | |
x = min(max(x,0),img.width-1); | |
y = min(max(y,0),img.height-1); | |
return img.pixels[y*img.width+x]; | |
} | |
int mix(int a, int b, float t){ | |
return color( | |
red(a)*(1-t)+red(b)*t, | |
green(a)*(1-t)+green(b)*t, | |
blue(a)*(1-t)+blue(b)*t | |
); | |
} | |
int sampler(PImage img, float x, float y){ | |
int x0 = (int)x; | |
int x1 = x0+1; | |
float xf = x - x0; | |
int y0 = (int)y; | |
int y1 = y0+1; | |
float yf = y - y0; | |
int a = sampler(img,x0,y0); | |
int b = sampler(img,x1,y0); | |
int c = sampler(img,x1,y1); | |
int d = sampler(img,x0,y1); | |
return mix(mix(a,b,xf),mix(d,c,xf),yf); | |
} | |
float disturb(float x){ | |
float EPS = FLT_EPS; | |
return x + random(-EPS,EPS); | |
} | |
double disturb(double x){ | |
double EPS = DBL_EPS; | |
return x + Math.random()*EPS*2-EPS; | |
} | |
int[] quadRoi( | |
float ax, float ay, float bx, float by, float cx, float cy, float dx, float dy | |
){ | |
int xmin = (int)floor(min(min(ax,bx),min(cx,dx))); | |
int xmax = (int)ceil (max(max(ax,bx),max(cx,dx))); | |
int ymin = (int)floor(min(min(ay,by),min(cy,dy))); | |
int ymax = (int)ceil (max(max(ay,by),max(cy,dy))); | |
return new int[]{xmin,ymin,xmax,ymax}; | |
} | |
//Quadcentric (Bilinear) method ----------------------------------------------- | |
float[] cart2quad( | |
float x,float y, | |
float ax,float ay, | |
float bx,float by, | |
float cx,float cy, | |
float dx,float dy){ | |
x = disturb( x); y = disturb( y); | |
ax = disturb(ax); ay = disturb(ay); | |
bx = disturb(bx); by = disturb(by); | |
cx = disturb(cx); cy = disturb(cy); | |
dx = disturb(dx); dy = disturb(dy); | |
float u = (ay*cx - ax*cy - 2*ay*dx + by*dx + 2*ax*dy - bx*dy + ay*x - | |
by*x + cy*x - dy*x - ax*y + bx*y - cx*y + dx*y + sqrt(pow(by*dx - bx*dy | |
- by*x + cy*x - dy*x + ay*(cx - 2*dx + x) + bx*y - cx*y + dx*y - | |
ax*(cy - 2*dy + y),2) + 4*(ay*(cx - dx) + by*(-cx + dx) - (ax - | |
bx)*(cy - dy))*(ay*(dx - x) + dy*x - dx*y + ax*(-dy + | |
y))))/(2*(ay*(cx - dx) + by*(-cx + dx) - (ax - bx)*(cy - dy))); | |
float v = (2*ay*bx - 2*ax*by - ay*cx + ax*cy + by*dx - bx*dy - ay*x + by*x - | |
cy*x + dy*x + ax*y - bx*y + cx*y - dx*y + sqrt(pow(by*dx - bx*dy - by*x | |
+ cy*x - dy*x + ay*(cx - 2*dx + x) + bx*y - cx*y + dx*y - ax*(cy - | |
2*dy + y),2) + 4*(ay*(cx - dx) + by*(-cx + dx) - (ax - bx)*(cy - | |
dy))*(ay*(dx - x) + dy*x - dx*y + ax*(-dy + y))))/(2*(ay*(bx - cx) + | |
ax*(-by + cy) + by*dx - cy*dx - bx*dy + cx*dy)); | |
return new float[]{u,v}; | |
} | |
float[] cart2quadParams( | |
float ax,float ay, | |
float bx,float by, | |
float cx,float cy, | |
float dx,float dy | |
){ | |
float n = by*dx-bx*dy; | |
float k = 2* ((ay*(cx - dx) + by*(-cx + dx) - (ax - bx)*(cy - dy))); | |
float d = (2*(ay*(bx - cx) + ax*(-by + cy) + by*dx - cy*dx - bx*dy + cx*dy)); | |
float s = ax-bx+cx-dx; | |
float r = ay-by+cy-dy; | |
if (k == 0 || d == 0){ | |
float EPS = FLT_EPS; | |
if (k == 0){ | |
cx -= EPS; | |
ax -= EPS; | |
cy -= EPS; | |
}else{ | |
bx -= EPS; | |
by -= EPS; | |
} | |
return cart2quadParams(ax,ay,bx,by,cx,cy,dx,dy); | |
} | |
return new float[]{ax,ay,bx,by,cx,cy,dx,dy,n,k,d,s,r}; | |
} | |
float[] cart2quadFromParams( | |
float x,float y,float[]P){ | |
float ax = P[0], ay = P[1], bx = P[2], by = P[3], cx = P[4], cy = P[5]; | |
float dx = P[6], dy = P[7], n = P[8], k = P[9], d = P[10], s = P[11], r = P[12]; | |
r *= x; | |
s *= y; | |
float f = n + r + ay*(cx - 2*dx) - s - ax*(cy - 2*dy); | |
float t = sqrt(f*f + 2*k*(ay*(dx - x) + dy*x - dx*y + ax*(-dy + y))); | |
float m = r - s; | |
float q = n + t; | |
float u = (ay*cx - ax*cy - 2*ay*dx + 2*ax*dy + q + m)/k; | |
float v = (2*ay*bx - 2*ax*by - ay*cx + ax*cy + q - m)/d; | |
return new float[]{u,v}; | |
} | |
float[] quad2cart( | |
float u,float v, | |
float ax,float ay, | |
float bx,float by, | |
float cx,float cy, | |
float dx,float dy){ | |
float x = (ax*(1-u)+bx*u)*(1-v)+(dx*(1-u)+cx*u)*v; | |
float y = (ay*(1-v)+dy*v)*(1-u)+(by*(1-v)+cy*v)*u; | |
return new float[]{x,y}; | |
} | |
void warpQuadcentric(PImage src, PImage dst, | |
float ax0, float ay0, float bx0, float by0, float cx0, float cy0, float dx0, float dy0, | |
float ax1, float ay1, float bx1, float by1, float cx1, float cy1, float dx1, float dy1 | |
){ | |
src.loadPixels(); | |
dst.loadPixels(); | |
int[] roi = quadRoi(ax1,ay1,bx1,by1,cx1,cy1,dx1,dy1); | |
float[] P = cart2quadParams(ax1,ay1,bx1,by1,cx1,cy1,dx1,dy1); | |
for (int i = roi[1]; i <= roi[3]; i++){ | |
if (i < 0 || i > dst.height) continue; | |
for (int j = roi[0]; j <= roi[2]; j++){ | |
if (j < 0 || j > dst.width) continue; | |
//float[] uv = cart2quad(j,i,ax1,ay1,bx1,by1,cx1,cy1,dx1,dy1); | |
float[] uv = cart2quadFromParams(j,i,P); | |
if (Float.isNaN(uv[0]) || Float.isNaN(uv[1]) || uv[0] < 0 || uv[0] > 1 || uv[1] < 0 || uv[1] > 1) continue; | |
float[] xy = quad2cart(uv[0],uv[1],ax0,ay0,bx0,by0,cx0,cy0,dx0,dy0); | |
int val = sampler(src,xy[0],xy[1]); | |
dst.pixels[i*dst.width+j] = val; | |
} | |
} | |
dst.updatePixels(); | |
} | |
//Barycentric method ----------------------------------------------- | |
//(Not suitable solution, illustrative purpose only) | |
float[] cart2bary(float x,float y,float ax,float ay,float bx,float by,float cx,float cy){ | |
float ax_cx = ax-cx; | |
float ay_cy = ay-cy; | |
float x_cx = x-cx; | |
float y_cy = y-cy; | |
float bx_cx = bx-cx; | |
float by_cy = by-cy; | |
float d = ((by_cy)*ax_cx-(bx_cx)*ay_cy); | |
float u = 0; | |
float v = 0; | |
if (d != 0){ | |
u = ((x_cx)*by_cy-(y_cy)*bx_cx)/d; | |
v = ((y_cy)*ax_cx-(x_cx)*ay_cy)/d; | |
} | |
return new float[]{u,v}; | |
} | |
float[] bary2cart(float u,float v,float ax,float ay,float bx,float by,float cx,float cy){ | |
float t = 1 - u - v; | |
float x = ax * u + bx * v + cx * t; | |
float y = ay * u + by * v + cy * t; | |
return new float[]{x,y}; | |
} | |
void warpBarycentric(PImage src, PImage dst, | |
float ax0, float ay0, float bx0, float by0, float cx0, float cy0, float dx0, float dy0, | |
float ax1, float ay1, float bx1, float by1, float cx1, float cy1, float dx1, float dy1 | |
){ | |
src.loadPixels(); | |
dst.loadPixels(); | |
int[] roi = quadRoi(ax1,ay1,bx1,by1,cx1,cy1,dx1,dy1); | |
for (int i = roi[1]; i <= roi[3]; i++){ | |
if (i < 0 || i > dst.height) continue; | |
for (int j = roi[0]; j <= roi[2]; j++){ | |
if (j < 0 || j > dst.width) continue; | |
boolean up = true; | |
float[] uv = cart2bary(j,i,ax1,ay1,bx1,by1,cx1,cy1); | |
if (uv[0] < 0 || uv[1] < 0 || (1-uv[0]-uv[1]) < 0){ | |
uv = cart2bary(j,i,ax1,ay1,dx1,dy1,cx1,cy1); | |
up = false; | |
} | |
if (uv[0] < 0 || uv[1] < 0 || (1-uv[0]-uv[1]) < 0){ | |
continue; | |
} | |
float[] xy; | |
if (up){ | |
xy = bary2cart(uv[0],uv[1],ax0,ay0,bx0,by0,cx0,cy0); | |
}else{ | |
xy = bary2cart(uv[0],uv[1],ax0,ay0,dx0,dy0,cx0,cy0); | |
} | |
int val = sampler(src,xy[0],xy[1]); | |
dst.pixels[i*dst.width+j] = val; | |
} | |
} | |
dst.updatePixels(); | |
} | |
//Homography method ----------------------------------------------- | |
float[] computeHMatrix( | |
double x1,double y1,double x2,double y2,double x3,double y3,double x4,double y4, | |
double u1,double v1,double u2,double v2,double u3,double v3,double u4,double v4 | |
){ | |
x1 = disturb(x1); y1 = disturb(y1); | |
x2 = disturb(x2); y2 = disturb(y2); | |
x3 = disturb(x3); y3 = disturb(y3); | |
x4 = disturb(x4); y4 = disturb(y4); | |
u1 = disturb(u1); v1 = disturb(v1); | |
u2 = disturb(u2); v2 = disturb(v2); | |
u3 = disturb(u3); v3 = disturb(v3); | |
u4 = disturb(u4); v4 = disturb(v4); | |
double a = -((-(v1*(v1 - v2)*(u3*v1 - u1*v3)*(u3*(v1 - v2) + u1*(v2 - v3) | |
+ u2*(-v1 + v3))*(x1*x1)*x3*(-(u3*v1*v2*x1*x3) + u3*v1*v4*x1*x3 + | |
u3*v1*v2*x2*x3 - u3*v2*v4*x2*x3 + u4*v1*v2*x1*x4 - u4*v1*v3*x1*x4 - | |
u4*v1*v2*x2*x4 + u4*v2*v3*x2*x4 + u4*v1*v3*x3*x4 - u4*v2*v3*x3*x4 - | |
u3*v1*v4*x3*x4 + u3*v2*v4*x3*x4 + u2*x2*(v1*v3*(x1 - x3) + v3*v4*(x3 | |
- x4) + v1*v4*(-x1 + x4)) + u1*x1*(v2*v3*(-x2 + x3) + v2*v4*(x2 - x4) | |
+ v3*v4*(-x3 + x4)))*(u2*v3*x2*x3*y1 - u2*v4*x2*x3*y1 - | |
u1*v3*x1*x3*y2 + u1*v4*x1*x3*y2 - u2*v1*x1*x2*y3 + u1*v2*x1*x2*y3 - | |
u1*v4*x1*x2*y3 + u2*v4*x1*x2*y3 + u2*v1*x1*x2*y4 - u1*v2*x1*x2*y4 + | |
u1*v4*x1*x2*y4 - u2*v4*x1*x2*y4 + u1*v3*x1*x3*y4 - u1*v4*x1*x3*y4 - | |
u2*v3*x2*x3*y4 + u2*v4*x2*x3*y4 + u3*x3*(v1*x1*(y2 - y4) + v2*x2*(-y1 | |
+ y4) + v4*(x2*y1 - x1*y2 + x1*y4 - x2*y4)) + u4*(v3*x3*(-(x2*y1) + | |
x1*y2 - x1*y4 + x2*y4) + v1*x1*(-(x3*y2) + x2*y3 - x2*y4 + x3*y4) + | |
v2*x2*(x3*(y1 - y4) + x1*(-y3 + y4))))) - (u1*v2*x1*x2*x3 - | |
u1*v3*x1*x2*x3 - u4*v1*x1*x2*x4 - u1*v2*x1*x2*x4 + u4*v2*x1*x2*x4 + | |
u1*v4*x1*x2*x4 + u4*v1*x1*x3*x4 + u1*v3*x1*x3*x4 - u4*v3*x1*x3*x4 - | |
u1*v4*x1*x3*x4 - u4*v2*x2*x3*x4 + u4*v3*x2*x3*x4 + u3*x3*(v1*x1*(x2 - | |
x4) + v4*(x1 - x2)*x4 + v2*x2*(-x1 + x4)) + u2*x2*(v3*x3*(x1 - x4) + | |
v4*(-x1 + x3)*x4 + v1*x1*(-x3 + x4)))*(v1*x1*(-(u1*v2*x1*x2) - | |
u3*v1*x1*x3 + u1*v3*x1*x3 + u3*v2*x2*x3 + u2*x2*(v1*x1 - | |
v3*x3))*(-(v3*(-x1 + x3)*(v1*(u4*(-v1 + v2) + u2*(v1 - v4) + u1*(-v2 | |
+ v4))*(u1*(-v2 + v3)*y1 + u2*(v1 - v3)*y2 + u3*(-v1 + v2)*y3) - | |
u1*(u4*(v1 - v2) + u1*(v2 - v4) + u2*(-v1 + v4))*(v1*v2*(y1 - y2) + | |
v2*v3*(y2 - y3) + v1*v3*(-y1 + y3)) - v1*(u3*(-v1 + v2) + u2*(v1 - | |
v3) + u1*(-v2 + v3))*(u1*(-v2 + v4)*y1 + u2*(v1 - v4)*y2 + u4*(-v1 + | |
v2)*y4) + u1*(u3*(v1 - v2) + u1*(v2 - v3) + u2*(-v1 + v3))*(v1*v2*(y1 | |
- y2) + v2*v4*(y2 - y4) + v1*v4*(-y1 + y4)))) + (u3*v1 - | |
u1*v3)*x3*((u4*(v1 - v2) + u1*(v2 - v4) + u2*(-v1 + v4))*(v1*v2*(y1 - | |
y2) + v2*v3*(y2 - y3) + v1*v3*(-y1 + y3)) + (u3*(-v1 + v2) + u2*(v1 - | |
v3) + u1*(-v2 + v3))*(v1*v2*(y1 - y2) + v2*v4*(y2 - y4) + v1*v4*(-y1 | |
+ y4)))) - (u2*v1*v3*x2*(x1 - x3) + u3*v1*v2*(-x1 + x2)*x3 + | |
u1*v2*v3*x1*(-x2 + x3))*(-(x1*(-(v1*x1) + v3*x3)*(v1*(u4*(-v1 + v2) + | |
u2*(v1 - v4) + u1*(-v2 + v4))*(u1*(-v2 + v3)*y1 + u2*(v1 - v3)*y2 + | |
u3*(-v1 + v2)*y3) - u1*(u4*(v1 - v2) + u1*(v2 - v4) + u2*(-v1 + | |
v4))*(v1*v2*(y1 - y2) + v2*v3*(y2 - y3) + v1*v3*(-y1 + y3)) - | |
v1*(u3*(-v1 + v2) + u2*(v1 - v3) + u1*(-v2 + v3))*(u1*(-v2 + v4)*y1 + | |
u2*(v1 - v4)*y2 + u4*(-v1 + v2)*y4) + u1*(u3*(v1 - v2) + u1*(v2 - v3) | |
+ u2*(-v1 + v3))*(v1*v2*(y1 - y2) + v2*v4*(y2 - y4) + v1*v4*(-y1 + | |
y4)))) + (u3*v1 - u1*v3)*x1*x3*((u4*(v1 - v2) + u1*(v2 - v4) + | |
u2*(-v1 + v4))*(v1*v2*(y1 - y2) + v2*v3*(y2 - y3) + v1*v3*(-y1 + y3)) | |
+ (u3*(-v1 + v2) + u2*(v1 - v3) + u1*(-v2 + v3))*(v1*v2*(y1 - y2) + | |
v2*v4*(y2 - y4) + v1*v4*(-y1 + y4))))))/(-((u1*u4*(v2*x2 - v3*x3)*(x1 | |
- x4) + u3*u4*(v1*x1 - v2*x2)*(x3 - x4) - u1*u3*(x1 - x3)*(v2*x2 - | |
v4*x4) + u2*(-(u4*(v1*x1 - v3*x3)*(x2 - x4)) + u3*(x2 - x3)*(v1*x1 - | |
v4*x4) + u1*(x1 - x2)*(v3*x3 - v4*x4)))*(v1*x1*(-(u1*v2*x1*x2) - | |
u3*v1*x1*x3 + u1*v3*x1*x3 + u3*v2*x2*x3 + u2*x2*(v1*x1 - | |
v3*x3))*(-(v3*(-x1 + x3)*(v1*(u4*(-v1 + v2) + u2*(v1 - v4) + u1*(-v2 | |
+ v4))*(u1*(-v2 + v3)*y1 + u2*(v1 - v3)*y2 + u3*(-v1 + v2)*y3) - | |
u1*(u4*(v1 - v2) + u1*(v2 - v4) + u2*(-v1 + v4))*(v1*v2*(y1 - y2) + | |
v2*v3*(y2 - y3) + v1*v3*(-y1 + y3)) - v1*(u3*(-v1 + v2) + u2*(v1 - | |
v3) + u1*(-v2 + v3))*(u1*(-v2 + v4)*y1 + u2*(v1 - v4)*y2 + u4*(-v1 + | |
v2)*y4) + u1*(u3*(v1 - v2) + u1*(v2 - v3) + u2*(-v1 + v3))*(v1*v2*(y1 | |
- y2) + v2*v4*(y2 - y4) + v1*v4*(-y1 + y4)))) + (u3*v1 - | |
u1*v3)*x3*((u4*(v1 - v2) + u1*(v2 - v4) + u2*(-v1 + v4))*(v1*v2*(y1 - | |
y2) + v2*v3*(y2 - y3) + v1*v3*(-y1 + y3)) + (u3*(-v1 + v2) + u2*(v1 - | |
v3) + u1*(-v2 + v3))*(v1*v2*(y1 - y2) + v2*v4*(y2 - y4) + v1*v4*(-y1 | |
+ y4)))) - (u2*v1*v3*x2*(x1 - x3) + u3*v1*v2*(-x1 + x2)*x3 + | |
u1*v2*v3*x1*(-x2 + x3))*(-(x1*(-(v1*x1) + v3*x3)*(v1*(u4*(-v1 + v2) + | |
u2*(v1 - v4) + u1*(-v2 + v4))*(u1*(-v2 + v3)*y1 + u2*(v1 - v3)*y2 + | |
u3*(-v1 + v2)*y3) - u1*(u4*(v1 - v2) + u1*(v2 - v4) + u2*(-v1 + | |
v4))*(v1*v2*(y1 - y2) + v2*v3*(y2 - y3) + v1*v3*(-y1 + y3)) - | |
v1*(u3*(-v1 + v2) + u2*(v1 - v3) + u1*(-v2 + v3))*(u1*(-v2 + v4)*y1 + | |
u2*(v1 - v4)*y2 + u4*(-v1 + v2)*y4) + u1*(u3*(v1 - v2) + u1*(v2 - v3) | |
+ u2*(-v1 + v3))*(v1*v2*(y1 - y2) + v2*v4*(y2 - y4) + v1*v4*(-y1 + | |
y4)))) + (u3*v1 - u1*v3)*x1*x3*((u4*(v1 - v2) + u1*(v2 - v4) + | |
u2*(-v1 + v4))*(v1*v2*(y1 - y2) + v2*v3*(y2 - y3) + v1*v3*(-y1 + y3)) | |
+ (u3*(-v1 + v2) + u2*(v1 - v3) + u1*(-v2 + v3))*(v1*v2*(y1 - y2) + | |
v2*v4*(y2 - y4) + v1*v4*(-y1 + y4)))))) + (-(u3*v1*v2*x1*x3) + | |
u3*v1*v4*x1*x3 + u3*v1*v2*x2*x3 - u3*v2*v4*x2*x3 + u4*v1*v2*x1*x4 - | |
u4*v1*v3*x1*x4 - u4*v1*v2*x2*x4 + u4*v2*v3*x2*x4 + u4*v1*v3*x3*x4 - | |
u4*v2*v3*x3*x4 - u3*v1*v4*x3*x4 + u3*v2*v4*x3*x4 + u2*x2*(v1*v3*(x1 - | |
x3) + v3*v4*(x3 - x4) + v1*v4*(-x1 + x4)) + u1*x1*(v2*v3*(-x2 + x3) + | |
v2*v4*(x2 - x4) + v3*v4*(-x3 + x4)))*(-((u2*u3*v1*x1*(x2 - x3) + | |
u1*u2*v3*(x1 - x2)*x3 + u1*u3*v2*x2*(-x1 + x3))*(-(x1*(-(v1*x1) + | |
v3*x3)*(v1*(u4*(-v1 + v2) + u2*(v1 - v4) + u1*(-v2 + v4))*(u1*(-v2 + | |
v3)*y1 + u2*(v1 - v3)*y2 + u3*(-v1 + v2)*y3) - u1*(u4*(v1 - v2) + | |
u1*(v2 - v4) + u2*(-v1 + v4))*(v1*v2*(y1 - y2) + v2*v3*(y2 - y3) + | |
v1*v3*(-y1 + y3)) - v1*(u3*(-v1 + v2) + u2*(v1 - v3) + u1*(-v2 + | |
v3))*(u1*(-v2 + v4)*y1 + u2*(v1 - v4)*y2 + u4*(-v1 + v2)*y4) + | |
u1*(u3*(v1 - v2) + u1*(v2 - v3) + u2*(-v1 + v3))*(v1*v2*(y1 - y2) + | |
v2*v4*(y2 - y4) + v1*v4*(-y1 + y4)))) + (u3*v1 - | |
u1*v3)*x1*x3*((u4*(v1 - v2) + u1*(v2 - v4) + u2*(-v1 + | |
v4))*(v1*v2*(y1 - y2) + v2*v3*(y2 - y3) + v1*v3*(-y1 + y3)) + | |
(u3*(-v1 + v2) + u2*(v1 - v3) + u1*(-v2 + v3))*(v1*v2*(y1 - y2) + | |
v2*v4*(y2 - y4) + v1*v4*(-y1 + y4))))) + (-(u1*v2*x1*x2) - | |
u3*v1*x1*x3 + u1*v3*x1*x3 + u3*v2*x2*x3 + u2*x2*(v1*x1 - | |
v3*x3))*(-(x1*(-(u3*v1*x1) + u1*v3*x3)*(v1*(u4*(-v1 + v2) + u2*(v1 - | |
v4) + u1*(-v2 + v4))*(u1*(-v2 + v3)*y1 + u2*(v1 - v3)*y2 + u3*(-v1 + | |
v2)*y3) - u1*(u4*(v1 - v2) + u1*(v2 - v4) + u2*(-v1 + v4))*(v1*v2*(y1 | |
- y2) + v2*v3*(y2 - y3) + v1*v3*(-y1 + y3)) - v1*(u3*(-v1 + v2) + | |
u2*(v1 - v3) + u1*(-v2 + v3))*(u1*(-v2 + v4)*y1 + u2*(v1 - v4)*y2 + | |
u4*(-v1 + v2)*y4) + u1*(u3*(v1 - v2) + u1*(v2 - v3) + u2*(-v1 + | |
v3))*(v1*v2*(y1 - y2) + v2*v4*(y2 - y4) + v1*v4*(-y1 + y4)))) + | |
u1*(u3*v1 - u1*v3)*x1*x3*((u4*(v1 - v2) + u1*(v2 - v4) + u2*(-v1 + | |
v4))*(v1*v2*(y1 - y2) + v2*v3*(y2 - y3) + v1*v3*(-y1 + y3)) + | |
(u3*(-v1 + v2) + u2*(v1 - v3) + u1*(-v2 + v3))*(v1*v2*(y1 - y2) + | |
v2*v4*(y2 - y4) + v1*v4*(-y1 + y4))))))); | |
double b = (u1*v2*x1*x2*x3 - | |
u1*v3*x1*x2*x3 - u4*v1*x1*x2*x4 - u1*v2*x1*x2*x4 + u4*v2*x1*x2*x4 + | |
u1*v4*x1*x2*x4 + u4*v1*x1*x3*x4 + u1*v3*x1*x3*x4 - u4*v3*x1*x3*x4 - | |
u1*v4*x1*x3*x4 - u4*v2*x2*x3*x4 + u4*v3*x2*x3*x4 + u3*x3*(v1*x1*(x2 - | |
x4) + v4*(x1 - x2)*x4 + v2*x2*(-x1 + x4)) + u2*x2*(v3*x3*(x1 - x4) + | |
v4*(-x1 + x3)*x4 + v1*x1*(-x3 + x4)))/(u3*v1*v2*x1*x3 - | |
u3*v1*v4*x1*x3 - u3*v1*v2*x2*x3 + u3*v2*v4*x2*x3 - u4*v1*v2*x1*x4 + | |
u4*v1*v3*x1*x4 + u4*v1*v2*x2*x4 - u4*v2*v3*x2*x4 - u4*v1*v3*x3*x4 + | |
u4*v2*v3*x3*x4 + u3*v1*v4*x3*x4 - u3*v2*v4*x3*x4 + u1*x1*(v2*v3*(x2 - | |
x3) + v3*v4*(x3 - x4) + v2*v4*(-x2 + x4)) + u2*x2*(v1*v3*(-x1 + x3) + | |
v1*v4*(x1 - x4) + v3*v4*(-x3 + x4))) + ((u1*u4*(v2*x2 - v3*x3)*(x1 - | |
x4) + u3*u4*(v1*x1 - v2*x2)*(x3 - x4) - u1*u3*(x1 - x3)*(v2*x2 - | |
v4*x4) + u2*(-(u4*(v1*x1 - v3*x3)*(x2 - x4)) + u3*(x2 - x3)*(v1*x1 - | |
v4*x4) + u1*(x1 - x2)*(v3*x3 - v4*x4)))*(-(v1*(v1 - v2)*(u3*v1 - | |
u1*v3)*(u3*(v1 - v2) + u1*(v2 - v3) + u2*(-v1 + | |
v3))*(x1*x1)*x3*(-(u3*v1*v2*x1*x3) + u3*v1*v4*x1*x3 + u3*v1*v2*x2*x3 - | |
u3*v2*v4*x2*x3 + u4*v1*v2*x1*x4 - u4*v1*v3*x1*x4 - u4*v1*v2*x2*x4 + | |
u4*v2*v3*x2*x4 + u4*v1*v3*x3*x4 - u4*v2*v3*x3*x4 - u3*v1*v4*x3*x4 + | |
u3*v2*v4*x3*x4 + u2*x2*(v1*v3*(x1 - x3) + v3*v4*(x3 - x4) + | |
v1*v4*(-x1 + x4)) + u1*x1*(v2*v3*(-x2 + x3) + v2*v4*(x2 - x4) + | |
v3*v4*(-x3 + x4)))*(u2*v3*x2*x3*y1 - u2*v4*x2*x3*y1 - u1*v3*x1*x3*y2 | |
+ u1*v4*x1*x3*y2 - u2*v1*x1*x2*y3 + u1*v2*x1*x2*y3 - u1*v4*x1*x2*y3 + | |
u2*v4*x1*x2*y3 + u2*v1*x1*x2*y4 - u1*v2*x1*x2*y4 + u1*v4*x1*x2*y4 - | |
u2*v4*x1*x2*y4 + u1*v3*x1*x3*y4 - u1*v4*x1*x3*y4 - u2*v3*x2*x3*y4 + | |
u2*v4*x2*x3*y4 + u3*x3*(v1*x1*(y2 - y4) + v2*x2*(-y1 + y4) + | |
v4*(x2*y1 - x1*y2 + x1*y4 - x2*y4)) + u4*(v3*x3*(-(x2*y1) + x1*y2 - | |
x1*y4 + x2*y4) + v1*x1*(-(x3*y2) + x2*y3 - x2*y4 + x3*y4) + | |
v2*x2*(x3*(y1 - y4) + x1*(-y3 + y4))))) - (u1*v2*x1*x2*x3 - | |
u1*v3*x1*x2*x3 - u4*v1*x1*x2*x4 - u1*v2*x1*x2*x4 + u4*v2*x1*x2*x4 + | |
u1*v4*x1*x2*x4 + u4*v1*x1*x3*x4 + u1*v3*x1*x3*x4 - u4*v3*x1*x3*x4 - | |
u1*v4*x1*x3*x4 - u4*v2*x2*x3*x4 + u4*v3*x2*x3*x4 + u3*x3*(v1*x1*(x2 - | |
x4) + v4*(x1 - x2)*x4 + v2*x2*(-x1 + x4)) + u2*x2*(v3*x3*(x1 - x4) + | |
v4*(-x1 + x3)*x4 + v1*x1*(-x3 + x4)))*(v1*x1*(-(u1*v2*x1*x2) - | |
u3*v1*x1*x3 + u1*v3*x1*x3 + u3*v2*x2*x3 + u2*x2*(v1*x1 - | |
v3*x3))*(-(v3*(-x1 + x3)*(v1*(u4*(-v1 + v2) + u2*(v1 - v4) + u1*(-v2 | |
+ v4))*(u1*(-v2 + v3)*y1 + u2*(v1 - v3)*y2 + u3*(-v1 + v2)*y3) - | |
u1*(u4*(v1 - v2) + u1*(v2 - v4) + u2*(-v1 + v4))*(v1*v2*(y1 - y2) + | |
v2*v3*(y2 - y3) + v1*v3*(-y1 + y3)) - v1*(u3*(-v1 + v2) + u2*(v1 - | |
v3) + u1*(-v2 + v3))*(u1*(-v2 + v4)*y1 + u2*(v1 - v4)*y2 + u4*(-v1 + | |
v2)*y4) + u1*(u3*(v1 - v2) + u1*(v2 - v3) + u2*(-v1 + v3))*(v1*v2*(y1 | |
- y2) + v2*v4*(y2 - y4) + v1*v4*(-y1 + y4)))) + (u3*v1 - | |
u1*v3)*x3*((u4*(v1 - v2) + u1*(v2 - v4) + u2*(-v1 + v4))*(v1*v2*(y1 - | |
y2) + v2*v3*(y2 - y3) + v1*v3*(-y1 + y3)) + (u3*(-v1 + v2) + u2*(v1 - | |
v3) + u1*(-v2 + v3))*(v1*v2*(y1 - y2) + v2*v4*(y2 - y4) + v1*v4*(-y1 | |
+ y4)))) - (u2*v1*v3*x2*(x1 - x3) + u3*v1*v2*(-x1 + x2)*x3 + | |
u1*v2*v3*x1*(-x2 + x3))*(-(x1*(-(v1*x1) + v3*x3)*(v1*(u4*(-v1 + v2) + | |
u2*(v1 - v4) + u1*(-v2 + v4))*(u1*(-v2 + v3)*y1 + u2*(v1 - v3)*y2 + | |
u3*(-v1 + v2)*y3) - u1*(u4*(v1 - v2) + u1*(v2 - v4) + u2*(-v1 + | |
v4))*(v1*v2*(y1 - y2) + v2*v3*(y2 - y3) + v1*v3*(-y1 + y3)) - | |
v1*(u3*(-v1 + v2) + u2*(v1 - v3) + u1*(-v2 + v3))*(u1*(-v2 + v4)*y1 + | |
u2*(v1 - v4)*y2 + u4*(-v1 + v2)*y4) + u1*(u3*(v1 - v2) + u1*(v2 - v3) | |
+ u2*(-v1 + v3))*(v1*v2*(y1 - y2) + v2*v4*(y2 - y4) + v1*v4*(-y1 + | |
y4)))) + (u3*v1 - u1*v3)*x1*x3*((u4*(v1 - v2) + u1*(v2 - v4) + | |
u2*(-v1 + v4))*(v1*v2*(y1 - y2) + v2*v3*(y2 - y3) + v1*v3*(-y1 + y3)) | |
+ (u3*(-v1 + v2) + u2*(v1 - v3) + u1*(-v2 + v3))*(v1*v2*(y1 - y2) + | |
v2*v4*(y2 - y4) + v1*v4*(-y1 + y4)))))))/((-(u3*v1*v2*x1*x3) + | |
u3*v1*v4*x1*x3 + u3*v1*v2*x2*x3 - u3*v2*v4*x2*x3 + u4*v1*v2*x1*x4 - | |
u4*v1*v3*x1*x4 - u4*v1*v2*x2*x4 + u4*v2*v3*x2*x4 + u4*v1*v3*x3*x4 - | |
u4*v2*v3*x3*x4 - u3*v1*v4*x3*x4 + u3*v2*v4*x3*x4 + u2*x2*(v1*v3*(x1 - | |
x3) + v3*v4*(x3 - x4) + v1*v4*(-x1 + x4)) + u1*x1*(v2*v3*(-x2 + x3) + | |
v2*v4*(x2 - x4) + v3*v4*(-x3 + x4)))*(-((u1*u4*(v2*x2 - v3*x3)*(x1 - | |
x4) + u3*u4*(v1*x1 - v2*x2)*(x3 - x4) - u1*u3*(x1 - x3)*(v2*x2 - | |
v4*x4) + u2*(-(u4*(v1*x1 - v3*x3)*(x2 - x4)) + u3*(x2 - x3)*(v1*x1 - | |
v4*x4) + u1*(x1 - x2)*(v3*x3 - v4*x4)))*(v1*x1*(-(u1*v2*x1*x2) - | |
u3*v1*x1*x3 + u1*v3*x1*x3 + u3*v2*x2*x3 + u2*x2*(v1*x1 - | |
v3*x3))*(-(v3*(-x1 + x3)*(v1*(u4*(-v1 + v2) + u2*(v1 - v4) + u1*(-v2 | |
+ v4))*(u1*(-v2 + v3)*y1 + u2*(v1 - v3)*y2 + u3*(-v1 + v2)*y3) - | |
u1*(u4*(v1 - v2) + u1*(v2 - v4) + u2*(-v1 + v4))*(v1*v2*(y1 - y2) + | |
v2*v3*(y2 - y3) + v1*v3*(-y1 + y3)) - v1*(u3*(-v1 + v2) + u2*(v1 - | |
v3) + u1*(-v2 + v3))*(u1*(-v2 + v4)*y1 + u2*(v1 - v4)*y2 + u4*(-v1 + | |
v2)*y4) + u1*(u3*(v1 - v2) + u1*(v2 - v3) + u2*(-v1 + v3))*(v1*v2*(y1 | |
- y2) + v2*v4*(y2 - y4) + v1*v4*(-y1 + y4)))) + (u3*v1 - | |
u1*v3)*x3*((u4*(v1 - v2) + u1*(v2 - v4) + u2*(-v1 + v4))*(v1*v2*(y1 - | |
y2) + v2*v3*(y2 - y3) + v1*v3*(-y1 + y3)) + (u3*(-v1 + v2) + u2*(v1 - | |
v3) + u1*(-v2 + v3))*(v1*v2*(y1 - y2) + v2*v4*(y2 - y4) + v1*v4*(-y1 | |
+ y4)))) - (u2*v1*v3*x2*(x1 - x3) + u3*v1*v2*(-x1 + x2)*x3 + | |
u1*v2*v3*x1*(-x2 + x3))*(-(x1*(-(v1*x1) + v3*x3)*(v1*(u4*(-v1 + v2) + | |
u2*(v1 - v4) + u1*(-v2 + v4))*(u1*(-v2 + v3)*y1 + u2*(v1 - v3)*y2 + | |
u3*(-v1 + v2)*y3) - u1*(u4*(v1 - v2) + u1*(v2 - v4) + u2*(-v1 + | |
v4))*(v1*v2*(y1 - y2) + v2*v3*(y2 - y3) + v1*v3*(-y1 + y3)) - | |
v1*(u3*(-v1 + v2) + u2*(v1 - v3) + u1*(-v2 + v3))*(u1*(-v2 + v4)*y1 + | |
u2*(v1 - v4)*y2 + u4*(-v1 + v2)*y4) + u1*(u3*(v1 - v2) + u1*(v2 - v3) | |
+ u2*(-v1 + v3))*(v1*v2*(y1 - y2) + v2*v4*(y2 - y4) + v1*v4*(-y1 + | |
y4)))) + (u3*v1 - u1*v3)*x1*x3*((u4*(v1 - v2) + u1*(v2 - v4) + | |
u2*(-v1 + v4))*(v1*v2*(y1 - y2) + v2*v3*(y2 - y3) + v1*v3*(-y1 + y3)) | |
+ (u3*(-v1 + v2) + u2*(v1 - v3) + u1*(-v2 + v3))*(v1*v2*(y1 - y2) + | |
v2*v4*(y2 - y4) + v1*v4*(-y1 + y4)))))) + (-(u3*v1*v2*x1*x3) + | |
u3*v1*v4*x1*x3 + u3*v1*v2*x2*x3 - u3*v2*v4*x2*x3 + u4*v1*v2*x1*x4 - | |
u4*v1*v3*x1*x4 - u4*v1*v2*x2*x4 + u4*v2*v3*x2*x4 + u4*v1*v3*x3*x4 - | |
u4*v2*v3*x3*x4 - u3*v1*v4*x3*x4 + u3*v2*v4*x3*x4 + u2*x2*(v1*v3*(x1 - | |
x3) + v3*v4*(x3 - x4) + v1*v4*(-x1 + x4)) + u1*x1*(v2*v3*(-x2 + x3) + | |
v2*v4*(x2 - x4) + v3*v4*(-x3 + x4)))*(-((u2*u3*v1*x1*(x2 - x3) + | |
u1*u2*v3*(x1 - x2)*x3 + u1*u3*v2*x2*(-x1 + x3))*(-(x1*(-(v1*x1) + | |
v3*x3)*(v1*(u4*(-v1 + v2) + u2*(v1 - v4) + u1*(-v2 + v4))*(u1*(-v2 + | |
v3)*y1 + u2*(v1 - v3)*y2 + u3*(-v1 + v2)*y3) - u1*(u4*(v1 - v2) + | |
u1*(v2 - v4) + u2*(-v1 + v4))*(v1*v2*(y1 - y2) + v2*v3*(y2 - y3) + | |
v1*v3*(-y1 + y3)) - v1*(u3*(-v1 + v2) + u2*(v1 - v3) + u1*(-v2 + | |
v3))*(u1*(-v2 + v4)*y1 + u2*(v1 - v4)*y2 + u4*(-v1 + v2)*y4) + | |
u1*(u3*(v1 - v2) + u1*(v2 - v3) + u2*(-v1 + v3))*(v1*v2*(y1 - y2) + | |
v2*v4*(y2 - y4) + v1*v4*(-y1 + y4)))) + (u3*v1 - | |
u1*v3)*x1*x3*((u4*(v1 - v2) + u1*(v2 - v4) + u2*(-v1 + | |
v4))*(v1*v2*(y1 - y2) + v2*v3*(y2 - y3) + v1*v3*(-y1 + y3)) + | |
(u3*(-v1 + v2) + u2*(v1 - v3) + u1*(-v2 + v3))*(v1*v2*(y1 - y2) + | |
v2*v4*(y2 - y4) + v1*v4*(-y1 + y4))))) + (-(u1*v2*x1*x2) - | |
u3*v1*x1*x3 + u1*v3*x1*x3 + u3*v2*x2*x3 + u2*x2*(v1*x1 - | |
v3*x3))*(-(x1*(-(u3*v1*x1) + u1*v3*x3)*(v1*(u4*(-v1 + v2) + u2*(v1 - | |
v4) + u1*(-v2 + v4))*(u1*(-v2 + v3)*y1 + u2*(v1 - v3)*y2 + u3*(-v1 + | |
v2)*y3) - u1*(u4*(v1 - v2) + u1*(v2 - v4) + u2*(-v1 + v4))*(v1*v2*(y1 | |
- y2) + v2*v3*(y2 - y3) + v1*v3*(-y1 + y3)) - v1*(u3*(-v1 + v2) + | |
u2*(v1 - v3) + u1*(-v2 + v3))*(u1*(-v2 + v4)*y1 + u2*(v1 - v4)*y2 + | |
u4*(-v1 + v2)*y4) + u1*(u3*(v1 - v2) + u1*(v2 - v3) + u2*(-v1 + | |
v3))*(v1*v2*(y1 - y2) + v2*v4*(y2 - y4) + v1*v4*(-y1 + y4)))) + | |
u1*(u3*v1 - u1*v3)*x1*x3*((u4*(v1 - v2) + u1*(v2 - v4) + u2*(-v1 + | |
v4))*(v1*v2*(y1 - y2) + v2*v3*(y2 - y3) + v1*v3*(-y1 + y3)) + | |
(u3*(-v1 + v2) + u2*(v1 - v3) + u1*(-v2 + v3))*(v1*v2*(y1 - y2) + | |
v2*v4*(y2 - y4) + v1*v4*(-y1 + y4))))))); | |
double c = (-(u1*v2*v4*x1*x2*x3) | |
+ u1*v3*v4*x1*x2*x3 + u4*v1*v3*x1*x2*x4 + u1*v2*v3*x1*x2*x4 - | |
u4*v2*v3*x1*x2*x4 - u1*v3*v4*x1*x2*x4 - u4*v1*v2*x1*x3*x4 - | |
u1*v2*v3*x1*x3*x4 + u4*v2*v3*x1*x3*x4 + u1*v2*v4*x1*x3*x4 + | |
u4*v1*v2*x2*x3*x4 - u4*v1*v3*x2*x3*x4 + u3*x3*(v2*v4*x1*(x2 - x4) + | |
v1*v2*(x1 - x2)*x4 + v1*v4*x2*(-x1 + x4)) + u2*x2*(v1*v4*x3*(x1 - x4) | |
+ v1*v3*(-x1 + x3)*x4 + v3*v4*x1*(-x3 + x4)))/(u3*v1*v2*x1*x3 - | |
u3*v1*v4*x1*x3 - u3*v1*v2*x2*x3 + u3*v2*v4*x2*x3 - u4*v1*v2*x1*x4 + | |
u4*v1*v3*x1*x4 + u4*v1*v2*x2*x4 - u4*v2*v3*x2*x4 - u4*v1*v3*x3*x4 + | |
u4*v2*v3*x3*x4 + u3*v1*v4*x3*x4 - u3*v2*v4*x3*x4 + u1*x1*(v2*v3*(x2 - | |
x3) + v3*v4*(x3 - x4) + v2*v4*(-x2 + x4)) + u2*x2*(v1*v3*(-x1 + x3) + | |
v1*v4*(x1 - x4) + v3*v4*(-x3 + x4))) + ((v2*(-(u1*u4*v3*(x2 - x3)*(x1 | |
- x4)) + u1*u3*v4*(x1 - x3)*(x2 - x4) - u3*u4*v1*(x1 - x2)*(x3 - x4)) | |
+ u2*(-(u3*v1*v4*(x2 - x3)*(x1 - x4)) + u4*v1*v3*(x1 - x3)*(x2 - x4) | |
- u1*v3*v4*(x1 - x2)*(x3 - x4)))*(-(v1*(v1 - v2)*(u3*v1 - | |
u1*v3)*(u3*(v1 - v2) + u1*(v2 - v3) + u2*(-v1 + | |
v3))*(x1*x1)*x3*(-(u3*v1*v2*x1*x3) + u3*v1*v4*x1*x3 + u3*v1*v2*x2*x3 - | |
u3*v2*v4*x2*x3 + u4*v1*v2*x1*x4 - u4*v1*v3*x1*x4 - u4*v1*v2*x2*x4 + | |
u4*v2*v3*x2*x4 + u4*v1*v3*x3*x4 - u4*v2*v3*x3*x4 - u3*v1*v4*x3*x4 + | |
u3*v2*v4*x3*x4 + u2*x2*(v1*v3*(x1 - x3) + v3*v4*(x3 - x4) + | |
v1*v4*(-x1 + x4)) + u1*x1*(v2*v3*(-x2 + x3) + v2*v4*(x2 - x4) + | |
v3*v4*(-x3 + x4)))*(u2*v3*x2*x3*y1 - u2*v4*x2*x3*y1 - u1*v3*x1*x3*y2 | |
+ u1*v4*x1*x3*y2 - u2*v1*x1*x2*y3 + u1*v2*x1*x2*y3 - u1*v4*x1*x2*y3 + | |
u2*v4*x1*x2*y3 + u2*v1*x1*x2*y4 - u1*v2*x1*x2*y4 + u1*v4*x1*x2*y4 - | |
u2*v4*x1*x2*y4 + u1*v3*x1*x3*y4 - u1*v4*x1*x3*y4 - u2*v3*x2*x3*y4 + | |
u2*v4*x2*x3*y4 + u3*x3*(v1*x1*(y2 - y4) + v2*x2*(-y1 + y4) + | |
v4*(x2*y1 - x1*y2 + x1*y4 - x2*y4)) + u4*(v3*x3*(-(x2*y1) + x1*y2 - | |
x1*y4 + x2*y4) + v1*x1*(-(x3*y2) + x2*y3 - x2*y4 + x3*y4) + | |
v2*x2*(x3*(y1 - y4) + x1*(-y3 + y4))))) - (u1*v2*x1*x2*x3 - | |
u1*v3*x1*x2*x3 - u4*v1*x1*x2*x4 - u1*v2*x1*x2*x4 + u4*v2*x1*x2*x4 + | |
u1*v4*x1*x2*x4 + u4*v1*x1*x3*x4 + u1*v3*x1*x3*x4 - u4*v3*x1*x3*x4 - | |
u1*v4*x1*x3*x4 - u4*v2*x2*x3*x4 + u4*v3*x2*x3*x4 + u3*x3*(v1*x1*(x2 - | |
x4) + v4*(x1 - x2)*x4 + v2*x2*(-x1 + x4)) + u2*x2*(v3*x3*(x1 - x4) + | |
v4*(-x1 + x3)*x4 + v1*x1*(-x3 + x4)))*(v1*x1*(-(u1*v2*x1*x2) - | |
u3*v1*x1*x3 + u1*v3*x1*x3 + u3*v2*x2*x3 + u2*x2*(v1*x1 - | |
v3*x3))*(-(v3*(-x1 + x3)*(v1*(u4*(-v1 + v2) + u2*(v1 - v4) + u1*(-v2 | |
+ v4))*(u1*(-v2 + v3)*y1 + u2*(v1 - v3)*y2 + u3*(-v1 + v2)*y3) - | |
u1*(u4*(v1 - v2) + u1*(v2 - v4) + u2*(-v1 + v4))*(v1*v2*(y1 - y2) + | |
v2*v3*(y2 - y3) + v1*v3*(-y1 + y3)) - v1*(u3*(-v1 + v2) + u2*(v1 - | |
v3) + u1*(-v2 + v3))*(u1*(-v2 + v4)*y1 + u2*(v1 - v4)*y2 + u4*(-v1 + | |
v2)*y4) + u1*(u3*(v1 - v2) + u1*(v2 - v3) + u2*(-v1 + v3))*(v1*v2*(y1 | |
- y2) + v2*v4*(y2 - y4) + v1*v4*(-y1 + y4)))) + (u3*v1 - | |
u1*v3)*x3*((u4*(v1 - v2) + u1*(v2 - v4) + u2*(-v1 + v4))*(v1*v2*(y1 - | |
y2) + v2*v3*(y2 - y3) + v1*v3*(-y1 + y3)) + (u3*(-v1 + v2) + u2*(v1 - | |
v3) + u1*(-v2 + v3))*(v1*v2*(y1 - y2) + v2*v4*(y2 - y4) + v1*v4*(-y1 | |
+ y4)))) - (u2*v1*v3*x2*(x1 - x3) + u3*v1*v2*(-x1 + x2)*x3 + | |
u1*v2*v3*x1*(-x2 + x3))*(-(x1*(-(v1*x1) + v3*x3)*(v1*(u4*(-v1 + v2) + | |
u2*(v1 - v4) + u1*(-v2 + v4))*(u1*(-v2 + v3)*y1 + u2*(v1 - v3)*y2 + | |
u3*(-v1 + v2)*y3) - u1*(u4*(v1 - v2) + u1*(v2 - v4) + u2*(-v1 + | |
v4))*(v1*v2*(y1 - y2) + v2*v3*(y2 - y3) + v1*v3*(-y1 + y3)) - | |
v1*(u3*(-v1 + v2) + u2*(v1 - v3) + u1*(-v2 + v3))*(u1*(-v2 + v4)*y1 + | |
u2*(v1 - v4)*y2 + u4*(-v1 + v2)*y4) + u1*(u3*(v1 - v2) + u1*(v2 - v3) | |
+ u2*(-v1 + v3))*(v1*v2*(y1 - y2) + v2*v4*(y2 - y4) + v1*v4*(-y1 + | |
y4)))) + (u3*v1 - u1*v3)*x1*x3*((u4*(v1 - v2) + u1*(v2 - v4) + | |
u2*(-v1 + v4))*(v1*v2*(y1 - y2) + v2*v3*(y2 - y3) + v1*v3*(-y1 + y3)) | |
+ (u3*(-v1 + v2) + u2*(v1 - v3) + u1*(-v2 + v3))*(v1*v2*(y1 - y2) + | |
v2*v4*(y2 - y4) + v1*v4*(-y1 + y4)))))))/((-(u3*v1*v2*x1*x3) + | |
u3*v1*v4*x1*x3 + u3*v1*v2*x2*x3 - u3*v2*v4*x2*x3 + u4*v1*v2*x1*x4 - | |
u4*v1*v3*x1*x4 - u4*v1*v2*x2*x4 + u4*v2*v3*x2*x4 + u4*v1*v3*x3*x4 - | |
u4*v2*v3*x3*x4 - u3*v1*v4*x3*x4 + u3*v2*v4*x3*x4 + u2*x2*(v1*v3*(x1 - | |
x3) + v3*v4*(x3 - x4) + v1*v4*(-x1 + x4)) + u1*x1*(v2*v3*(-x2 + x3) + | |
v2*v4*(x2 - x4) + v3*v4*(-x3 + x4)))*(-((u1*u4*(v2*x2 - v3*x3)*(x1 - | |
x4) + u3*u4*(v1*x1 - v2*x2)*(x3 - x4) - u1*u3*(x1 - x3)*(v2*x2 - | |
v4*x4) + u2*(-(u4*(v1*x1 - v3*x3)*(x2 - x4)) + u3*(x2 - x3)*(v1*x1 - | |
v4*x4) + u1*(x1 - x2)*(v3*x3 - v4*x4)))*(v1*x1*(-(u1*v2*x1*x2) - | |
u3*v1*x1*x3 + u1*v3*x1*x3 + u3*v2*x2*x3 + u2*x2*(v1*x1 - | |
v3*x3))*(-(v3*(-x1 + x3)*(v1*(u4*(-v1 + v2) + u2*(v1 - v4) + u1*(-v2 | |
+ v4))*(u1*(-v2 + v3)*y1 + u2*(v1 - v3)*y2 + u3*(-v1 + v2)*y3) - | |
u1*(u4*(v1 - v2) + u1*(v2 - v4) + u2*(-v1 + v4))*(v1*v2*(y1 - y2) + | |
v2*v3*(y2 - y3) + v1*v3*(-y1 + y3)) - v1*(u3*(-v1 + v2) + u2*(v1 - | |
v3) + u1*(-v2 + v3))*(u1*(-v2 + v4)*y1 + u2*(v1 - v4)*y2 + u4*(-v1 + | |
v2)*y4) + u1*(u3*(v1 - v2) + u1*(v2 - v3) + u2*(-v1 + v3))*(v1*v2*(y1 | |
- y2) + v2*v4*(y2 - y4) + v1*v4*(-y1 + y4)))) + (u3*v1 - | |
u1*v3)*x3*((u4*(v1 - v2) + u1*(v2 - v4) + u2*(-v1 + v4))*(v1*v2*(y1 - | |
y2) + v2*v3*(y2 - y3) + v1*v3*(-y1 + y3)) + (u3*(-v1 + v2) + u2*(v1 - | |
v3) + u1*(-v2 + v3))*(v1*v2*(y1 - y2) + v2*v4*(y2 - y4) + v1*v4*(-y1 | |
+ y4)))) - (u2*v1*v3*x2*(x1 - x3) + u3*v1*v2*(-x1 + x2)*x3 + | |
u1*v2*v3*x1*(-x2 + x3))*(-(x1*(-(v1*x1) + v3*x3)*(v1*(u4*(-v1 + v2) + | |
u2*(v1 - v4) + u1*(-v2 + v4))*(u1*(-v2 + v3)*y1 + u2*(v1 - v3)*y2 + | |
u3*(-v1 + v2)*y3) - u1*(u4*(v1 - v2) + u1*(v2 - v4) + u2*(-v1 + | |
v4))*(v1*v2*(y1 - y2) + v2*v3*(y2 - y3) + v1*v3*(-y1 + y3)) - | |
v1*(u3*(-v1 + v2) + u2*(v1 - v3) + u1*(-v2 + v3))*(u1*(-v2 + v4)*y1 + | |
u2*(v1 - v4)*y2 + u4*(-v1 + v2)*y4) + u1*(u3*(v1 - v2) + u1*(v2 - v3) | |
+ u2*(-v1 + v3))*(v1*v2*(y1 - y2) + v2*v4*(y2 - y4) + v1*v4*(-y1 + | |
y4)))) + (u3*v1 - u1*v3)*x1*x3*((u4*(v1 - v2) + u1*(v2 - v4) + | |
u2*(-v1 + v4))*(v1*v2*(y1 - y2) + v2*v3*(y2 - y3) + v1*v3*(-y1 + y3)) | |
+ (u3*(-v1 + v2) + u2*(v1 - v3) + u1*(-v2 + v3))*(v1*v2*(y1 - y2) + | |
v2*v4*(y2 - y4) + v1*v4*(-y1 + y4)))))) + (-(u3*v1*v2*x1*x3) + | |
u3*v1*v4*x1*x3 + u3*v1*v2*x2*x3 - u3*v2*v4*x2*x3 + u4*v1*v2*x1*x4 - | |
u4*v1*v3*x1*x4 - u4*v1*v2*x2*x4 + u4*v2*v3*x2*x4 + u4*v1*v3*x3*x4 - | |
u4*v2*v3*x3*x4 - u3*v1*v4*x3*x4 + u3*v2*v4*x3*x4 + u2*x2*(v1*v3*(x1 - | |
x3) + v3*v4*(x3 - x4) + v1*v4*(-x1 + x4)) + u1*x1*(v2*v3*(-x2 + x3) + | |
v2*v4*(x2 - x4) + v3*v4*(-x3 + x4)))*(-((u2*u3*v1*x1*(x2 - x3) + | |
u1*u2*v3*(x1 - x2)*x3 + u1*u3*v2*x2*(-x1 + x3))*(-(x1*(-(v1*x1) + | |
v3*x3)*(v1*(u4*(-v1 + v2) + u2*(v1 - v4) + u1*(-v2 + v4))*(u1*(-v2 + | |
v3)*y1 + u2*(v1 - v3)*y2 + u3*(-v1 + v2)*y3) - u1*(u4*(v1 - v2) + | |
u1*(v2 - v4) + u2*(-v1 + v4))*(v1*v2*(y1 - y2) + v2*v3*(y2 - y3) + | |
v1*v3*(-y1 + y3)) - v1*(u3*(-v1 + v2) + u2*(v1 - v3) + u1*(-v2 + | |
v3))*(u1*(-v2 + v4)*y1 + u2*(v1 - v4)*y2 + u4*(-v1 + v2)*y4) + | |
u1*(u3*(v1 - v2) + u1*(v2 - v3) + u2*(-v1 + v3))*(v1*v2*(y1 - y2) + | |
v2*v4*(y2 - y4) + v1*v4*(-y1 + y4)))) + (u3*v1 - | |
u1*v3)*x1*x3*((u4*(v1 - v2) + u1*(v2 - v4) + u2*(-v1 + | |
v4))*(v1*v2*(y1 - y2) + v2*v3*(y2 - y3) + v1*v3*(-y1 + y3)) + | |
(u3*(-v1 + v2) + u2*(v1 - v3) + u1*(-v2 + v3))*(v1*v2*(y1 - y2) + | |
v2*v4*(y2 - y4) + v1*v4*(-y1 + y4))))) + (-(u1*v2*x1*x2) - | |
u3*v1*x1*x3 + u1*v3*x1*x3 + u3*v2*x2*x3 + u2*x2*(v1*x1 - | |
v3*x3))*(-(x1*(-(u3*v1*x1) + u1*v3*x3)*(v1*(u4*(-v1 + v2) + u2*(v1 - | |
v4) + u1*(-v2 + v4))*(u1*(-v2 + v3)*y1 + u2*(v1 - v3)*y2 + u3*(-v1 + | |
v2)*y3) - u1*(u4*(v1 - v2) + u1*(v2 - v4) + u2*(-v1 + v4))*(v1*v2*(y1 | |
- y2) + v2*v3*(y2 - y3) + v1*v3*(-y1 + y3)) - v1*(u3*(-v1 + v2) + | |
u2*(v1 - v3) + u1*(-v2 + v3))*(u1*(-v2 + v4)*y1 + u2*(v1 - v4)*y2 + | |
u4*(-v1 + v2)*y4) + u1*(u3*(v1 - v2) + u1*(v2 - v3) + u2*(-v1 + | |
v3))*(v1*v2*(y1 - y2) + v2*v4*(y2 - y4) + v1*v4*(-y1 + y4)))) + | |
u1*(u3*v1 - u1*v3)*x1*x3*((u4*(v1 - v2) + u1*(v2 - v4) + u2*(-v1 + | |
v4))*(v1*v2*(y1 - y2) + v2*v3*(y2 - y3) + v1*v3*(-y1 + y3)) + | |
(u3*(-v1 + v2) + u2*(v1 - v3) + u1*(-v2 + v3))*(v1*v2*(y1 - y2) + | |
v2*v4*(y2 - y4) + v1*v4*(-y1 + y4))))))); | |
double d = (-(v3*x2*x3*y1) - | |
v1*x1*x3*y2 + v3*x1*x3*y2 + v1*x1*x2*y3 + v2*x2*(x3*y1 - | |
x1*y3))/(-(u2*v1*x1*x2) + u1*v2*x1*x2 + u3*v1*x1*x3 - u1*v3*x1*x3 - | |
u3*v2*x2*x3 + u2*v3*x2*x3) + ((-(u1*v2*x1*x2*x3) + u1*v3*x1*x2*x3 + | |
u4*v1*x1*x2*x4 + u1*v2*x1*x2*x4 - u4*v2*x1*x2*x4 - u1*v4*x1*x2*x4 - | |
u4*v1*x1*x3*x4 - u1*v3*x1*x3*x4 + u4*v3*x1*x3*x4 + u1*v4*x1*x3*x4 + | |
u4*v2*x2*x3*x4 - u4*v3*x2*x3*x4 + u2*x2*(v1*x1*(x3 - x4) + v4*(x1 - | |
x3)*x4 + v3*x3*(-x1 + x4)) + u3*x3*(v2*x2*(x1 - x4) + v4*(-x1 + | |
x2)*x4 + v1*x1*(-x2 + x4)))*(u1*(v2 - v3)*(v2*v3*(-(x2*y1) + x3*y1 + | |
x1*y2 - x1*y3) + v1*(v2*x2*y1 - v3*x3*y1 - v2*x1*y2 + v3*x1*y3)) + | |
u2*(v1 - v3)*(v1*(v3*(-x1 + x3)*y2 + v2*(-(x2*y1) + x1*y2) + | |
v3*x2*(y1 - y3)) + v2*v3*(-(x3*y2) + x2*y3)) + u3*(v1 - | |
v2)*(v2*v3*(x3*y2 - x2*y3) + v1*(-(v3*x3*y1) + v2*x3*(y1 - y2) + | |
v3*x1*y3 + v2*(-x1 + x2)*y3))))/((u3*(-v1 + v2) + u2*(v1 - v3) + | |
u1*(-v2 + v3))*(-(u1*v2*x1*x2) - u3*v1*x1*x3 + u1*v3*x1*x3 + | |
u3*v2*x2*x3 + u2*x2*(v1*x1 - v3*x3))*(-(u3*v1*v2*x1*x3) + | |
u3*v1*v4*x1*x3 + u3*v1*v2*x2*x3 - u3*v2*v4*x2*x3 + u4*v1*v2*x1*x4 - | |
u4*v1*v3*x1*x4 - u4*v1*v2*x2*x4 + u4*v2*v3*x2*x4 + u4*v1*v3*x3*x4 - | |
u4*v2*v3*x3*x4 - u3*v1*v4*x3*x4 + u3*v2*v4*x3*x4 + u2*x2*(v1*v3*(x1 - | |
x3) + v3*v4*(x3 - x4) + v1*v4*(-x1 + x4)) + u1*x1*(v2*v3*(-x2 + x3) + | |
v2*v4*(x2 - x4) + v3*v4*(-x3 + x4)))) + (((u1*u1)*(v2 - v3)*(v2*v3*(-x2 | |
+ x3) + v2*v4*(x2 - x4) + v3*v4*(-x3 + x4))*y1 + (u2*u2)*(v1 - | |
v3)*(v1*v3*(-x1 + x3) + v1*v4*(x1 - x4) + v3*v4*(-x3 + x4))*y2 - | |
u3*(v1 - v2)*(u3*(v1*v2*(x1 - x2) + v2*v4*(x2 - x4) + v1*v4*(-x1 + | |
x4))*y3 + u4*(v1*v3*(-(x3*y1) + x4*(y1 - y3) + x1*y3) + v1*v2*(x3*(y1 | |
- y2) + x4*(-y1 + y2) + (-x1 + x2)*y3) + v2*v3*(x3*y2 - x2*y3 + | |
x4*(-y2 + y3)))) + u1*(u4*(v2 - v3)*(v1*v2*(-(x2*y1) + x4*(y1 - y2) + | |
x1*y2) + v2*v3*(x2*y1 - x3*y1 - (x1 - x4)*(y2 - y3)) + v1*v3*(x3*y1 - | |
x1*y3 + x4*(-y1 + y3))) + u3*(v2*(-(v2*v4*(x2 - x4)*(y1 + y3)) + | |
v2*v3*(-(x3*y2) + x1*(y2 - y3) + x2*y3) + v3*v4*(x2*y1 - x1*y2 + | |
x3*y2 + x1*y3 - x4*(y1 + y3))) + v1*((v2*v2)*(x2*y1 - x1*y2 + x3*(-y1 + | |
y2)) + v2*v3*(x3*y1 + x1*y3 - x2*(y1 + y3)) + v2*v4*(x3*(y1 - y2) + | |
x1*y2 + x2*y3 - x4*(y1 + y3)) + v3*v4*(-(x3*y1) - x1*y3 + x4*(y1 + | |
y3))))) + u2*(u4*(v1 - v3)*(v1*v2*(x2*y1 - x1*y2 + x4*(-y1 + y2)) + | |
v1*v3*((x1 - x3)*y2 + x4*(y1 - y3) + x2*(-y1 + y3)) + v2*v3*(x3*y2 - | |
x2*y3 + x4*(-y2 + y3))) + u1*(v1*(v2*v3*(x2*y1 + x1*y2 - x3*(y1 + | |
y2)) + v2*v4*(-(x2*y1) - x1*y2 + x4*(y1 + y2)) + v3*v4*(x3*y2 - | |
x4*(y1 + y2) + x2*(y1 - y3) + x1*y3) + (v3*v3)*(x3*y1 - x1*y3 + x2*(-y1 | |
+ y3))) + v3*(-(v3*v4*(x3 - x4)*(y1 + y2)) + v2*v4*(x3*y1 + x1*y2 - | |
x4*(y1 + y2) - x1*y3 + x2*y3) + v2*v3*(x3*y2 - x2*y3 + x1*(-y2 + | |
y3)))) + u3*(v2*v3*v4*(-(x3*y2) - x2*y3 + x4*(y2 + y3)) + | |
(v1*v1)*(v2*(-(x2*y1) + x3*y1 + x1*y2 - x3*y2) - v4*(x1 - x4)*(y2 + y3) | |
+ v3*(x2*y1 - x3*y1 + x1*y3 - x2*y3)) + v1*(v3*v4*(x3*y1 + x1*y2 - | |
x4*y2 - x4*y3 + x2*(-y1 + y3)) + v2*(v4*(x2*y1 - x3*y1 + x3*y2 - | |
x4*y2 + x1*y3 - x4*y3) + v3*(x3*y2 + x2*y3 - x1*(y2 + | |
y3)))))))*(-(v1*(v1 - v2)*(u3*v1 - u1*v3)*(u3*(v1 - v2) + u1*(v2 - | |
v3) + u2*(-v1 + v3))*(x1*x1)*x3*(-(u3*v1*v2*x1*x3) + u3*v1*v4*x1*x3 + | |
u3*v1*v2*x2*x3 - u3*v2*v4*x2*x3 + u4*v1*v2*x1*x4 - u4*v1*v3*x1*x4 - | |
u4*v1*v2*x2*x4 + u4*v2*v3*x2*x4 + u4*v1*v3*x3*x4 - u4*v2*v3*x3*x4 - | |
u3*v1*v4*x3*x4 + u3*v2*v4*x3*x4 + u2*x2*(v1*v3*(x1 - x3) + v3*v4*(x3 | |
- x4) + v1*v4*(-x1 + x4)) + u1*x1*(v2*v3*(-x2 + x3) + v2*v4*(x2 - x4) | |
+ v3*v4*(-x3 + x4)))*(u2*v3*x2*x3*y1 - u2*v4*x2*x3*y1 - | |
u1*v3*x1*x3*y2 + u1*v4*x1*x3*y2 - u2*v1*x1*x2*y3 + u1*v2*x1*x2*y3 - | |
u1*v4*x1*x2*y3 + u2*v4*x1*x2*y3 + u2*v1*x1*x2*y4 - u1*v2*x1*x2*y4 + | |
u1*v4*x1*x2*y4 - u2*v4*x1*x2*y4 + u1*v3*x1*x3*y4 - u1*v4*x1*x3*y4 - | |
u2*v3*x2*x3*y4 + u2*v4*x2*x3*y4 + u3*x3*(v1*x1*(y2 - y4) + v2*x2*(-y1 | |
+ y4) + v4*(x2*y1 - x1*y2 + x1*y4 - x2*y4)) + u4*(v3*x3*(-(x2*y1) + | |
x1*y2 - x1*y4 + x2*y4) + v1*x1*(-(x3*y2) + x2*y3 - x2*y4 + x3*y4) + | |
v2*x2*(x3*(y1 - y4) + x1*(-y3 + y4))))) - (u1*v2*x1*x2*x3 - | |
u1*v3*x1*x2*x3 - u4*v1*x1*x2*x4 - u1*v2*x1*x2*x4 + u4*v2*x1*x2*x4 + | |
u1*v4*x1*x2*x4 + u4*v1*x1*x3*x4 + u1*v3*x1*x3*x4 - u4*v3*x1*x3*x4 - | |
u1*v4*x1*x3*x4 - u4*v2*x2*x3*x4 + u4*v3*x2*x3*x4 + u3*x3*(v1*x1*(x2 - | |
x4) + v4*(x1 - x2)*x4 + v2*x2*(-x1 + x4)) + u2*x2*(v3*x3*(x1 - x4) + | |
v4*(-x1 + x3)*x4 + v1*x1*(-x3 + x4)))*(v1*x1*(-(u1*v2*x1*x2) - | |
u3*v1*x1*x3 + u1*v3*x1*x3 + u3*v2*x2*x3 + u2*x2*(v1*x1 - | |
v3*x3))*(-(v3*(-x1 + x3)*(v1*(u4*(-v1 + v2) + u2*(v1 - v4) + u1*(-v2 | |
+ v4))*(u1*(-v2 + v3)*y1 + u2*(v1 - v3)*y2 + u3*(-v1 + v2)*y3) - | |
u1*(u4*(v1 - v2) + u1*(v2 - v4) + u2*(-v1 + v4))*(v1*v2*(y1 - y2) + | |
v2*v3*(y2 - y3) + v1*v3*(-y1 + y3)) - v1*(u3*(-v1 + v2) + u2*(v1 - | |
v3) + u1*(-v2 + v3))*(u1*(-v2 + v4)*y1 + u2*(v1 - v4)*y2 + u4*(-v1 + | |
v2)*y4) + u1*(u3*(v1 - v2) + u1*(v2 - v3) + u2*(-v1 + v3))*(v1*v2*(y1 | |
- y2) + v2*v4*(y2 - y4) + v1*v4*(-y1 + y4)))) + (u3*v1 - | |
u1*v3)*x3*((u4*(v1 - v2) + u1*(v2 - v4) + u2*(-v1 + v4))*(v1*v2*(y1 - | |
y2) + v2*v3*(y2 - y3) + v1*v3*(-y1 + y3)) + (u3*(-v1 + v2) + u2*(v1 - | |
v3) + u1*(-v2 + v3))*(v1*v2*(y1 - y2) + v2*v4*(y2 - y4) + v1*v4*(-y1 | |
+ y4)))) - (u2*v1*v3*x2*(x1 - x3) + u3*v1*v2*(-x1 + x2)*x3 + | |
u1*v2*v3*x1*(-x2 + x3))*(-(x1*(-(v1*x1) + v3*x3)*(v1*(u4*(-v1 + v2) + | |
u2*(v1 - v4) + u1*(-v2 + v4))*(u1*(-v2 + v3)*y1 + u2*(v1 - v3)*y2 + | |
u3*(-v1 + v2)*y3) - u1*(u4*(v1 - v2) + u1*(v2 - v4) + u2*(-v1 + | |
v4))*(v1*v2*(y1 - y2) + v2*v3*(y2 - y3) + v1*v3*(-y1 + y3)) - | |
v1*(u3*(-v1 + v2) + u2*(v1 - v3) + u1*(-v2 + v3))*(u1*(-v2 + v4)*y1 + | |
u2*(v1 - v4)*y2 + u4*(-v1 + v2)*y4) + u1*(u3*(v1 - v2) + u1*(v2 - v3) | |
+ u2*(-v1 + v3))*(v1*v2*(y1 - y2) + v2*v4*(y2 - y4) + v1*v4*(-y1 + | |
y4)))) + (u3*v1 - u1*v3)*x1*x3*((u4*(v1 - v2) + u1*(v2 - v4) + | |
u2*(-v1 + v4))*(v1*v2*(y1 - y2) + v2*v3*(y2 - y3) + v1*v3*(-y1 + y3)) | |
+ (u3*(-v1 + v2) + u2*(v1 - v3) + u1*(-v2 + v3))*(v1*v2*(y1 - y2) + | |
v2*v4*(y2 - y4) + v1*v4*(-y1 + y4)))))))/((u3*(-v1 + v2) + u2*(v1 - | |
v3) + u1*(-v2 + v3))*(-(u3*v1*v2*x1*x3) + u3*v1*v4*x1*x3 + | |
u3*v1*v2*x2*x3 - u3*v2*v4*x2*x3 + u4*v1*v2*x1*x4 - u4*v1*v3*x1*x4 - | |
u4*v1*v2*x2*x4 + u4*v2*v3*x2*x4 + u4*v1*v3*x3*x4 - u4*v2*v3*x3*x4 - | |
u3*v1*v4*x3*x4 + u3*v2*v4*x3*x4 + u2*x2*(v1*v3*(x1 - x3) + v3*v4*(x3 | |
- x4) + v1*v4*(-x1 + x4)) + u1*x1*(v2*v3*(-x2 + x3) + v2*v4*(x2 - x4) | |
+ v3*v4*(-x3 + x4)))*(-((u1*u4*(v2*x2 - v3*x3)*(x1 - x4) + | |
u3*u4*(v1*x1 - v2*x2)*(x3 - x4) - u1*u3*(x1 - x3)*(v2*x2 - v4*x4) + | |
u2*(-(u4*(v1*x1 - v3*x3)*(x2 - x4)) + u3*(x2 - x3)*(v1*x1 - v4*x4) + | |
u1*(x1 - x2)*(v3*x3 - v4*x4)))*(v1*x1*(-(u1*v2*x1*x2) - u3*v1*x1*x3 + | |
u1*v3*x1*x3 + u3*v2*x2*x3 + u2*x2*(v1*x1 - v3*x3))*(-(v3*(-x1 + | |
x3)*(v1*(u4*(-v1 + v2) + u2*(v1 - v4) + u1*(-v2 + v4))*(u1*(-v2 + | |
v3)*y1 + u2*(v1 - v3)*y2 + u3*(-v1 + v2)*y3) - u1*(u4*(v1 - v2) + | |
u1*(v2 - v4) + u2*(-v1 + v4))*(v1*v2*(y1 - y2) + v2*v3*(y2 - y3) + | |
v1*v3*(-y1 + y3)) - v1*(u3*(-v1 + v2) + u2*(v1 - v3) + u1*(-v2 + | |
v3))*(u1*(-v2 + v4)*y1 + u2*(v1 - v4)*y2 + u4*(-v1 + v2)*y4) + | |
u1*(u3*(v1 - v2) + u1*(v2 - v3) + u2*(-v1 + v3))*(v1*v2*(y1 - y2) + | |
v2*v4*(y2 - y4) + v1*v4*(-y1 + y4)))) + (u3*v1 - u1*v3)*x3*((u4*(v1 - | |
v2) + u1*(v2 - v4) + u2*(-v1 + v4))*(v1*v2*(y1 - y2) + v2*v3*(y2 - | |
y3) + v1*v3*(-y1 + y3)) + (u3*(-v1 + v2) + u2*(v1 - v3) + u1*(-v2 + | |
v3))*(v1*v2*(y1 - y2) + v2*v4*(y2 - y4) + v1*v4*(-y1 + y4)))) - | |
(u2*v1*v3*x2*(x1 - x3) + u3*v1*v2*(-x1 + x2)*x3 + u1*v2*v3*x1*(-x2 + | |
x3))*(-(x1*(-(v1*x1) + v3*x3)*(v1*(u4*(-v1 + v2) + u2*(v1 - v4) + | |
u1*(-v2 + v4))*(u1*(-v2 + v3)*y1 + u2*(v1 - v3)*y2 + u3*(-v1 + | |
v2)*y3) - u1*(u4*(v1 - v2) + u1*(v2 - v4) + u2*(-v1 + v4))*(v1*v2*(y1 | |
- y2) + v2*v3*(y2 - y3) + v1*v3*(-y1 + y3)) - v1*(u3*(-v1 + v2) + | |
u2*(v1 - v3) + u1*(-v2 + v3))*(u1*(-v2 + v4)*y1 + u2*(v1 - v4)*y2 + | |
u4*(-v1 + v2)*y4) + u1*(u3*(v1 - v2) + u1*(v2 - v3) + u2*(-v1 + | |
v3))*(v1*v2*(y1 - y2) + v2*v4*(y2 - y4) + v1*v4*(-y1 + y4)))) + | |
(u3*v1 - u1*v3)*x1*x3*((u4*(v1 - v2) + u1*(v2 - v4) + u2*(-v1 + | |
v4))*(v1*v2*(y1 - y2) + v2*v3*(y2 - y3) + v1*v3*(-y1 + y3)) + | |
(u3*(-v1 + v2) + u2*(v1 - v3) + u1*(-v2 + v3))*(v1*v2*(y1 - y2) + | |
v2*v4*(y2 - y4) + v1*v4*(-y1 + y4)))))) + (-(u3*v1*v2*x1*x3) + | |
u3*v1*v4*x1*x3 + u3*v1*v2*x2*x3 - u3*v2*v4*x2*x3 + u4*v1*v2*x1*x4 - | |
u4*v1*v3*x1*x4 - u4*v1*v2*x2*x4 + u4*v2*v3*x2*x4 + u4*v1*v3*x3*x4 - | |
u4*v2*v3*x3*x4 - u3*v1*v4*x3*x4 + u3*v2*v4*x3*x4 + u2*x2*(v1*v3*(x1 - | |
x3) + v3*v4*(x3 - x4) + v1*v4*(-x1 + x4)) + u1*x1*(v2*v3*(-x2 + x3) + | |
v2*v4*(x2 - x4) + v3*v4*(-x3 + x4)))*(-((u2*u3*v1*x1*(x2 - x3) + | |
u1*u2*v3*(x1 - x2)*x3 + u1*u3*v2*x2*(-x1 + x3))*(-(x1*(-(v1*x1) + | |
v3*x3)*(v1*(u4*(-v1 + v2) + u2*(v1 - v4) + u1*(-v2 + v4))*(u1*(-v2 + | |
v3)*y1 + u2*(v1 - v3)*y2 + u3*(-v1 + v2)*y3) - u1*(u4*(v1 - v2) + | |
u1*(v2 - v4) + u2*(-v1 + v4))*(v1*v2*(y1 - y2) + v2*v3*(y2 - y3) + | |
v1*v3*(-y1 + y3)) - v1*(u3*(-v1 + v2) + u2*(v1 - v3) + u1*(-v2 + | |
v3))*(u1*(-v2 + v4)*y1 + u2*(v1 - v4)*y2 + u4*(-v1 + v2)*y4) + | |
u1*(u3*(v1 - v2) + u1*(v2 - v3) + u2*(-v1 + v3))*(v1*v2*(y1 - y2) + | |
v2*v4*(y2 - y4) + v1*v4*(-y1 + y4)))) + (u3*v1 - | |
u1*v3)*x1*x3*((u4*(v1 - v2) + u1*(v2 - v4) + u2*(-v1 + | |
v4))*(v1*v2*(y1 - y2) + v2*v3*(y2 - y3) + v1*v3*(-y1 + y3)) + | |
(u3*(-v1 + v2) + u2*(v1 - v3) + u1*(-v2 + v3))*(v1*v2*(y1 - y2) + | |
v2*v4*(y2 - y4) + v1*v4*(-y1 + y4))))) + (-(u1*v2*x1*x2) - | |
u3*v1*x1*x3 + u1*v3*x1*x3 + u3*v2*x2*x3 + u2*x2*(v1*x1 - | |
v3*x3))*(-(x1*(-(u3*v1*x1) + u1*v3*x3)*(v1*(u4*(-v1 + v2) + u2*(v1 - | |
v4) + u1*(-v2 + v4))*(u1*(-v2 + v3)*y1 + u2*(v1 - v3)*y2 + u3*(-v1 + | |
v2)*y3) - u1*(u4*(v1 - v2) + u1*(v2 - v4) + u2*(-v1 + v4))*(v1*v2*(y1 | |
- y2) + v2*v3*(y2 - y3) + v1*v3*(-y1 + y3)) - v1*(u3*(-v1 + v2) + | |
u2*(v1 - v3) + u1*(-v2 + v3))*(u1*(-v2 + v4)*y1 + u2*(v1 - v4)*y2 + | |
u4*(-v1 + v2)*y4) + u1*(u3*(v1 - v2) + u1*(v2 - v3) + u2*(-v1 + | |
v3))*(v1*v2*(y1 - y2) + v2*v4*(y2 - y4) + v1*v4*(-y1 + y4)))) + | |
u1*(u3*v1 - u1*v3)*x1*x3*((u4*(v1 - v2) + u1*(v2 - v4) + u2*(-v1 + | |
v4))*(v1*v2*(y1 - y2) + v2*v3*(y2 - y3) + v1*v3*(-y1 + y3)) + | |
(u3*(-v1 + v2) + u2*(v1 - v3) + u1*(-v2 + v3))*(v1*v2*(y1 - y2) + | |
v2*v4*(y2 - y4) + v1*v4*(-y1 + y4))))))); | |
double e = (u2*x2*x3*y1 - | |
u3*x2*x3*y1 - u1*x1*x3*y2 + u3*x1*x3*y2 + u1*x1*x2*y3 - | |
u2*x1*x2*y3)/(u2*v1*x1*x2 - u1*v2*x1*x2 - u3*v1*x1*x3 + u1*v3*x1*x3 + | |
u3*v2*x2*x3 - u2*v3*x2*x3) + ((-(u1*v2*x1*x2*x3) + u1*v3*x1*x2*x3 + | |
u4*v1*x1*x2*x4 + u1*v2*x1*x2*x4 - u4*v2*x1*x2*x4 - u1*v4*x1*x2*x4 - | |
u4*v1*x1*x3*x4 - u1*v3*x1*x3*x4 + u4*v3*x1*x3*x4 + u1*v4*x1*x3*x4 + | |
u4*v2*x2*x3*x4 - u4*v3*x2*x3*x4 + u2*x2*(v1*x1*(x3 - x4) + v4*(x1 - | |
x3)*x4 + v3*x3*(-x1 + x4)) + u3*x3*(v2*x2*(x1 - x4) + v4*(-x1 + | |
x2)*x4 + v1*x1*(-x2 + x4)))*((u3*u3)*(v1 - v2)*x3*(v1*y1 - v2*y2) + | |
(u2*u2)*(v1 - v3)*x2*(v1*y1 - v3*y3) + (u1*u1)*(v2 - v3)*x1*(v2*y2 - v3*y3) | |
+ u1*u3*(-((v2*v2)*(x1 + x3)*y2) - v1*v3*(x3*y1 + x1*y3) + v1*v2*(x3*y2 | |
+ x2*(y1 - y3) + x1*y3) + v2*v3*(x3*y1 + x1*y2 + x2*(-y1 + y3))) + | |
u2*(u1*(-(v1*v2*(x2*y1 + x1*y2)) - (v3*v3)*(x1 + x2)*y3 + v2*v3*(x2*y1 - | |
x3*y1 + x3*y2 + x1*y3) + v1*v3*(x3*(y1 - y2) + x1*y2 + x2*y3)) + | |
u3*(-((v1*v1)*(x2 + x3)*y1) + v1*v3*(x2*y1 - x1*y2 + x3*y2 + x1*y3) - | |
v2*v3*(x3*y2 + x2*y3) + v1*v2*(x3*y1 + x1*y2 - x1*y3 + | |
x2*y3)))))/((u3*(-v1 + v2) + u2*(v1 - v3) + u1*(-v2 + | |
v3))*(-(u1*v2*x1*x2) - u3*v1*x1*x3 + u1*v3*x1*x3 + u3*v2*x2*x3 + | |
u2*x2*(v1*x1 - v3*x3))*(-(u3*v1*v2*x1*x3) + u3*v1*v4*x1*x3 + | |
u3*v1*v2*x2*x3 - u3*v2*v4*x2*x3 + u4*v1*v2*x1*x4 - u4*v1*v3*x1*x4 - | |
u4*v1*v2*x2*x4 + u4*v2*v3*x2*x4 + u4*v1*v3*x3*x4 - u4*v2*v3*x3*x4 - | |
u3*v1*v4*x3*x4 + u3*v2*v4*x3*x4 + u2*x2*(v1*v3*(x1 - x3) + v3*v4*(x3 | |
- x4) + v1*v4*(-x1 + x4)) + u1*x1*(v2*v3*(-x2 + x3) + v2*v4*(x2 - x4) | |
+ v3*v4*(-x3 + x4)))) + ((-((u3*u3)*u4*(v1 - v2)*(x3 - x4)*(v1*y1 - | |
v2*y2)) + (u1*u1)*(-(u4*(v2 - v3)*(x1 - x4)*(v2*y2 - v3*y3)) + | |
u3*((v2*v2)*(x1 - x3)*y2 + v3*v4*(-(x3*y1) + x4*y1 + x1*y3 - x4*y3) + | |
v2*v4*(-(x4*y1) - x1*y2 + x3*y2 + x2*(y1 - y3) + x4*y3) + | |
v2*v3*(x3*y1 - x1*y3 + x2*(-y1 + y3)))) + u1*u3*(u3*((v2*v2)*(-x1 + | |
x3)*y2 + v1*v2*(-(x3*y1) + x2*(y1 - y3) + x1*y3) + v2*v4*((x1 - | |
x3)*y2 + x4*(y1 - y3) + x2*(-y1 + y3)) + v1*v4*(x3*y1 - x1*y3 + | |
x4*(-y1 + y3))) + u4*((v2*v2)*(x1 + x3 - 2*x4)*y2 + v2*v3*(-(x3*y1) - | |
x1*y2 + x4*y2 + x2*(y1 - y3) + x4*y3) + v1*v2*(-(x3*y2) + x4*(y1 + | |
y2) - x1*y3 + x2*(-y1 + y3)) + v1*v3*(x3*y1 + x1*y3 - x4*(y1 + y3)))) | |
+ (u2*u2)*(-(u4*(v1 - v3)*(x2 - x4)*(v1*y1 - v3*y3)) + | |
u1*(v1*v3*(-(x2*y1) + x3*(y1 - y2) + x1*y2) + v1*v4*(x2*y1 - x1*y2 + | |
x4*(-y1 + y2)) + (v3*v3)*(-x1 + x2)*y3 + v3*v4*(x4*(y1 - y2) + x3*(-y1 + | |
y2) + (x1 - x2)*y3)) + u3*((v1*v1)*(x2 - x3)*y1 + v1*v4*(-(x2*y1) + | |
x3*y1 + (x1 - x4)*(y2 - y3)) + v3*v4*(-(x3*y2) + x4*(y2 - y3) + | |
x2*y3) + v1*v3*(x3*y2 - x2*y3 + x1*(-y2 + y3)))) - u2*((u3*u3)*((v1*v1)*(x2 | |
- x3)*y1 + v1*v4*(-(x2*y1) + x3*y1 + (x1 - x4)*(y2 - y3)) + | |
v2*v4*(-(x3*y2) + x4*(y2 - y3) + x2*y3) + v1*v2*(x3*y2 - x2*y3 + | |
x1*(-y2 + y3))) - u1*(u1*(v2*v4*(-(x2*y1) + x4*(y1 - y2) + x1*y2) + | |
v2*v3*(x2*y1 - x1*y2 + x3*(-y1 + y2)) + (v3*v3)*(x1 - x2)*y3 + | |
v3*v4*(x3*(y1 - y2) + x4*(-y1 + y2) + (-x1 + x2)*y3)) + | |
u4*(v1*v2*(x2*y1 + x1*y2 - x4*(y1 + y2)) + (v3*v3)*(x1 + x2 - 2*x4)*y3 + | |
v2*v3*(-(x2*y1) + x3*(y1 - y2) + x4*y2 - x1*y3 + x4*y3) + | |
v1*v3*(-(x1*y2) + x3*(-y1 + y2) - x2*y3 + x4*(y1 + y3)))) + | |
u3*(-(u4*((v1*v1)*(x2 + x3 - 2*x4)*y1 + v1*v2*(-(x3*y1) - x1*y2 + x4*(y1 | |
+ y2) + x1*y3 - x2*y3) + v1*v3*(-(x2*y1) + x1*y2 - x3*y2 - x1*y3 + | |
x4*(y1 + y3)) + v2*v3*(x3*y2 + x2*y3 - x4*(y2 + y3)))) + | |
u1*(v3*v4*(-(x3*(y1 + y2)) + x4*(y1 + y2 - 2*y3) + (x1 + x2)*y3) + | |
v1*(v2*(x2*y1 + x1*y2 - x3*(y1 + y2)) + v4*(x2*y1 + x3*y1 - 2*x4*y1 - | |
x1*y2 + x4*y2 - x1*y3 + x4*y3) + v3*(x3*y1 + x1*y3 - x2*(y1 + y3))) + | |
v2*(v4*((x1 + x3)*y2 - x2*(y1 + y3) + x4*(y1 - 2*y2 + y3)) + | |
v3*(x3*y2 + x2*y3 - x1*(y2 + y3)))))))*(-(v1*(v1 - v2)*(u3*v1 - | |
u1*v3)*(u3*(v1 - v2) + u1*(v2 - v3) + u2*(-v1 + | |
v3))*(x1*x1)*x3*(-(u3*v1*v2*x1*x3) + u3*v1*v4*x1*x3 + u3*v1*v2*x2*x3 - | |
u3*v2*v4*x2*x3 + u4*v1*v2*x1*x4 - u4*v1*v3*x1*x4 - u4*v1*v2*x2*x4 + | |
u4*v2*v3*x2*x4 + u4*v1*v3*x3*x4 - u4*v2*v3*x3*x4 - u3*v1*v4*x3*x4 + | |
u3*v2*v4*x3*x4 + u2*x2*(v1*v3*(x1 - x3) + v3*v4*(x3 - x4) + | |
v1*v4*(-x1 + x4)) + u1*x1*(v2*v3*(-x2 + x3) + v2*v4*(x2 - x4) + | |
v3*v4*(-x3 + x4)))*(u2*v3*x2*x3*y1 - u2*v4*x2*x3*y1 - u1*v3*x1*x3*y2 | |
+ u1*v4*x1*x3*y2 - u2*v1*x1*x2*y3 + u1*v2*x1*x2*y3 - u1*v4*x1*x2*y3 + | |
u2*v4*x1*x2*y3 + u2*v1*x1*x2*y4 - u1*v2*x1*x2*y4 + u1*v4*x1*x2*y4 - | |
u2*v4*x1*x2*y4 + u1*v3*x1*x3*y4 - u1*v4*x1*x3*y4 - u2*v3*x2*x3*y4 + | |
u2*v4*x2*x3*y4 + u3*x3*(v1*x1*(y2 - y4) + v2*x2*(-y1 + y4) + | |
v4*(x2*y1 - x1*y2 + x1*y4 - x2*y4)) + u4*(v3*x3*(-(x2*y1) + x1*y2 - | |
x1*y4 + x2*y4) + v1*x1*(-(x3*y2) + x2*y3 - x2*y4 + x3*y4) + | |
v2*x2*(x3*(y1 - y4) + x1*(-y3 + y4))))) - (u1*v2*x1*x2*x3 - | |
u1*v3*x1*x2*x3 - u4*v1*x1*x2*x4 - u1*v2*x1*x2*x4 + u4*v2*x1*x2*x4 + | |
u1*v4*x1*x2*x4 + u4*v1*x1*x3*x4 + u1*v3*x1*x3*x4 - u4*v3*x1*x3*x4 - | |
u1*v4*x1*x3*x4 - u4*v2*x2*x3*x4 + u4*v3*x2*x3*x4 + u3*x3*(v1*x1*(x2 - | |
x4) + v4*(x1 - x2)*x4 + v2*x2*(-x1 + x4)) + u2*x2*(v3*x3*(x1 - x4) + | |
v4*(-x1 + x3)*x4 + v1*x1*(-x3 + x4)))*(v1*x1*(-(u1*v2*x1*x2) - | |
u3*v1*x1*x3 + u1*v3*x1*x3 + u3*v2*x2*x3 + u2*x2*(v1*x1 - | |
v3*x3))*(-(v3*(-x1 + x3)*(v1*(u4*(-v1 + v2) + u2*(v1 - v4) + u1*(-v2 | |
+ v4))*(u1*(-v2 + v3)*y1 + u2*(v1 - v3)*y2 + u3*(-v1 + v2)*y3) - | |
u1*(u4*(v1 - v2) + u1*(v2 - v4) + u2*(-v1 + v4))*(v1*v2*(y1 - y2) + | |
v2*v3*(y2 - y3) + v1*v3*(-y1 + y3)) - v1*(u3*(-v1 + v2) + u2*(v1 - | |
v3) + u1*(-v2 + v3))*(u1*(-v2 + v4)*y1 + u2*(v1 - v4)*y2 + u4*(-v1 + | |
v2)*y4) + u1*(u3*(v1 - v2) + u1*(v2 - v3) + u2*(-v1 + v3))*(v1*v2*(y1 | |
- y2) + v2*v4*(y2 - y4) + v1*v4*(-y1 + y4)))) + (u3*v1 - | |
u1*v3)*x3*((u4*(v1 - v2) + u1*(v2 - v4) + u2*(-v1 + v4))*(v1*v2*(y1 - | |
y2) + v2*v3*(y2 - y3) + v1*v3*(-y1 + y3)) + (u3*(-v1 + v2) + u2*(v1 - | |
v3) + u1*(-v2 + v3))*(v1*v2*(y1 - y2) + v2*v4*(y2 - y4) + v1*v4*(-y1 | |
+ y4)))) - (u2*v1*v3*x2*(x1 - x3) + u3*v1*v2*(-x1 + x2)*x3 + | |
u1*v2*v3*x1*(-x2 + x3))*(-(x1*(-(v1*x1) + v3*x3)*(v1*(u4*(-v1 + v2) + | |
u2*(v1 - v4) + u1*(-v2 + v4))*(u1*(-v2 + v3)*y1 + u2*(v1 - v3)*y2 + | |
u3*(-v1 + v2)*y3) - u1*(u4*(v1 - v2) + u1*(v2 - v4) + u2*(-v1 + | |
v4))*(v1*v2*(y1 - y2) + v2*v3*(y2 - y3) + v1*v3*(-y1 + y3)) - | |
v1*(u3*(-v1 + v2) + u2*(v1 - v3) + u1*(-v2 + v3))*(u1*(-v2 + v4)*y1 + | |
u2*(v1 - v4)*y2 + u4*(-v1 + v2)*y4) + u1*(u3*(v1 - v2) + u1*(v2 - v3) | |
+ u2*(-v1 + v3))*(v1*v2*(y1 - y2) + v2*v4*(y2 - y4) + v1*v4*(-y1 + | |
y4)))) + (u3*v1 - u1*v3)*x1*x3*((u4*(v1 - v2) + u1*(v2 - v4) + | |
u2*(-v1 + v4))*(v1*v2*(y1 - y2) + v2*v3*(y2 - y3) + v1*v3*(-y1 + y3)) | |
+ (u3*(-v1 + v2) + u2*(v1 - v3) + u1*(-v2 + v3))*(v1*v2*(y1 - y2) + | |
v2*v4*(y2 - y4) + v1*v4*(-y1 + y4)))))))/((u3*(-v1 + v2) + u2*(v1 - | |
v3) + u1*(-v2 + v3))*(-(u3*v1*v2*x1*x3) + u3*v1*v4*x1*x3 + | |
u3*v1*v2*x2*x3 - u3*v2*v4*x2*x3 + u4*v1*v2*x1*x4 - u4*v1*v3*x1*x4 - | |
u4*v1*v2*x2*x4 + u4*v2*v3*x2*x4 + u4*v1*v3*x3*x4 - u4*v2*v3*x3*x4 - | |
u3*v1*v4*x3*x4 + u3*v2*v4*x3*x4 + u2*x2*(v1*v3*(x1 - x3) + v3*v4*(x3 | |
- x4) + v1*v4*(-x1 + x4)) + u1*x1*(v2*v3*(-x2 + x3) + v2*v4*(x2 - x4) | |
+ v3*v4*(-x3 + x4)))*(-((u1*u4*(v2*x2 - v3*x3)*(x1 - x4) + | |
u3*u4*(v1*x1 - v2*x2)*(x3 - x4) - u1*u3*(x1 - x3)*(v2*x2 - v4*x4) + | |
u2*(-(u4*(v1*x1 - v3*x3)*(x2 - x4)) + u3*(x2 - x3)*(v1*x1 - v4*x4) + | |
u1*(x1 - x2)*(v3*x3 - v4*x4)))*(v1*x1*(-(u1*v2*x1*x2) - u3*v1*x1*x3 + | |
u1*v3*x1*x3 + u3*v2*x2*x3 + u2*x2*(v1*x1 - v3*x3))*(-(v3*(-x1 + | |
x3)*(v1*(u4*(-v1 + v2) + u2*(v1 - v4) + u1*(-v2 + v4))*(u1*(-v2 + | |
v3)*y1 + u2*(v1 - v3)*y2 + u3*(-v1 + v2)*y3) - u1*(u4*(v1 - v2) + | |
u1*(v2 - v4) + u2*(-v1 + v4))*(v1*v2*(y1 - y2) + v2*v3*(y2 - y3) + | |
v1*v3*(-y1 + y3)) - v1*(u3*(-v1 + v2) + u2*(v1 - v3) + u1*(-v2 + | |
v3))*(u1*(-v2 + v4)*y1 + u2*(v1 - v4)*y2 + u4*(-v1 + v2)*y4) + | |
u1*(u3*(v1 - v2) + u1*(v2 - v3) + u2*(-v1 + v3))*(v1*v2*(y1 - y2) + | |
v2*v4*(y2 - y4) + v1*v4*(-y1 + y4)))) + (u3*v1 - u1*v3)*x3*((u4*(v1 - | |
v2) + u1*(v2 - v4) + u2*(-v1 + v4))*(v1*v2*(y1 - y2) + v2*v3*(y2 - | |
y3) + v1*v3*(-y1 + y3)) + (u3*(-v1 + v2) + u2*(v1 - v3) + u1*(-v2 + | |
v3))*(v1*v2*(y1 - y2) + v2*v4*(y2 - y4) + v1*v4*(-y1 + y4)))) - | |
(u2*v1*v3*x2*(x1 - x3) + u3*v1*v2*(-x1 + x2)*x3 + u1*v2*v3*x1*(-x2 + | |
x3))*(-(x1*(-(v1*x1) + v3*x3)*(v1*(u4*(-v1 + v2) + u2*(v1 - v4) + | |
u1*(-v2 + v4))*(u1*(-v2 + v3)*y1 + u2*(v1 - v3)*y2 + u3*(-v1 + | |
v2)*y3) - u1*(u4*(v1 - v2) + u1*(v2 - v4) + u2*(-v1 + v4))*(v1*v2*(y1 | |
- y2) + v2*v3*(y2 - y3) + v1*v3*(-y1 + y3)) - v1*(u3*(-v1 + v2) + | |
u2*(v1 - v3) + u1*(-v2 + v3))*(u1*(-v2 + v4)*y1 + u2*(v1 - v4)*y2 + | |
u4*(-v1 + v2)*y4) + u1*(u3*(v1 - v2) + u1*(v2 - v3) + u2*(-v1 + | |
v3))*(v1*v2*(y1 - y2) + v2*v4*(y2 - y4) + v1*v4*(-y1 + y4)))) + | |
(u3*v1 - u1*v3)*x1*x3*((u4*(v1 - v2) + u1*(v2 - v4) + u2*(-v1 + | |
v4))*(v1*v2*(y1 - y2) + v2*v3*(y2 - y3) + v1*v3*(-y1 + y3)) + | |
(u3*(-v1 + v2) + u2*(v1 - v3) + u1*(-v2 + v3))*(v1*v2*(y1 - y2) + | |
v2*v4*(y2 - y4) + v1*v4*(-y1 + y4)))))) + (-(u3*v1*v2*x1*x3) + | |
u3*v1*v4*x1*x3 + u3*v1*v2*x2*x3 - u3*v2*v4*x2*x3 + u4*v1*v2*x1*x4 - | |
u4*v1*v3*x1*x4 - u4*v1*v2*x2*x4 + u4*v2*v3*x2*x4 + u4*v1*v3*x3*x4 - | |
u4*v2*v3*x3*x4 - u3*v1*v4*x3*x4 + u3*v2*v4*x3*x4 + u2*x2*(v1*v3*(x1 - | |
x3) + v3*v4*(x3 - x4) + v1*v4*(-x1 + x4)) + u1*x1*(v2*v3*(-x2 + x3) + | |
v2*v4*(x2 - x4) + v3*v4*(-x3 + x4)))*(-((u2*u3*v1*x1*(x2 - x3) + | |
u1*u2*v3*(x1 - x2)*x3 + u1*u3*v2*x2*(-x1 + x3))*(-(x1*(-(v1*x1) + | |
v3*x3)*(v1*(u4*(-v1 + v2) + u2*(v1 - v4) + u1*(-v2 + v4))*(u1*(-v2 + | |
v3)*y1 + u2*(v1 - v3)*y2 + u3*(-v1 + v2)*y3) - u1*(u4*(v1 - v2) + | |
u1*(v2 - v4) + u2*(-v1 + v4))*(v1*v2*(y1 - y2) + v2*v3*(y2 - y3) + | |
v1*v3*(-y1 + y3)) - v1*(u3*(-v1 + v2) + u2*(v1 - v3) + u1*(-v2 + | |
v3))*(u1*(-v2 + v4)*y1 + u2*(v1 - v4)*y2 + u4*(-v1 + v2)*y4) + | |
u1*(u3*(v1 - v2) + u1*(v2 - v3) + u2*(-v1 + v3))*(v1*v2*(y1 - y2) + | |
v2*v4*(y2 - y4) + v1*v4*(-y1 + y4)))) + (u3*v1 - | |
u1*v3)*x1*x3*((u4*(v1 - v2) + u1*(v2 - v4) + u2*(-v1 + | |
v4))*(v1*v2*(y1 - y2) + v2*v3*(y2 - y3) + v1*v3*(-y1 + y3)) + | |
(u3*(-v1 + v2) + u2*(v1 - v3) + u1*(-v2 + v3))*(v1*v2*(y1 - y2) + | |
v2*v4*(y2 - y4) + v1*v4*(-y1 + y4))))) + (-(u1*v2*x1*x2) - | |
u3*v1*x1*x3 + u1*v3*x1*x3 + u3*v2*x2*x3 + u2*x2*(v1*x1 - | |
v3*x3))*(-(x1*(-(u3*v1*x1) + u1*v3*x3)*(v1*(u4*(-v1 + v2) + u2*(v1 - | |
v4) + u1*(-v2 + v4))*(u1*(-v2 + v3)*y1 + u2*(v1 - v3)*y2 + u3*(-v1 + | |
v2)*y3) - u1*(u4*(v1 - v2) + u1*(v2 - v4) + u2*(-v1 + v4))*(v1*v2*(y1 | |
- y2) + v2*v3*(y2 - y3) + v1*v3*(-y1 + y3)) - v1*(u3*(-v1 + v2) + | |
u2*(v1 - v3) + u1*(-v2 + v3))*(u1*(-v2 + v4)*y1 + u2*(v1 - v4)*y2 + | |
u4*(-v1 + v2)*y4) + u1*(u3*(v1 - v2) + u1*(v2 - v3) + u2*(-v1 + | |
v3))*(v1*v2*(y1 - y2) + v2*v4*(y2 - y4) + v1*v4*(-y1 + y4)))) + | |
u1*(u3*v1 - u1*v3)*x1*x3*((u4*(v1 - v2) + u1*(v2 - v4) + u2*(-v1 + | |
v4))*(v1*v2*(y1 - y2) + v2*v3*(y2 - y3) + v1*v3*(-y1 + y3)) + | |
(u3*(-v1 + v2) + u2*(v1 - v3) + u1*(-v2 + v3))*(v1*v2*(y1 - y2) + | |
v2*v4*(y2 - y4) + v1*v4*(-y1 + y4))))))); | |
double f = (u3*v2*x2*x3*y1 - | |
u2*v3*x2*x3*y1 - u3*v1*x1*x3*y2 + u1*v3*x1*x3*y2 + u2*v1*x1*x2*y3 - | |
u1*v2*x1*x2*y3)/(u2*v1*x1*x2 - u1*v2*x1*x2 - u3*v1*x1*x3 + | |
u1*v3*x1*x3 + u3*v2*x2*x3 - u2*v3*x2*x3) + ((u1*v2*x1*x2*x3 - | |
u1*v3*x1*x2*x3 - u4*v1*x1*x2*x4 - u1*v2*x1*x2*x4 + u4*v2*x1*x2*x4 + | |
u1*v4*x1*x2*x4 + u4*v1*x1*x3*x4 + u1*v3*x1*x3*x4 - u4*v3*x1*x3*x4 - | |
u1*v4*x1*x3*x4 - u4*v2*x2*x3*x4 + u4*v3*x2*x3*x4 + u3*x3*(v1*x1*(x2 - | |
x4) + v4*(x1 - x2)*x4 + v2*x2*(-x1 + x4)) + u2*x2*(v3*x3*(x1 - x4) + | |
v4*(-x1 + x3)*x4 + v1*x1*(-x3 + x4)))*(-(u3*v1*v2*x3*y1) + | |
u2*v1*v3*x3*y1 + u2*v1*v3*x1*y2 - u1*v2*v3*x1*y2 + u3*v1*v2*x3*y2 - | |
u2*v1*v3*x3*y2 - u2*v1*v3*x1*y3 + u1*v2*v3*x1*y3 - ((u2*v1*v3*x2*(x1 | |
- x3) + u3*v1*v2*(-x1 + x2)*x3 + u1*v2*v3*x1*(-x2 + | |
x3))*(u2*v3*x3*(y1 - y2) + u3*v2*x3*(-y1 + y2) + u2*v1*x1*(y2 - y3) + | |
u1*v2*x1*(-y2 + y3)))/(-(u1*v2*x1*x2) - u3*v1*x1*x3 + u1*v3*x1*x3 + | |
u3*v2*x2*x3 + u2*x2*(v1*x1 - v3*x3))))/((u3*(-v1 + v2) + u2*(v1 - v3) | |
+ u1*(-v2 + v3))*x1*x3*(-(u3*v1*v2*x1*x3) + u3*v1*v4*x1*x3 + | |
u3*v1*v2*x2*x3 - u3*v2*v4*x2*x3 + u4*v1*v2*x1*x4 - u4*v1*v3*x1*x4 - | |
u4*v1*v2*x2*x4 + u4*v2*v3*x2*x4 + u4*v1*v3*x3*x4 - u4*v2*v3*x3*x4 - | |
u3*v1*v4*x3*x4 + u3*v2*v4*x3*x4 + u2*x2*(v1*v3*(x1 - x3) + v3*v4*(x3 | |
- x4) + v1*v4*(-x1 + x4)) + u1*x1*(v2*v3*(-x2 + x3) + v2*v4*(x2 - x4) | |
+ v3*v4*(-x3 + x4)))) + ((((u1*u3*v2*x2*(x1 - x3) + u1*u2*v3*(-x1 + | |
x2)*x3 + u2*u3*v1*x1*(-x2 + x3))*(u2*v3*x3*(y1 - y2) + u3*v2*x3*(-y1 | |
+ y2) + u2*v1*x1*(y2 - y3) + u1*v2*x1*(-y2 + y3)))/((u3*(v1 - v2) + | |
u1*(v2 - v3) + u2*(-v1 + v3))*x1*x3*(-(u2*v1*x1*x2) + u1*v2*x1*x2 + | |
u3*v1*x1*x3 - u1*v3*x1*x3 - u3*v2*x2*x3 + u2*v3*x2*x3)) + | |
(u1*u2*v3*x3*(y1 - y2) + u2*u3*v1*x1*(y2 - y3) + u1*u3*v2*(x3*(-y1 + | |
y2) + x1*(-y2 + y3)))/((u3*(-v1 + v2) + u2*(v1 - v3) + u1*(-v2 + | |
v3))*x1*x3) - ((u1*u4*(v2*x2 - v3*x3)*(x1 - x4) + u3*u4*(v1*x1 - | |
v2*x2)*(x3 - x4) - u1*u3*(x1 - x3)*(v2*x2 - v4*x4) + u2*(-(u4*(v1*x1 | |
- v3*x3)*(x2 - x4)) + u3*(x2 - x3)*(v1*x1 - v4*x4) + u1*(x1 - | |
x2)*(v3*x3 - v4*x4)))*((u3*u3)*v1*(v1 - v2)*v2*x3*(y1 - y2) + | |
(u2*u2)*v1*(v1 - v3)*v3*x2*(y1 - y3) + (u1*u1)*v2*(v2 - v3)*v3*x1*(y2 - y3) | |
+ u2*u3*v1*(v2*v3*x3*(y1 - y2) + v2*v3*x2*(y1 - y3) + v1*v2*(x1*(y2 - | |
y3) + x2*(-y1 + y3)) + v1*v3*(x3*(-y1 + y2) + x1*(-y2 + y3))) + | |
u1*u3*v2*(v2*v3*x3*(y1 - y2) + v1*v3*(x3*(-y1 + y2) + x1*(y2 - y3)) + | |
v2*v3*x2*(-y1 + y3) + v1*v2*(x2*(y1 - y3) + x1*(-y2 + y3))) + | |
u1*u2*v3*(v2*v3*x3*(-y1 + y2) + v1*v3*(x3*(y1 - y2) + x1*(y2 - y3)) + | |
v2*v3*x2*(y1 - y3) + v1*v2*(x2*(-y1 + y3) + x1*(-y2 + | |
y3)))))/((u3*(-v1 + v2) + u2*(v1 - v3) + u1*(-v2 + | |
v3))*(-(u1*v2*x1*x2) - u3*v1*x1*x3 + u1*v3*x1*x3 + u3*v2*x2*x3 + | |
u2*x2*(v1*x1 - v3*x3))*(-(u3*v1*v2*x1*x3) + u3*v1*v4*x1*x3 + | |
u3*v1*v2*x2*x3 - u3*v2*v4*x2*x3 + u4*v1*v2*x1*x4 - u4*v1*v3*x1*x4 - | |
u4*v1*v2*x2*x4 + u4*v2*v3*x2*x4 + u4*v1*v3*x3*x4 - u4*v2*v3*x3*x4 - | |
u3*v1*v4*x3*x4 + u3*v2*v4*x3*x4 + u2*x2*(v1*v3*(x1 - x3) + v3*v4*(x3 | |
- x4) + v1*v4*(-x1 + x4)) + u1*x1*(v2*v3*(-x2 + x3) + v2*v4*(x2 - x4) | |
+ v3*v4*(-x3 + x4)))))*(-(v1*(v1 - v2)*(u3*v1 - u1*v3)*(u3*(v1 - v2) | |
+ u1*(v2 - v3) + u2*(-v1 + v3))*(x1*x1)*x3*(-(u3*v1*v2*x1*x3) + | |
u3*v1*v4*x1*x3 + u3*v1*v2*x2*x3 - u3*v2*v4*x2*x3 + u4*v1*v2*x1*x4 - | |
u4*v1*v3*x1*x4 - u4*v1*v2*x2*x4 + u4*v2*v3*x2*x4 + u4*v1*v3*x3*x4 - | |
u4*v2*v3*x3*x4 - u3*v1*v4*x3*x4 + u3*v2*v4*x3*x4 + u2*x2*(v1*v3*(x1 - | |
x3) + v3*v4*(x3 - x4) + v1*v4*(-x1 + x4)) + u1*x1*(v2*v3*(-x2 + x3) + | |
v2*v4*(x2 - x4) + v3*v4*(-x3 + x4)))*(u2*v3*x2*x3*y1 - u2*v4*x2*x3*y1 | |
- u1*v3*x1*x3*y2 + u1*v4*x1*x3*y2 - u2*v1*x1*x2*y3 + u1*v2*x1*x2*y3 - | |
u1*v4*x1*x2*y3 + u2*v4*x1*x2*y3 + u2*v1*x1*x2*y4 - u1*v2*x1*x2*y4 + | |
u1*v4*x1*x2*y4 - u2*v4*x1*x2*y4 + u1*v3*x1*x3*y4 - u1*v4*x1*x3*y4 - | |
u2*v3*x2*x3*y4 + u2*v4*x2*x3*y4 + u3*x3*(v1*x1*(y2 - y4) + v2*x2*(-y1 | |
+ y4) + v4*(x2*y1 - x1*y2 + x1*y4 - x2*y4)) + u4*(v3*x3*(-(x2*y1) + | |
x1*y2 - x1*y4 + x2*y4) + v1*x1*(-(x3*y2) + x2*y3 - x2*y4 + x3*y4) + | |
v2*x2*(x3*(y1 - y4) + x1*(-y3 + y4))))) - (u1*v2*x1*x2*x3 - | |
u1*v3*x1*x2*x3 - u4*v1*x1*x2*x4 - u1*v2*x1*x2*x4 + u4*v2*x1*x2*x4 + | |
u1*v4*x1*x2*x4 + u4*v1*x1*x3*x4 + u1*v3*x1*x3*x4 - u4*v3*x1*x3*x4 - | |
u1*v4*x1*x3*x4 - u4*v2*x2*x3*x4 + u4*v3*x2*x3*x4 + u3*x3*(v1*x1*(x2 - | |
x4) + v4*(x1 - x2)*x4 + v2*x2*(-x1 + x4)) + u2*x2*(v3*x3*(x1 - x4) + | |
v4*(-x1 + x3)*x4 + v1*x1*(-x3 + x4)))*(v1*x1*(-(u1*v2*x1*x2) - | |
u3*v1*x1*x3 + u1*v3*x1*x3 + u3*v2*x2*x3 + u2*x2*(v1*x1 - | |
v3*x3))*(-(v3*(-x1 + x3)*(v1*(u4*(-v1 + v2) + u2*(v1 - v4) + u1*(-v2 | |
+ v4))*(u1*(-v2 + v3)*y1 + u2*(v1 - v3)*y2 + u3*(-v1 + v2)*y3) - | |
u1*(u4*(v1 - v2) + u1*(v2 - v4) + u2*(-v1 + v4))*(v1*v2*(y1 - y2) + | |
v2*v3*(y2 - y3) + v1*v3*(-y1 + y3)) - v1*(u3*(-v1 + v2) + u2*(v1 - | |
v3) + u1*(-v2 + v3))*(u1*(-v2 + v4)*y1 + u2*(v1 - v4)*y2 + u4*(-v1 + | |
v2)*y4) + u1*(u3*(v1 - v2) + u1*(v2 - v3) + u2*(-v1 + v3))*(v1*v2*(y1 | |
- y2) + v2*v4*(y2 - y4) + v1*v4*(-y1 + y4)))) + (u3*v1 - | |
u1*v3)*x3*((u4*(v1 - v2) + u1*(v2 - v4) + u2*(-v1 + v4))*(v1*v2*(y1 - | |
y2) + v2*v3*(y2 - y3) + v1*v3*(-y1 + y3)) + (u3*(-v1 + v2) + u2*(v1 - | |
v3) + u1*(-v2 + v3))*(v1*v2*(y1 - y2) + v2*v4*(y2 - y4) + v1*v4*(-y1 | |
+ y4)))) - (u2*v1*v3*x2*(x1 - x3) + u3*v1*v2*(-x1 + x2)*x3 + | |
u1*v2*v3*x1*(-x2 + x3))*(-(x1*(-(v1*x1) + v3*x3)*(v1*(u4*(-v1 + v2) + | |
u2*(v1 - v4) + u1*(-v2 + v4))*(u1*(-v2 + v3)*y1 + u2*(v1 - v3)*y2 + | |
u3*(-v1 + v2)*y3) - u1*(u4*(v1 - v2) + u1*(v2 - v4) + u2*(-v1 + | |
v4))*(v1*v2*(y1 - y2) + v2*v3*(y2 - y3) + v1*v3*(-y1 + y3)) - | |
v1*(u3*(-v1 + v2) + u2*(v1 - v3) + u1*(-v2 + v3))*(u1*(-v2 + v4)*y1 + | |
u2*(v1 - v4)*y2 + u4*(-v1 + v2)*y4) + u1*(u3*(v1 - v2) + u1*(v2 - v3) | |
+ u2*(-v1 + v3))*(v1*v2*(y1 - y2) + v2*v4*(y2 - y4) + v1*v4*(-y1 + | |
y4)))) + (u3*v1 - u1*v3)*x1*x3*((u4*(v1 - v2) + u1*(v2 - v4) + | |
u2*(-v1 + v4))*(v1*v2*(y1 - y2) + v2*v3*(y2 - y3) + v1*v3*(-y1 + y3)) | |
+ (u3*(-v1 + v2) + u2*(v1 - v3) + u1*(-v2 + v3))*(v1*v2*(y1 - y2) + | |
v2*v4*(y2 - y4) + v1*v4*(-y1 + y4)))))))/(-((u1*u4*(v2*x2 - | |
v3*x3)*(x1 - x4) + u3*u4*(v1*x1 - v2*x2)*(x3 - x4) - u1*u3*(x1 - | |
x3)*(v2*x2 - v4*x4) + u2*(-(u4*(v1*x1 - v3*x3)*(x2 - x4)) + u3*(x2 - | |
x3)*(v1*x1 - v4*x4) + u1*(x1 - x2)*(v3*x3 - | |
v4*x4)))*(v1*x1*(-(u1*v2*x1*x2) - u3*v1*x1*x3 + u1*v3*x1*x3 + | |
u3*v2*x2*x3 + u2*x2*(v1*x1 - v3*x3))*(-(v3*(-x1 + x3)*(v1*(u4*(-v1 + | |
v2) + u2*(v1 - v4) + u1*(-v2 + v4))*(u1*(-v2 + v3)*y1 + u2*(v1 - | |
v3)*y2 + u3*(-v1 + v2)*y3) - u1*(u4*(v1 - v2) + u1*(v2 - v4) + | |
u2*(-v1 + v4))*(v1*v2*(y1 - y2) + v2*v3*(y2 - y3) + v1*v3*(-y1 + y3)) | |
- v1*(u3*(-v1 + v2) + u2*(v1 - v3) + u1*(-v2 + v3))*(u1*(-v2 + v4)*y1 | |
+ u2*(v1 - v4)*y2 + u4*(-v1 + v2)*y4) + u1*(u3*(v1 - v2) + u1*(v2 - | |
v3) + u2*(-v1 + v3))*(v1*v2*(y1 - y2) + v2*v4*(y2 - y4) + v1*v4*(-y1 | |
+ y4)))) + (u3*v1 - u1*v3)*x3*((u4*(v1 - v2) + u1*(v2 - v4) + u2*(-v1 | |
+ v4))*(v1*v2*(y1 - y2) + v2*v3*(y2 - y3) + v1*v3*(-y1 + y3)) + | |
(u3*(-v1 + v2) + u2*(v1 - v3) + u1*(-v2 + v3))*(v1*v2*(y1 - y2) + | |
v2*v4*(y2 - y4) + v1*v4*(-y1 + y4)))) - (u2*v1*v3*x2*(x1 - x3) + | |
u3*v1*v2*(-x1 + x2)*x3 + u1*v2*v3*x1*(-x2 + x3))*(-(x1*(-(v1*x1) + | |
v3*x3)*(v1*(u4*(-v1 + v2) + u2*(v1 - v4) + u1*(-v2 + v4))*(u1*(-v2 + | |
v3)*y1 + u2*(v1 - v3)*y2 + u3*(-v1 + v2)*y3) - u1*(u4*(v1 - v2) + | |
u1*(v2 - v4) + u2*(-v1 + v4))*(v1*v2*(y1 - y2) + v2*v3*(y2 - y3) + | |
v1*v3*(-y1 + y3)) - v1*(u3*(-v1 + v2) + u2*(v1 - v3) + u1*(-v2 + | |
v3))*(u1*(-v2 + v4)*y1 + u2*(v1 - v4)*y2 + u4*(-v1 + v2)*y4) + | |
u1*(u3*(v1 - v2) + u1*(v2 - v3) + u2*(-v1 + v3))*(v1*v2*(y1 - y2) + | |
v2*v4*(y2 - y4) + v1*v4*(-y1 + y4)))) + (u3*v1 - | |
u1*v3)*x1*x3*((u4*(v1 - v2) + u1*(v2 - v4) + u2*(-v1 + | |
v4))*(v1*v2*(y1 - y2) + v2*v3*(y2 - y3) + v1*v3*(-y1 + y3)) + | |
(u3*(-v1 + v2) + u2*(v1 - v3) + u1*(-v2 + v3))*(v1*v2*(y1 - y2) + | |
v2*v4*(y2 - y4) + v1*v4*(-y1 + y4)))))) + (-(u3*v1*v2*x1*x3) + | |
u3*v1*v4*x1*x3 + u3*v1*v2*x2*x3 - u3*v2*v4*x2*x3 + u4*v1*v2*x1*x4 - | |
u4*v1*v3*x1*x4 - u4*v1*v2*x2*x4 + u4*v2*v3*x2*x4 + u4*v1*v3*x3*x4 - | |
u4*v2*v3*x3*x4 - u3*v1*v4*x3*x4 + u3*v2*v4*x3*x4 + u2*x2*(v1*v3*(x1 - | |
x3) + v3*v4*(x3 - x4) + v1*v4*(-x1 + x4)) + u1*x1*(v2*v3*(-x2 + x3) + | |
v2*v4*(x2 - x4) + v3*v4*(-x3 + x4)))*(-((u2*u3*v1*x1*(x2 - x3) + | |
u1*u2*v3*(x1 - x2)*x3 + u1*u3*v2*x2*(-x1 + x3))*(-(x1*(-(v1*x1) + | |
v3*x3)*(v1*(u4*(-v1 + v2) + u2*(v1 - v4) + u1*(-v2 + v4))*(u1*(-v2 + | |
v3)*y1 + u2*(v1 - v3)*y2 + u3*(-v1 + v2)*y3) - u1*(u4*(v1 - v2) + | |
u1*(v2 - v4) + u2*(-v1 + v4))*(v1*v2*(y1 - y2) + v2*v3*(y2 - y3) + | |
v1*v3*(-y1 + y3)) - v1*(u3*(-v1 + v2) + u2*(v1 - v3) + u1*(-v2 + | |
v3))*(u1*(-v2 + v4)*y1 + u2*(v1 - v4)*y2 + u4*(-v1 + v2)*y4) + | |
u1*(u3*(v1 - v2) + u1*(v2 - v3) + u2*(-v1 + v3))*(v1*v2*(y1 - y2) + | |
v2*v4*(y2 - y4) + v1*v4*(-y1 + y4)))) + (u3*v1 - | |
u1*v3)*x1*x3*((u4*(v1 - v2) + u1*(v2 - v4) + u2*(-v1 + | |
v4))*(v1*v2*(y1 - y2) + v2*v3*(y2 - y3) + v1*v3*(-y1 + y3)) + | |
(u3*(-v1 + v2) + u2*(v1 - v3) + u1*(-v2 + v3))*(v1*v2*(y1 - y2) + | |
v2*v4*(y2 - y4) + v1*v4*(-y1 + y4))))) + (-(u1*v2*x1*x2) - | |
u3*v1*x1*x3 + u1*v3*x1*x3 + u3*v2*x2*x3 + u2*x2*(v1*x1 - | |
v3*x3))*(-(x1*(-(u3*v1*x1) + u1*v3*x3)*(v1*(u4*(-v1 + v2) + u2*(v1 - | |
v4) + u1*(-v2 + v4))*(u1*(-v2 + v3)*y1 + u2*(v1 - v3)*y2 + u3*(-v1 + | |
v2)*y3) - u1*(u4*(v1 - v2) + u1*(v2 - v4) + u2*(-v1 + v4))*(v1*v2*(y1 | |
- y2) + v2*v3*(y2 - y3) + v1*v3*(-y1 + y3)) - v1*(u3*(-v1 + v2) + | |
u2*(v1 - v3) + u1*(-v2 + v3))*(u1*(-v2 + v4)*y1 + u2*(v1 - v4)*y2 + | |
u4*(-v1 + v2)*y4) + u1*(u3*(v1 - v2) + u1*(v2 - v3) + u2*(-v1 + | |
v3))*(v1*v2*(y1 - y2) + v2*v4*(y2 - y4) + v1*v4*(-y1 + y4)))) + | |
u1*(u3*v1 - u1*v3)*x1*x3*((u4*(v1 - v2) + u1*(v2 - v4) + u2*(-v1 + | |
v4))*(v1*v2*(y1 - y2) + v2*v3*(y2 - y3) + v1*v3*(-y1 + y3)) + | |
(u3*(-v1 + v2) + u2*(v1 - v3) + u1*(-v2 + v3))*(v1*v2*(y1 - y2) + | |
v2*v4*(y2 - y4) + v1*v4*(-y1 + y4)))))); | |
double g = (-(v1*v3*x1*x2) + | |
v2*v3*x1*x2 + v1*v4*x1*x2 - v2*v4*x1*x2 + v1*v2*x1*x3 - v2*v3*x1*x3 - | |
v1*v4*x1*x3 + v3*v4*x1*x3 - v1*v2*x2*x3 + v1*v3*x2*x3 + v2*v4*x2*x3 - | |
v3*v4*x2*x3 - v1*v2*x1*x4 + v1*v3*x1*x4 + v2*v4*x1*x4 - v3*v4*x1*x4 + | |
v1*v2*x2*x4 - v2*v3*x2*x4 - v1*v4*x2*x4 + v3*v4*x2*x4 - v1*v3*x3*x4 + | |
v2*v3*x3*x4 + v1*v4*x3*x4 - v2*v4*x3*x4 + ((-(u2*v1*v3*x1) + | |
u2*v1*v4*x1 + u1*v2*v3*x2 - u1*v2*v4*x2 + u4*v1*v2*(-x1 + x2) + | |
u4*v1*v3*(x1 - x3) + u2*v1*v3*x3 - u1*v2*v3*x3 + u1*v3*v4*x3 - | |
u2*v3*v4*x3 + u4*v2*v3*(-x2 + x3) + u3*v2*v4*(x2 - x4) - u2*v1*v4*x4 | |
+ u1*v2*v4*x4 - u1*v3*v4*x4 + u2*v3*v4*x4 + u3*v1*(v2*(x1 - x2) + | |
v4*(-x1 + x4)))*(-(v1*(v1 - v2)*(u3*v1 - u1*v3)*(u3*(v1 - v2) + | |
u1*(v2 - v3) + u2*(-v1 + v3))*(x1*x1)*x3*(-(u3*v1*v2*x1*x3) + | |
u3*v1*v4*x1*x3 + u3*v1*v2*x2*x3 - u3*v2*v4*x2*x3 + u4*v1*v2*x1*x4 - | |
u4*v1*v3*x1*x4 - u4*v1*v2*x2*x4 + u4*v2*v3*x2*x4 + u4*v1*v3*x3*x4 - | |
u4*v2*v3*x3*x4 - u3*v1*v4*x3*x4 + u3*v2*v4*x3*x4 + u2*x2*(v1*v3*(x1 - | |
x3) + v3*v4*(x3 - x4) + v1*v4*(-x1 + x4)) + u1*x1*(v2*v3*(-x2 + x3) + | |
v2*v4*(x2 - x4) + v3*v4*(-x3 + x4)))*(u2*v3*x2*x3*y1 - u2*v4*x2*x3*y1 | |
- u1*v3*x1*x3*y2 + u1*v4*x1*x3*y2 - u2*v1*x1*x2*y3 + u1*v2*x1*x2*y3 - | |
u1*v4*x1*x2*y3 + u2*v4*x1*x2*y3 + u2*v1*x1*x2*y4 - u1*v2*x1*x2*y4 + | |
u1*v4*x1*x2*y4 - u2*v4*x1*x2*y4 + u1*v3*x1*x3*y4 - u1*v4*x1*x3*y4 - | |
u2*v3*x2*x3*y4 + u2*v4*x2*x3*y4 + u3*x3*(v1*x1*(y2 - y4) + v2*x2*(-y1 | |
+ y4) + v4*(x2*y1 - x1*y2 + x1*y4 - x2*y4)) + u4*(v3*x3*(-(x2*y1) + | |
x1*y2 - x1*y4 + x2*y4) + v1*x1*(-(x3*y2) + x2*y3 - x2*y4 + x3*y4) + | |
v2*x2*(x3*(y1 - y4) + x1*(-y3 + y4))))) - (u1*v2*x1*x2*x3 - | |
u1*v3*x1*x2*x3 - u4*v1*x1*x2*x4 - u1*v2*x1*x2*x4 + u4*v2*x1*x2*x4 + | |
u1*v4*x1*x2*x4 + u4*v1*x1*x3*x4 + u1*v3*x1*x3*x4 - u4*v3*x1*x3*x4 - | |
u1*v4*x1*x3*x4 - u4*v2*x2*x3*x4 + u4*v3*x2*x3*x4 + u3*x3*(v1*x1*(x2 - | |
x4) + v4*(x1 - x2)*x4 + v2*x2*(-x1 + x4)) + u2*x2*(v3*x3*(x1 - x4) + | |
v4*(-x1 + x3)*x4 + v1*x1*(-x3 + x4)))*(v1*x1*(-(u1*v2*x1*x2) - | |
u3*v1*x1*x3 + u1*v3*x1*x3 + u3*v2*x2*x3 + u2*x2*(v1*x1 - | |
v3*x3))*(-(v3*(-x1 + x3)*(v1*(u4*(-v1 + v2) + u2*(v1 - v4) + u1*(-v2 | |
+ v4))*(u1*(-v2 + v3)*y1 + u2*(v1 - v3)*y2 + u3*(-v1 + v2)*y3) - | |
u1*(u4*(v1 - v2) + u1*(v2 - v4) + u2*(-v1 + v4))*(v1*v2*(y1 - y2) + | |
v2*v3*(y2 - y3) + v1*v3*(-y1 + y3)) - v1*(u3*(-v1 + v2) + u2*(v1 - | |
v3) + u1*(-v2 + v3))*(u1*(-v2 + v4)*y1 + u2*(v1 - v4)*y2 + u4*(-v1 + | |
v2)*y4) + u1*(u3*(v1 - v2) + u1*(v2 - v3) + u2*(-v1 + v3))*(v1*v2*(y1 | |
- y2) + v2*v4*(y2 - y4) + v1*v4*(-y1 + y4)))) + (u3*v1 - | |
u1*v3)*x3*((u4*(v1 - v2) + u1*(v2 - v4) + u2*(-v1 + v4))*(v1*v2*(y1 - | |
y2) + v2*v3*(y2 - y3) + v1*v3*(-y1 + y3)) + (u3*(-v1 + v2) + u2*(v1 - | |
v3) + u1*(-v2 + v3))*(v1*v2*(y1 - y2) + v2*v4*(y2 - y4) + v1*v4*(-y1 | |
+ y4)))) - (u2*v1*v3*x2*(x1 - x3) + u3*v1*v2*(-x1 + x2)*x3 + | |
u1*v2*v3*x1*(-x2 + x3))*(-(x1*(-(v1*x1) + v3*x3)*(v1*(u4*(-v1 + v2) + | |
u2*(v1 - v4) + u1*(-v2 + v4))*(u1*(-v2 + v3)*y1 + u2*(v1 - v3)*y2 + | |
u3*(-v1 + v2)*y3) - u1*(u4*(v1 - v2) + u1*(v2 - v4) + u2*(-v1 + | |
v4))*(v1*v2*(y1 - y2) + v2*v3*(y2 - y3) + v1*v3*(-y1 + y3)) - | |
v1*(u3*(-v1 + v2) + u2*(v1 - v3) + u1*(-v2 + v3))*(u1*(-v2 + v4)*y1 + | |
u2*(v1 - v4)*y2 + u4*(-v1 + v2)*y4) + u1*(u3*(v1 - v2) + u1*(v2 - v3) | |
+ u2*(-v1 + v3))*(v1*v2*(y1 - y2) + v2*v4*(y2 - y4) + v1*v4*(-y1 + | |
y4)))) + (u3*v1 - u1*v3)*x1*x3*((u4*(v1 - v2) + u1*(v2 - v4) + | |
u2*(-v1 + v4))*(v1*v2*(y1 - y2) + v2*v3*(y2 - y3) + v1*v3*(-y1 + y3)) | |
+ (u3*(-v1 + v2) + u2*(v1 - v3) + u1*(-v2 + v3))*(v1*v2*(y1 - y2) + | |
v2*v4*(y2 - y4) + v1*v4*(-y1 + y4)))))))/(-((u1*u4*(v2*x2 - | |
v3*x3)*(x1 - x4) + u3*u4*(v1*x1 - v2*x2)*(x3 - x4) - u1*u3*(x1 - | |
x3)*(v2*x2 - v4*x4) + u2*(-(u4*(v1*x1 - v3*x3)*(x2 - x4)) + u3*(x2 - | |
x3)*(v1*x1 - v4*x4) + u1*(x1 - x2)*(v3*x3 - | |
v4*x4)))*(v1*x1*(-(u1*v2*x1*x2) - u3*v1*x1*x3 + u1*v3*x1*x3 + | |
u3*v2*x2*x3 + u2*x2*(v1*x1 - v3*x3))*(-(v3*(-x1 + x3)*(v1*(u4*(-v1 + | |
v2) + u2*(v1 - v4) + u1*(-v2 + v4))*(u1*(-v2 + v3)*y1 + u2*(v1 - | |
v3)*y2 + u3*(-v1 + v2)*y3) - u1*(u4*(v1 - v2) + u1*(v2 - v4) + | |
u2*(-v1 + v4))*(v1*v2*(y1 - y2) + v2*v3*(y2 - y3) + v1*v3*(-y1 + y3)) | |
- v1*(u3*(-v1 + v2) + u2*(v1 - v3) + u1*(-v2 + v3))*(u1*(-v2 + v4)*y1 | |
+ u2*(v1 - v4)*y2 + u4*(-v1 + v2)*y4) + u1*(u3*(v1 - v2) + u1*(v2 - | |
v3) + u2*(-v1 + v3))*(v1*v2*(y1 - y2) + v2*v4*(y2 - y4) + v1*v4*(-y1 | |
+ y4)))) + (u3*v1 - u1*v3)*x3*((u4*(v1 - v2) + u1*(v2 - v4) + u2*(-v1 | |
+ v4))*(v1*v2*(y1 - y2) + v2*v3*(y2 - y3) + v1*v3*(-y1 + y3)) + | |
(u3*(-v1 + v2) + u2*(v1 - v3) + u1*(-v2 + v3))*(v1*v2*(y1 - y2) + | |
v2*v4*(y2 - y4) + v1*v4*(-y1 + y4)))) - (u2*v1*v3*x2*(x1 - x3) + | |
u3*v1*v2*(-x1 + x2)*x3 + u1*v2*v3*x1*(-x2 + x3))*(-(x1*(-(v1*x1) + | |
v3*x3)*(v1*(u4*(-v1 + v2) + u2*(v1 - v4) + u1*(-v2 + v4))*(u1*(-v2 + | |
v3)*y1 + u2*(v1 - v3)*y2 + u3*(-v1 + v2)*y3) - u1*(u4*(v1 - v2) + | |
u1*(v2 - v4) + u2*(-v1 + v4))*(v1*v2*(y1 - y2) + v2*v3*(y2 - y3) + | |
v1*v3*(-y1 + y3)) - v1*(u3*(-v1 + v2) + u2*(v1 - v3) + u1*(-v2 + | |
v3))*(u1*(-v2 + v4)*y1 + u2*(v1 - v4)*y2 + u4*(-v1 + v2)*y4) + | |
u1*(u3*(v1 - v2) + u1*(v2 - v3) + u2*(-v1 + v3))*(v1*v2*(y1 - y2) + | |
v2*v4*(y2 - y4) + v1*v4*(-y1 + y4)))) + (u3*v1 - | |
u1*v3)*x1*x3*((u4*(v1 - v2) + u1*(v2 - v4) + u2*(-v1 + | |
v4))*(v1*v2*(y1 - y2) + v2*v3*(y2 - y3) + v1*v3*(-y1 + y3)) + | |
(u3*(-v1 + v2) + u2*(v1 - v3) + u1*(-v2 + v3))*(v1*v2*(y1 - y2) + | |
v2*v4*(y2 - y4) + v1*v4*(-y1 + y4)))))) + (-(u3*v1*v2*x1*x3) + | |
u3*v1*v4*x1*x3 + u3*v1*v2*x2*x3 - u3*v2*v4*x2*x3 + u4*v1*v2*x1*x4 - | |
u4*v1*v3*x1*x4 - u4*v1*v2*x2*x4 + u4*v2*v3*x2*x4 + u4*v1*v3*x3*x4 - | |
u4*v2*v3*x3*x4 - u3*v1*v4*x3*x4 + u3*v2*v4*x3*x4 + u2*x2*(v1*v3*(x1 - | |
x3) + v3*v4*(x3 - x4) + v1*v4*(-x1 + x4)) + u1*x1*(v2*v3*(-x2 + x3) + | |
v2*v4*(x2 - x4) + v3*v4*(-x3 + x4)))*(-((u2*u3*v1*x1*(x2 - x3) + | |
u1*u2*v3*(x1 - x2)*x3 + u1*u3*v2*x2*(-x1 + x3))*(-(x1*(-(v1*x1) + | |
v3*x3)*(v1*(u4*(-v1 + v2) + u2*(v1 - v4) + u1*(-v2 + v4))*(u1*(-v2 + | |
v3)*y1 + u2*(v1 - v3)*y2 + u3*(-v1 + v2)*y3) - u1*(u4*(v1 - v2) + | |
u1*(v2 - v4) + u2*(-v1 + v4))*(v1*v2*(y1 - y2) + v2*v3*(y2 - y3) + | |
v1*v3*(-y1 + y3)) - v1*(u3*(-v1 + v2) + u2*(v1 - v3) + u1*(-v2 + | |
v3))*(u1*(-v2 + v4)*y1 + u2*(v1 - v4)*y2 + u4*(-v1 + v2)*y4) + | |
u1*(u3*(v1 - v2) + u1*(v2 - v3) + u2*(-v1 + v3))*(v1*v2*(y1 - y2) + | |
v2*v4*(y2 - y4) + v1*v4*(-y1 + y4)))) + (u3*v1 - | |
u1*v3)*x1*x3*((u4*(v1 - v2) + u1*(v2 - v4) + u2*(-v1 + | |
v4))*(v1*v2*(y1 - y2) + v2*v3*(y2 - y3) + v1*v3*(-y1 + y3)) + | |
(u3*(-v1 + v2) + u2*(v1 - v3) + u1*(-v2 + v3))*(v1*v2*(y1 - y2) + | |
v2*v4*(y2 - y4) + v1*v4*(-y1 + y4))))) + (-(u1*v2*x1*x2) - | |
u3*v1*x1*x3 + u1*v3*x1*x3 + u3*v2*x2*x3 + u2*x2*(v1*x1 - | |
v3*x3))*(-(x1*(-(u3*v1*x1) + u1*v3*x3)*(v1*(u4*(-v1 + v2) + u2*(v1 - | |
v4) + u1*(-v2 + v4))*(u1*(-v2 + v3)*y1 + u2*(v1 - v3)*y2 + u3*(-v1 + | |
v2)*y3) - u1*(u4*(v1 - v2) + u1*(v2 - v4) + u2*(-v1 + v4))*(v1*v2*(y1 | |
- y2) + v2*v3*(y2 - y3) + v1*v3*(-y1 + y3)) - v1*(u3*(-v1 + v2) + | |
u2*(v1 - v3) + u1*(-v2 + v3))*(u1*(-v2 + v4)*y1 + u2*(v1 - v4)*y2 + | |
u4*(-v1 + v2)*y4) + u1*(u3*(v1 - v2) + u1*(v2 - v3) + u2*(-v1 + | |
v3))*(v1*v2*(y1 - y2) + v2*v4*(y2 - y4) + v1*v4*(-y1 + y4)))) + | |
u1*(u3*v1 - u1*v3)*x1*x3*((u4*(v1 - v2) + u1*(v2 - v4) + u2*(-v1 + | |
v4))*(v1*v2*(y1 - y2) + v2*v3*(y2 - y3) + v1*v3*(-y1 + y3)) + | |
(u3*(-v1 + v2) + u2*(v1 - v3) + u1*(-v2 + v3))*(v1*v2*(y1 - y2) + | |
v2*v4*(y2 - y4) + v1*v4*(-y1 + y4)))))))/(-(u3*v1*v2*x1*x3) + | |
u3*v1*v4*x1*x3 + u3*v1*v2*x2*x3 - u3*v2*v4*x2*x3 + u4*v1*v2*x1*x4 - | |
u4*v1*v3*x1*x4 - u4*v1*v2*x2*x4 + u4*v2*v3*x2*x4 + u4*v1*v3*x3*x4 - | |
u4*v2*v3*x3*x4 - u3*v1*v4*x3*x4 + u3*v2*v4*x3*x4 + u2*x2*(v1*v3*(x1 - | |
x3) + v3*v4*(x3 - x4) + v1*v4*(-x1 + x4)) + u1*x1*(v2*v3*(-x2 + x3) + | |
v2*v4*(x2 - x4) + v3*v4*(-x3 + x4))); | |
double h = (-(u1*v3*x1*x2) + | |
u2*v3*x1*x2 + u1*v4*x1*x2 - u2*v4*x1*x2 + u1*v2*x1*x3 - u3*v2*x1*x3 - | |
u1*v4*x1*x3 + u3*v4*x1*x3 - u2*v1*x2*x3 + u3*v1*x2*x3 + u2*v4*x2*x3 - | |
u3*v4*x2*x3 - u1*v2*x1*x4 + u4*v2*x1*x4 + u1*v3*x1*x4 - u4*v3*x1*x4 + | |
u2*v1*x2*x4 - u4*v1*x2*x4 - u2*v3*x2*x4 + u4*v3*x2*x4 - u3*v1*x3*x4 + | |
u4*v1*x3*x4 + u3*v2*x3*x4 - u4*v2*x3*x4 + ((-(u2*u3*(v1 - v4)*(x2 - | |
x3)) + u1*(-(u2*(v3 - v4)*(x1 - x2)) + u3*(v2 - v4)*(x1 - x3) - | |
u4*(v2 - v3)*(x1 - x4)) + u2*u4*(v1 - v3)*(x2 - x4) - u3*u4*(v1 - | |
v2)*(x3 - x4))*(-(v1*(v1 - v2)*(u3*v1 - u1*v3)*(u3*(v1 - v2) + u1*(v2 | |
- v3) + u2*(-v1 + v3))*(x1*x1)*x3*(-(u3*v1*v2*x1*x3) + u3*v1*v4*x1*x3 + | |
u3*v1*v2*x2*x3 - u3*v2*v4*x2*x3 + u4*v1*v2*x1*x4 - u4*v1*v3*x1*x4 - | |
u4*v1*v2*x2*x4 + u4*v2*v3*x2*x4 + u4*v1*v3*x3*x4 - u4*v2*v3*x3*x4 - | |
u3*v1*v4*x3*x4 + u3*v2*v4*x3*x4 + u2*x2*(v1*v3*(x1 - x3) + v3*v4*(x3 | |
- x4) + v1*v4*(-x1 + x4)) + u1*x1*(v2*v3*(-x2 + x3) + v2*v4*(x2 - x4) | |
+ v3*v4*(-x3 + x4)))*(u2*v3*x2*x3*y1 - u2*v4*x2*x3*y1 - | |
u1*v3*x1*x3*y2 + u1*v4*x1*x3*y2 - u2*v1*x1*x2*y3 + u1*v2*x1*x2*y3 - | |
u1*v4*x1*x2*y3 + u2*v4*x1*x2*y3 + u2*v1*x1*x2*y4 - u1*v2*x1*x2*y4 + | |
u1*v4*x1*x2*y4 - u2*v4*x1*x2*y4 + u1*v3*x1*x3*y4 - u1*v4*x1*x3*y4 - | |
u2*v3*x2*x3*y4 + u2*v4*x2*x3*y4 + u3*x3*(v1*x1*(y2 - y4) + v2*x2*(-y1 | |
+ y4) + v4*(x2*y1 - x1*y2 + x1*y4 - x2*y4)) + u4*(v3*x3*(-(x2*y1) + | |
x1*y2 - x1*y4 + x2*y4) + v1*x1*(-(x3*y2) + x2*y3 - x2*y4 + x3*y4) + | |
v2*x2*(x3*(y1 - y4) + x1*(-y3 + y4))))) - (u1*v2*x1*x2*x3 - | |
u1*v3*x1*x2*x3 - u4*v1*x1*x2*x4 - u1*v2*x1*x2*x4 + u4*v2*x1*x2*x4 + | |
u1*v4*x1*x2*x4 + u4*v1*x1*x3*x4 + u1*v3*x1*x3*x4 - u4*v3*x1*x3*x4 - | |
u1*v4*x1*x3*x4 - u4*v2*x2*x3*x4 + u4*v3*x2*x3*x4 + u3*x3*(v1*x1*(x2 - | |
x4) + v4*(x1 - x2)*x4 + v2*x2*(-x1 + x4)) + u2*x2*(v3*x3*(x1 - x4) + | |
v4*(-x1 + x3)*x4 + v1*x1*(-x3 + x4)))*(v1*x1*(-(u1*v2*x1*x2) - | |
u3*v1*x1*x3 + u1*v3*x1*x3 + u3*v2*x2*x3 + u2*x2*(v1*x1 - | |
v3*x3))*(-(v3*(-x1 + x3)*(v1*(u4*(-v1 + v2) + u2*(v1 - v4) + u1*(-v2 | |
+ v4))*(u1*(-v2 + v3)*y1 + u2*(v1 - v3)*y2 + u3*(-v1 + v2)*y3) - | |
u1*(u4*(v1 - v2) + u1*(v2 - v4) + u2*(-v1 + v4))*(v1*v2*(y1 - y2) + | |
v2*v3*(y2 - y3) + v1*v3*(-y1 + y3)) - v1*(u3*(-v1 + v2) + u2*(v1 - | |
v3) + u1*(-v2 + v3))*(u1*(-v2 + v4)*y1 + u2*(v1 - v4)*y2 + u4*(-v1 + | |
v2)*y4) + u1*(u3*(v1 - v2) + u1*(v2 - v3) + u2*(-v1 + v3))*(v1*v2*(y1 | |
- y2) + v2*v4*(y2 - y4) + v1*v4*(-y1 + y4)))) + (u3*v1 - | |
u1*v3)*x3*((u4*(v1 - v2) + u1*(v2 - v4) + u2*(-v1 + v4))*(v1*v2*(y1 - | |
y2) + v2*v3*(y2 - y3) + v1*v3*(-y1 + y3)) + (u3*(-v1 + v2) + u2*(v1 - | |
v3) + u1*(-v2 + v3))*(v1*v2*(y1 - y2) + v2*v4*(y2 - y4) + v1*v4*(-y1 | |
+ y4)))) - (u2*v1*v3*x2*(x1 - x3) + u3*v1*v2*(-x1 + x2)*x3 + | |
u1*v2*v3*x1*(-x2 + x3))*(-(x1*(-(v1*x1) + v3*x3)*(v1*(u4*(-v1 + v2) + | |
u2*(v1 - v4) + u1*(-v2 + v4))*(u1*(-v2 + v3)*y1 + u2*(v1 - v3)*y2 + | |
u3*(-v1 + v2)*y3) - u1*(u4*(v1 - v2) + u1*(v2 - v4) + u2*(-v1 + | |
v4))*(v1*v2*(y1 - y2) + v2*v3*(y2 - y3) + v1*v3*(-y1 + y3)) - | |
v1*(u3*(-v1 + v2) + u2*(v1 - v3) + u1*(-v2 + v3))*(u1*(-v2 + v4)*y1 + | |
u2*(v1 - v4)*y2 + u4*(-v1 + v2)*y4) + u1*(u3*(v1 - v2) + u1*(v2 - v3) | |
+ u2*(-v1 + v3))*(v1*v2*(y1 - y2) + v2*v4*(y2 - y4) + v1*v4*(-y1 + | |
y4)))) + (u3*v1 - u1*v3)*x1*x3*((u4*(v1 - v2) + u1*(v2 - v4) + | |
u2*(-v1 + v4))*(v1*v2*(y1 - y2) + v2*v3*(y2 - y3) + v1*v3*(-y1 + y3)) | |
+ (u3*(-v1 + v2) + u2*(v1 - v3) + u1*(-v2 + v3))*(v1*v2*(y1 - y2) + | |
v2*v4*(y2 - y4) + v1*v4*(-y1 + y4)))))))/(-((u1*u4*(v2*x2 - | |
v3*x3)*(x1 - x4) + u3*u4*(v1*x1 - v2*x2)*(x3 - x4) - u1*u3*(x1 - | |
x3)*(v2*x2 - v4*x4) + u2*(-(u4*(v1*x1 - v3*x3)*(x2 - x4)) + u3*(x2 - | |
x3)*(v1*x1 - v4*x4) + u1*(x1 - x2)*(v3*x3 - | |
v4*x4)))*(v1*x1*(-(u1*v2*x1*x2) - u3*v1*x1*x3 + u1*v3*x1*x3 + | |
u3*v2*x2*x3 + u2*x2*(v1*x1 - v3*x3))*(-(v3*(-x1 + x3)*(v1*(u4*(-v1 + | |
v2) + u2*(v1 - v4) + u1*(-v2 + v4))*(u1*(-v2 + v3)*y1 + u2*(v1 - | |
v3)*y2 + u3*(-v1 + v2)*y3) - u1*(u4*(v1 - v2) + u1*(v2 - v4) + | |
u2*(-v1 + v4))*(v1*v2*(y1 - y2) + v2*v3*(y2 - y3) + v1*v3*(-y1 + y3)) | |
- v1*(u3*(-v1 + v2) + u2*(v1 - v3) + u1*(-v2 + v3))*(u1*(-v2 + v4)*y1 | |
+ u2*(v1 - v4)*y2 + u4*(-v1 + v2)*y4) + u1*(u3*(v1 - v2) + u1*(v2 - | |
v3) + u2*(-v1 + v3))*(v1*v2*(y1 - y2) + v2*v4*(y2 - y4) + v1*v4*(-y1 | |
+ y4)))) + (u3*v1 - u1*v3)*x3*((u4*(v1 - v2) + u1*(v2 - v4) + u2*(-v1 | |
+ v4))*(v1*v2*(y1 - y2) + v2*v3*(y2 - y3) + v1*v3*(-y1 + y3)) + | |
(u3*(-v1 + v2) + u2*(v1 - v3) + u1*(-v2 + v3))*(v1*v2*(y1 - y2) + | |
v2*v4*(y2 - y4) + v1*v4*(-y1 + y4)))) - (u2*v1*v3*x2*(x1 - x3) + | |
u3*v1*v2*(-x1 + x2)*x3 + u1*v2*v3*x1*(-x2 + x3))*(-(x1*(-(v1*x1) + | |
v3*x3)*(v1*(u4*(-v1 + v2) + u2*(v1 - v4) + u1*(-v2 + v4))*(u1*(-v2 + | |
v3)*y1 + u2*(v1 - v3)*y2 + u3*(-v1 + v2)*y3) - u1*(u4*(v1 - v2) + | |
u1*(v2 - v4) + u2*(-v1 + v4))*(v1*v2*(y1 - y2) + v2*v3*(y2 - y3) + | |
v1*v3*(-y1 + y3)) - v1*(u3*(-v1 + v2) + u2*(v1 - v3) + u1*(-v2 + | |
v3))*(u1*(-v2 + v4)*y1 + u2*(v1 - v4)*y2 + u4*(-v1 + v2)*y4) + | |
u1*(u3*(v1 - v2) + u1*(v2 - v3) + u2*(-v1 + v3))*(v1*v2*(y1 - y2) + | |
v2*v4*(y2 - y4) + v1*v4*(-y1 + y4)))) + (u3*v1 - | |
u1*v3)*x1*x3*((u4*(v1 - v2) + u1*(v2 - v4) + u2*(-v1 + | |
v4))*(v1*v2*(y1 - y2) + v2*v3*(y2 - y3) + v1*v3*(-y1 + y3)) + | |
(u3*(-v1 + v2) + u2*(v1 - v3) + u1*(-v2 + v3))*(v1*v2*(y1 - y2) + | |
v2*v4*(y2 - y4) + v1*v4*(-y1 + y4)))))) + (-(u3*v1*v2*x1*x3) + | |
u3*v1*v4*x1*x3 + u3*v1*v2*x2*x3 - u3*v2*v4*x2*x3 + u4*v1*v2*x1*x4 - | |
u4*v1*v3*x1*x4 - u4*v1*v2*x2*x4 + u4*v2*v3*x2*x4 + u4*v1*v3*x3*x4 - | |
u4*v2*v3*x3*x4 - u3*v1*v4*x3*x4 + u3*v2*v4*x3*x4 + u2*x2*(v1*v3*(x1 - | |
x3) + v3*v4*(x3 - x4) + v1*v4*(-x1 + x4)) + u1*x1*(v2*v3*(-x2 + x3) + | |
v2*v4*(x2 - x4) + v3*v4*(-x3 + x4)))*(-((u2*u3*v1*x1*(x2 - x3) + | |
u1*u2*v3*(x1 - x2)*x3 + u1*u3*v2*x2*(-x1 + x3))*(-(x1*(-(v1*x1) + | |
v3*x3)*(v1*(u4*(-v1 + v2) + u2*(v1 - v4) + u1*(-v2 + v4))*(u1*(-v2 + | |
v3)*y1 + u2*(v1 - v3)*y2 + u3*(-v1 + v2)*y3) - u1*(u4*(v1 - v2) + | |
u1*(v2 - v4) + u2*(-v1 + v4))*(v1*v2*(y1 - y2) + v2*v3*(y2 - y3) + | |
v1*v3*(-y1 + y3)) - v1*(u3*(-v1 + v2) + u2*(v1 - v3) + u1*(-v2 + | |
v3))*(u1*(-v2 + v4)*y1 + u2*(v1 - v4)*y2 + u4*(-v1 + v2)*y4) + | |
u1*(u3*(v1 - v2) + u1*(v2 - v3) + u2*(-v1 + v3))*(v1*v2*(y1 - y2) + | |
v2*v4*(y2 - y4) + v1*v4*(-y1 + y4)))) + (u3*v1 - | |
u1*v3)*x1*x3*((u4*(v1 - v2) + u1*(v2 - v4) + u2*(-v1 + | |
v4))*(v1*v2*(y1 - y2) + v2*v3*(y2 - y3) + v1*v3*(-y1 + y3)) + | |
(u3*(-v1 + v2) + u2*(v1 - v3) + u1*(-v2 + v3))*(v1*v2*(y1 - y2) + | |
v2*v4*(y2 - y4) + v1*v4*(-y1 + y4))))) + (-(u1*v2*x1*x2) - | |
u3*v1*x1*x3 + u1*v3*x1*x3 + u3*v2*x2*x3 + u2*x2*(v1*x1 - | |
v3*x3))*(-(x1*(-(u3*v1*x1) + u1*v3*x3)*(v1*(u4*(-v1 + v2) + u2*(v1 - | |
v4) + u1*(-v2 + v4))*(u1*(-v2 + v3)*y1 + u2*(v1 - v3)*y2 + u3*(-v1 + | |
v2)*y3) - u1*(u4*(v1 - v2) + u1*(v2 - v4) + u2*(-v1 + v4))*(v1*v2*(y1 | |
- y2) + v2*v3*(y2 - y3) + v1*v3*(-y1 + y3)) - v1*(u3*(-v1 + v2) + | |
u2*(v1 - v3) + u1*(-v2 + v3))*(u1*(-v2 + v4)*y1 + u2*(v1 - v4)*y2 + | |
u4*(-v1 + v2)*y4) + u1*(u3*(v1 - v2) + u1*(v2 - v3) + u2*(-v1 + | |
v3))*(v1*v2*(y1 - y2) + v2*v4*(y2 - y4) + v1*v4*(-y1 + y4)))) + | |
u1*(u3*v1 - u1*v3)*x1*x3*((u4*(v1 - v2) + u1*(v2 - v4) + u2*(-v1 + | |
v4))*(v1*v2*(y1 - y2) + v2*v3*(y2 - y3) + v1*v3*(-y1 + y3)) + | |
(u3*(-v1 + v2) + u2*(v1 - v3) + u1*(-v2 + v3))*(v1*v2*(y1 - y2) + | |
v2*v4*(y2 - y4) + v1*v4*(-y1 + y4)))))))/(u3*v1*v2*x1*x3 - | |
u3*v1*v4*x1*x3 - u3*v1*v2*x2*x3 + u3*v2*v4*x2*x3 - u4*v1*v2*x1*x4 + | |
u4*v1*v3*x1*x4 + u4*v1*v2*x2*x4 - u4*v2*v3*x2*x4 - u4*v1*v3*x3*x4 + | |
u4*v2*v3*x3*x4 + u3*v1*v4*x3*x4 - u3*v2*v4*x3*x4 + u1*x1*(v2*v3*(x2 - | |
x3) + v3*v4*(x3 - x4) + v2*v4*(-x2 + x4)) + u2*x2*(v1*v3*(-x1 + x3) + | |
v1*v4*(x1 - x4) + v3*v4*(-x3 + x4))); | |
return new float[]{(float)a,(float)b,(float)c,(float)d,(float)e,(float)f,(float)g,(float)h}; | |
} | |
float[] applyHMatrix(float[] H, float u, float v){ | |
float x = H[0] * u + H[1] * v + H[2]; | |
float y = H[3] * u + H[4] * v + H[5]; | |
float z = H[6] * u + H[7] * v + 1; | |
return new float[]{x/z,y/z}; | |
} | |
boolean pointInQuad(float x,float y,float ax,float ay,float bx,float by,float cx,float cy,float dx,float dy){ | |
float[] uv = cart2bary(x,y,ax,ay,bx,by,cx,cy); | |
if (uv[0] < 0 || uv[1] < 0 || (1-uv[0]-uv[1]) < 0){ | |
uv = cart2bary(x,y,ax,ay,dx,dy,cx,cy); | |
if (uv[0] < 0 || uv[1] < 0 || (1-uv[0]-uv[1]) < 0){ | |
return false; | |
} | |
} | |
return true; | |
} | |
void warpHomographic(PImage src, PImage dst, | |
float ax0, float ay0, float bx0, float by0, float cx0, float cy0, float dx0, float dy0, | |
float ax1, float ay1, float bx1, float by1, float cx1, float cy1, float dx1, float dy1 | |
){ | |
src.loadPixels(); | |
dst.loadPixels(); | |
float[] H = computeHMatrix( | |
ax0,ay0,bx0,by0,cx0,cy0,dx0,dy0, | |
ax1,ay1,bx1,by1,cx1,cy1,dx1,dy1 | |
); | |
int[] roi = quadRoi(ax1,ay1,bx1,by1,cx1,cy1,dx1,dy1); | |
for (int i = roi[1]; i <= roi[3]; i++){ | |
if (i < 0 || i > dst.height) continue; | |
for (int j = roi[0]; j <= roi[2]; j++){ | |
if (j < 0 || j > dst.width) continue; | |
if (!pointInQuad(j,i,ax1,ay1,bx1,by1,cx1,cy1,dx1,dy1)) continue; | |
float[] xy = applyHMatrix(H, j, i); | |
int val = sampler(src,xy[0],xy[1]); | |
dst.pixels[i*dst.width+j] = val; | |
} | |
} | |
dst.updatePixels(); | |
} | |
//Sweep (Biangular) method ----------------------------------------------- | |
float[] lineIntersect(float p0x, float p0y, float p1x, float p1y, float q0x, float q0y, float q1x, float q1y){ | |
float d0x = ((p1x) - (p0x)); | |
float d0y = ((p1y) - (p0y)); | |
float d1x = ((q1x) - (q0x)); | |
float d1y = ((q1y) - (q0y)); | |
float vc = ((((d0x) * (d1y))) - (((d0y) * (d1x)))); | |
if ((vc) == (0)) { | |
return null; | |
} | |
float vcn = ((vc) * (vc)); | |
float t = ((((((((((q0x) - (p0x))) * (d1y))) * (vc))) - (((((((q0y) - (p0y))) * (d1x))) * (vc))))) / (vcn)); | |
return new float[]{p0x + t * d0x, p0y + t * d0y}; | |
} | |
float pointDistanceToLine(float x, float y, float x1, float y1, float x2, float y2) { | |
float A = x - x1; | |
float B = y - y1; | |
float C = x2 - x1; | |
float D = y2 - y1; | |
float dot = A*C+B*D; | |
float len_sq = C*C+D*D; | |
float param = -1; | |
if (len_sq != 0) { | |
param = dot / len_sq; | |
} | |
float xx, yy; | |
xx = x1 + param*C; | |
yy = y1 + param*D; | |
float dx = x - xx; | |
float dy = y - yy; | |
return sqrt(dx*dx+dy*dy); | |
} | |
float vecAngle(float ux, float uy, float vx, float vy){ | |
float dot = ux * vx + uy * vy; | |
float nu = sqrt(ux*ux+uy*uy); | |
float nv = sqrt(vx*vx+vy*vy); | |
float cs = dot/(nu*nv); | |
return acos(cs); | |
} | |
float[] vecRot(float x, float y,float th){ | |
return new float[]{x*cos(th)-y*sin(th),x*sin(th)+y*cos(th)}; | |
} | |
float cart2sweep( | |
float x,float y, | |
float ax,float ay, | |
float dx,float dy, | |
float ang, | |
float D, | |
float[]isect){ | |
if (isect == null){ | |
return pointDistanceToLine(x,y,ax,ay,dx,dy)/D; | |
} | |
float vx = x-isect[0]; | |
float vy = y-isect[1]; | |
float A = vecAngle(dx-isect[0],dy-isect[1],vx,vy); | |
return A/ang; | |
} | |
float[] sweep2cart( | |
float u, float v, | |
float ax, float ay, float bx, float by, | |
float cx, float cy, float dx, float dy, | |
float angV,float angH, | |
float[] isectV, float[] isectH | |
){ | |
float l0x, l0y, l1x, l1y; | |
float m0x, m0y, m1x, m1y; | |
if (isectV != null){ | |
float dax = dx-ax; | |
float day = dy-ay; | |
float au = u*angV; | |
float[] urxy = vecRot(dax,day,au); | |
l0x = isectV[0]; | |
l0y = isectV[1]; | |
l1x = l0x+urxy[0]; | |
l1y = l0y+urxy[1]; | |
}else{ | |
l0x = ax * (1-u) + bx * u; | |
l0y = ay * (1-u) + by * u; | |
l1x = dx * (1-u) + cx * u; | |
l1y = dy * (1-u) + cy * u; | |
} | |
if (isectH != null){ | |
float bax = bx-ax; | |
float bay = by-ay; | |
float av = v*angH; | |
float[] vrxy = vecRot(bax,bay,av); | |
m0x = isectH[0]; | |
m0y = isectH[1]; | |
m1x = m0x+vrxy[0]; | |
m1y = m0y+vrxy[1]; | |
}else{ | |
m0x = ax * (1-v) + dx * v; | |
m0y = ay * (1-v) + dy * v; | |
m1x = bx * (1-v) + cx * v; | |
m1y = by * (1-v) + cy * v; | |
} | |
return lineIntersect(l0x,l0y,l1x,l1y,m0x,m0y,m1x,m1y); | |
} | |
void warpSweep(PImage src, PImage dst, | |
float ax0, float ay0, float bx0, float by0, float cx0, float cy0, float dx0, float dy0, | |
float ax1, float ay1, float bx1, float by1, float cx1, float cy1, float dx1, float dy1 | |
){ | |
src.loadPixels(); | |
dst.loadPixels(); | |
float[] isectV0 = lineIntersect(ax0,ay0,dx0,dy0, bx0,by0,cx0,cy0); | |
float[] isectH0 = lineIntersect(ax0,ay0,bx0,by0, dx0,dy0,cx0,cy0); | |
float[] isectV1 = lineIntersect(ax1,ay1,dx1,dy1, bx1,by1,cx1,cy1); | |
float[] isectH1 = lineIntersect(ax1,ay1,bx1,by1, dx1,dy1,cx1,cy1); | |
float d1_tb=0, d1_lr=0; | |
if (isectV1 == null) d1_lr = pointDistanceToLine(ax1,ay1,bx1,by1,cx1,cy1); | |
if (isectH1 == null) d1_tb = pointDistanceToLine(ax1,ay1,dx1,dy1,cx1,cy1); | |
float angV0=0, angH0=0, angV1=0, angH1=0; | |
if (isectV0 != null) angV0 = vecAngle(dx0-isectV0[0],dy0-isectV0[1], cx0-isectV0[0],cy0-isectV0[1]); | |
if (isectH0 != null) angH0 = vecAngle(ax0-isectH0[0],ay0-isectH0[1], dx0-isectH0[0],dy0-isectH0[1]); | |
if (isectV1 != null) angV1 = vecAngle(dx1-isectV1[0],dy1-isectV1[1], cx1-isectV1[0],cy1-isectV1[1]); | |
if (isectH1 != null) angH1 = vecAngle(ax1-isectH1[0],ay1-isectH1[1], dx1-isectH1[0],dy1-isectH1[1]); | |
int[] roi = quadRoi(ax1,ay1,bx1,by1,cx1,cy1,dx1,dy1); | |
for (int i = roi[1]; i <= roi[3]; i++){ | |
if (i < 0 || i > dst.height) continue; | |
for (int j = roi[0]; j <= roi[2]; j++){ | |
if (j < 0 || j > dst.width) continue; | |
if (!pointInQuad(j,i,ax1,ay1,bx1,by1,cx1,cy1,dx1,dy1)) continue; | |
float u = cart2sweep(j,i,ax1,ay1,dx1,dy1,angV1,d1_lr,isectV1); | |
float v = cart2sweep(j,i,bx1,by1,ax1,ay1,angH1,d1_tb,isectH1); | |
float[] xy = sweep2cart(u,v,ax0,ay0,bx0,by0,cx0,cy0,dx0,dy0,angV0,angH0,isectV0,isectH0); | |
int val = sampler(src,xy[0],xy[1]); | |
dst.pixels[i*dst.width+j] = val; | |
} | |
} | |
dst.updatePixels(); | |
} | |
//Runner ----------------------------------------------- | |
PImage src; | |
PImage dst; | |
void setup(){ | |
size(1024,512); | |
src = loadImage("boat.png"); // https://homepages.cae.wisc.edu/~ece533/images/boat.png | |
dst = createImage(src.width,src.height,RGB); | |
} | |
void draw(){ | |
dst.loadPixels();for(int i=0;i<dst.pixels.length;i++)dst.pixels[i]=0;dst.updatePixels(); | |
float ax0 = 50; | |
float ay0 = 50; | |
float bx0 = 300; | |
float by0 = 50; | |
float cx0 = 300; | |
float cy0 = 300; | |
float dx0 = 80; | |
float dy0 = 300; | |
float ax1 = 20; | |
float ay1 = 100; | |
float bx1 = 400; | |
float by1 = 100; | |
float cx1 = mouseX-512; | |
float cy1 = mouseY; | |
float dx1 = 100; | |
float dy1 = 400; | |
switch (method){ | |
case HOMOGRAPHIC: | |
warpHomographic(src,dst, | |
ax0,ay0,bx0,by0,cx0,cy0,dx0,dy0, | |
ax1,ay1,bx1,by1,cx1,cy1,dx1,dy1 | |
);break; | |
case BILINEAR: | |
warpQuadcentric(src,dst, | |
ax0,ay0,bx0,by0,cx0,cy0,dx0,dy0, | |
ax1,ay1,bx1,by1,cx1,cy1,dx1,dy1 | |
);break; | |
case BIANGULAR: | |
warpSweep(src,dst, | |
ax0,ay0,bx0,by0,cx0,cy0,dx0,dy0, | |
ax1,ay1,bx1,by1,cx1,cy1,dx1,dy1 | |
);break; | |
case BARYCENTRIC: | |
warpBarycentric(src,dst, | |
ax0,ay0,bx0,by0,cx0,cy0,dx0,dy0, | |
ax1,ay1,bx1,by1,cx1,cy1,dx1,dy1 | |
);break; | |
} | |
noFill(); | |
stroke(255,255,0); | |
strokeWeight(2); | |
image(src,0,0); | |
quad(ax0,ay0,bx0,by0,cx0,cy0,dx0,dy0); | |
circle(ax0,ay0,6); | |
circle(bx0,by0,6); | |
circle(cx0,cy0,6); | |
circle(dx0,dy0,6); | |
text("Move mouse to distort, Press a key to change method (currently "+method+")", 0,10); | |
translate(512,0); | |
image(dst,0,0); | |
quad(ax1,ay1,bx1,by1,cx1,cy1,dx1,dy1); | |
circle(ax1,ay1,6); | |
circle(bx1,by1,6); | |
circle(cx1,cy1,6); | |
circle(dx1,dy1,6); | |
} | |
void keyPressed(){ | |
method = (method + 1) % 4; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment