m=new Array(20);

function kd3p()
{
x=new Array(4),y=new Array(4),z=new Array(4);
x[0]=Number(document.f.x1.value.replace(/,/,"."));
x[1]=Number(document.f.x2.value.replace(/,/,"."));
x[2]=Number(document.f.x3.value.replace(/,/,"."));
x[3]=Number(document.f.x4.value.replace(/,/,"."));
y[0]=Number(document.f.y1.value.replace(/,/,"."));
y[1]=Number(document.f.y2.value.replace(/,/,"."));
y[2]=Number(document.f.y3.value.replace(/,/,"."));
y[3]=Number(document.f.y4.value.replace(/,/,"."));
z[0]=Number(document.f.z1.value.replace(/,/,"."));
z[1]=Number(document.f.z2.value.replace(/,/,"."));
z[2]=Number(document.f.z3.value.replace(/,/,"."));
z[3]=Number(document.f.z4.value.replace(/,/,"."));
for(i=0;i<4;i++)if((isNaN(x[i]))||(isNaN(y[i]))||(isNaN(z[i])))return;
for(i=0;i<4;i++)
{
	j=i*5; m[j]=1;m[j+1]=-2*x[i];m[j+2]=-2*y[i];m[j+3]=-2*z[i];
	m[j+4]=-x[i]*x[i]-y[i]*y[i]-z[i]*z[i];
}
GLSL(4,5);
for(i=0;i<20;i+=6)if(m[i]!=1){document.f.ta.value=" \n\       Es gibt keine\n       solche Kugel\n       oder die Kugel ist\n       nicht eindeutig!" ;return;}
a=Runden(m[9],12);b=Runden(m[14],12);c=Runden(m[19],12);
r=Runden(Math.sqrt(a*a+b*b+c*c-m[4]),12);
pi=3.14159265358979323846;
v=Runden(4*pi*r*r*r/3,12);
f=Runden(4*pi*r*r,12);
aa=ZahlStr(a);bb=ZahlStr(b);cc=ZahlStr(c);rr=ZahlStr(r);vv=ZahlStr(v);ff=ZahlStr(f);
document.f.ta.value="xm = "+aa+"\nym = "+bb+"\nzm = "+cc+"\nr  = "+rr+"\nO  = "+ff+"\nV  = "+vv;
}
function cl(){document.f.ta.value="";}

function Runden(t,i)
{
	var d=Math.pow(10,i);
	return Math.round(t*d)/d;
}

function ZahlStr(x)
{
var t=String(x).replace(/\./,",").replace(/-,/,"-0,");
if(t.indexOf(",")==0)t="0"+t;
return t;
}

function GLSL(nz, ns)
{
    var i, j, k ;
	var q;
	for (j = 0;j<ns-1;j++)
	{
        // Diagonalenfeld normalisieren
        q = m[j * ns + j];
        if (q == 0){
            //Gewährleisten, daß keine 0 in der Diagonale steht
            for (i = j+1 ;i< nz;i++)
			{
                // Suche Reihe mit Feld <> 0 und addiere dazu
                if (m[i * ns + j] != 0)
				{
                    for (k = 0 ; k<ns; k++)
					{
						m[j * ns + k] += m[i * ns + k];
                    }
                    q = m[j * ns + j];
                    break;
                }
            }
        }
        if (q != 0)
		{
            // Diagonalen auf 1 bringen
            for (k = 0;k< ns;k++)
			{
                m[j * ns + k] = m[j * ns + k] / q;
            }
        }
        // Spalten außerhalb der Diagonalen auf 0 bringen
        for (i = 0 ; i< nz ; i++)
		{
            if (i != j )
			{
                q = m[i * ns + j];
                for (k = 0; k< ns;k++)
				{
                    m[i * ns + k] -=  q * m[j * ns + k];
                }
			}
        }
    }
}

function rnd()
{
cl();
document.f.x1.value=ZahlStr(Runden(Math.random()*20-10,1));
document.f.x2.value=ZahlStr(Runden(Math.random()*20-10,1));
document.f.x3.value=ZahlStr(Runden(Math.random()*20-10,1));
document.f.x4.value=ZahlStr(Runden(Math.random()*20-10,1));
document.f.y1.value=ZahlStr(Runden(Math.random()*20-10,1));
document.f.y2.value=ZahlStr(Runden(Math.random()*20-10,1));
document.f.y3.value=ZahlStr(Runden(Math.random()*20-10,1));
document.f.y4.value=ZahlStr(Runden(Math.random()*20-10,1));
document.f.z1.value=ZahlStr(Runden(Math.random()*20-10,1));
document.f.z2.value=ZahlStr(Runden(Math.random()*20-10,1));
document.f.z3.value=ZahlStr(Runden(Math.random()*20-10,1));
document.f.z4.value=ZahlStr(Runden(Math.random()*20-10,1));
}

