Federgraph Formula
The formula of Sample 1
The Federgraph application does not only plot Betrag, Richtung, and Energie, but also something like abs(u), even if this is just for fun. Sample 1 in the Federgraph application uses the formula shown in the following image.
The formula above is given in Maple syntax.
Using an old version of Maple
The monument of Federgraph ancestors:
The image shows that the sample can be recreated in the old 16 bit student version of Maple, which I used back in 1994.
Using a current version of Maxima
Maxima is a free program you can use to prove it; just copy and paste the text out of the following preformatted paragraph into Maxima:
/* Establish the Federgraph formula */
a1: (x-x1)^2 + (y-y1)^2$
a2: (x-x2)^2 + (y-y2)^2$
a3: (x-x3)^2 + (y-y3)^2$
t1: sqrt(a1)$
t2: sqrt(a2)$
t3: sqrt(a3)$
b1: t2 * t3 * (t1-l1) * k1$
b2: t1 * t3 * (t2-l2) * k2$
b3: t1 * t2 * (t3-l3) * k3$
u1: b1 * (x-x1)$
u2: b2 * (x-x2)$
u3: b3 * (x-x3)$
u: u1 + u2 + u3$
/* scale and make absolute */
f: abs(u / 1000000)$
/* provide concrete values */
x1: 65$ x2:-65$ x3: 0$
y1: 65$ y2: 65$ y3:-65$
l1: 90$ l2: 90$ l3: 90$
k1: 1$ k2: 1$ k3: 1$
/* and plot */
plot3d(f, [x,-150,150], [y,-150,150], [z,0,50], [plot_format,gnuplot]);
The image above is a screenshot of the gnuplot output.
Using Mathematica
This will work on the Raspberry Pi where Mathematica is a free download.
(* Clear *)
ClearAll[x1, x2, x3]
ClearAll[y1, y2, y3]
ClearAll[l1, l2, l3]
ClearAll[k1, k2, k3]
(* Establish the Federgraph formula *)
a1=(x-x1)^2+(y-y1)^2;
a2=(x-x2)^2+(y-y2)^2;
a3=(x-x3)^2+(y-y3)^2;
t1=Sqrt[a1];
t2=Sqrt[a2];
t3=Sqrt[a3];
b1=t2*t3*(t1-l1)*k1;
b2=t1*t3*(t2-l2)*k2;
b3=t1*t2*(t3-l3)*k3;
u1=b1*(x-x1);
u2=b2*(x-x2);
u3=b3*(x-x3);
u=u1+u2+u3;
(*scale and make absolute*)
f= Abs[u/1000000]
(*provide concrete values*)
x1=65;
x2=-65;
x3=0;
y1=65;
y2=65;
y3=-65;
l1=90;
l2=90;
l3=90;
k1=1;
k2=1;
k3=1;
(*and plot*)
Plot3D[f,{x,-150,150},{y,-150,150}, PlotRange -> {0, 50}]
Using Sage
# provide concrete values
x1=65; x2=-65; x3=0
y1=65; y2= 65; y3=-65;
l1=90; l2= 90; l3= 90;
k1= 1; k2= 1; k3= 1;
# establish the Federgraph formula
x, y = var('x,y')
a1=(x-x1)^2+(y-y1)^2;
a2=(x-x2)^2+(y-y2)^2;
a3=(x-x3)^2+(y-y3)^2;
t1=sqrt(a1);
t2=sqrt(a2);
t3=sqrt(a3);
b1=t2*t3*(t1-l1)*k1;
b2=t1*t3*(t2-l2)*k2;
b3=t1*t2*(t3-l3)*k3;
u1=b1*(x-x1);
u2=b2*(x-x2);
u3=b3*(x-x3);
u=u1+u2+u3;
# scale and make absolute
f= abs(u/1000000)
def g(x, y):
temp = f(x, y)
if temp > 50:
temp = 50
if temp < 0:
temp = 0
return temp
# and plot
plot3d(g, (x,-150,150), (y,-150,150) )
Using HelixToolkit
u = (u - 0.5) * 300;
v = (v - 0.5) * 300;
double x1 = 65;
double x2 = -65;
double x3 = 0;
double y1 = -65;
double y2 = -65;
double y3 = 65;
double l1 = 90;
double l2 = 90;
double l3 = 90;
double k1 = 1;
double k2 = 1;
double k3 = 1;
double a1, a2, a3;
double b1, b2, b3;
double t1, t2, t3;
double u1, u2, u3;
x = u;
y = v;
a1 = (x - x1) * (x - x1) + (y - y1) * (y - y1);
a2 = (x - x2) * (x - x2) + (y - y2) * (y - y2);
a3 = (x - x3) * (x - x3) + (y - y3) * (y - y3);
t1 = Math.Sqrt(a1);
t2 = Math.Sqrt(a2);
t3 = Math.Sqrt(a3);
b1 = t2 * t3 * (t1 - l1) * k1;
b2 = t1 * t3 * (t2 - l2) * k2;
b3 = t1 * t2 * (t3 - l3) * k3;
u1 = b1 * (x - x1);
u2 = b2 * (x - x2);
u3 = b3 * (x - x3);
z = u1 + u2 + u3;
z = Math.Abs(z / 1000000);
if (z > 50)
z = 50;
if (z < 0)
z = 0;
z = -z;
21st century X-Eyes
If you change the texture parameters, Federgraph kind of rolls its eyes. It may be regarded as a modern age (GPU intensive) alternative to X-Eyes, which you must see live!