function allesberechnen()
{
	berechnen1();berechnen2();berechnen3();berechnen4();berechnen5();
	berechnen6();berechnen7();berechnen8();berechnen9();berechnen10();
	if(zuletzt!=0)eval("berechnen"+zuletzt+"()");
}
var zuletzt=0;
var erkl=1==1,E="";
function berechnen1() // zwei Punkte
{
	var ax=document.f.p1.value.replace(/ /g,""),ay=document.f.p2.value.replace(/ /g,""),bx=document.f.p3.value.replace(/ /g,""),by=document.f.p4.value.replace(/ /g,"");
	Weg(1);
	E=document.f.g1.value="";
	if((ax=="")||(bx=="")||(ay=="")||(by==""))return;
	ax=parseZahl(ax);if(ax==null)return;
	ay=parseZahl(ay);if(ay==null)return;
	bx=parseZahl(bx);if(bx==null)return;
	by=parseZahl(by);if(by==null)return;
	var g=gg2p(ax,ay,bx,by);
	document.f.g1.value=g;
	zuletzt=1;ee=true;
}
function berechnen2() // Punkt & Steigung
{
	var x=document.f.p5.value.replace(/ /g,""),y=document.f.p6.value.replace(/ /g,""),m=document.f.m1.value.replace(/ /g,"");
	E=document.f.g2.value="";
	Weg(2);
	if((x=="")||(y=="")||(m==""))return;
	x=parseZahl(x);if(x==null)return;
	y=parseZahl(y);if(y==null)return;
	m=parseZahl(m);if(m==null)return;
	var g=ggps(x,y,m);
	document.f.g2.value=g;
	zuletzt=2;
}
function berechnen3() // Parallele durch Punkt
{
	var x=document.f.p7.value.replace(/ /g,""),y=document.f.p8.value.replace(/ /g,""),g=document.f.g3_.value.replace(/ /g,""),p;
	E=document.f.g3.value="";
	Weg(3);
	if((x=="")||(y=="")||(g==""))return;
	x=parseZahl(x);if(x==null)return;
	y=parseZahl(y);if(y==null)return;
	p=parseGerade(g);if(p==null)return;
	if(erkl)
	{
		E+="<p><b>Gesucht ist eine Parallele zur Geraden "+((p.length==2)?gstr(p[0],p[1]):"x = "+bstr(kettenbruchapprox(p)))+".</b></p>\n";
		if(p.length==2)E+="<p>Sie besitzt die gleiche Steigung wie die gegebene Gerade, also m="+bstr(p[0])+".</p>";
		else E+="<p>Wie diese muß sie parallel zur y-Achse sein.</p><p>Da sie durch x=x<sub>1</sub>="+bstr(x)+" gehen soll, ist ihre Gleichung  x&nbsp;=&nbsp;"+bstr(x)+"</p>\n";
	}
	if(p.length==2){g=ggps(x,y,p[0]);document.f.g3.value=g;return;}
	else{document.f.g3.value="x = "+bstr(x);return;}
	zuletzt=3;
}
function berechnen4() // Senkrechte durch Punkt
{
	var x=document.f.p9.value.replace(/ /g,""),y=document.f.p10.value.replace(/ /g,""),g=document.f.g4_.value.replace(/ /g,""),p;
	E=document.f.g4.value="";
	Weg(4);
	if((x=="")||(y=="")||(g==""))return;
	x=parseZahl(x);if(x==null)return;
	y=parseZahl(y);if(y==null)return;
	p=parseGerade(g);if(p==null)return;
	zuletzt=4;
	if(erkl)
	{
		E+="<p><b>Gesucht ist eine Senkrechte zur Geraden &nbsp;"+((p.length==2)?gstr(p[0],p[1]):"x = "+bstr(kettenbruchapprox(p)))+"&nbsp; durch den Punkt (<small>"+bstr(x)+"|"+bstr(y)+"</small>).</b></p>\n";
		if(p.length==2)
		{
			if(p[0][0]!=0)E+="<p>Die gegebene Gerade besitzt die Steigung m="+bstr(p[0])+". Die Steigung jeder Senkrechten ist der negative Kehrwert davon, also <nobr>m = "+bstr(new Array(-p[0][1],p[0][0]))+"</p>";	
			else E+="<p>Die gegebene Gerade ist parallel zur x-Achse; also muß die Senkrechte parallel zur y-Achse sein.</p><p>Da sie durch x="+bstr(x)+" gehen soll, ist ihre Gleichung  x&nbsp;=&nbsp;"+bstr(x)+"</p>\n";
		}
		else E+="<p>Die gegebene Gerade ist parallel zur y-Achse; also muß die Senkrechte parallel zur x-Achse sein.</p><p>Da sie durch y="+bstr(y)+" gehen soll, ist ihre Gleichung  y&nbsp;=&nbsp;"+bstr(y)+"</p>\n";
	}
	if(p.length==2)
	{
		if(p[0][0]==0){document.f.g4.value="x = "+bstr(x);return;}
		m=new Array(-p[0][1],p[0][0]);if(m[1]<0){m[0]=-m[0];m[1]=-m[1];}
		g=ggps(x,y,m);document.f.g4.value=g;return;
	}
	document.f.g4.value="y = "+bstr(y);
}
function berechnen5() // Lot durch Punkt
{
	var x=document.f.p11.value.replace(/ /g,""),y=document.f.p12.value.replace(/ /g,""),g=document.f.g5_.value.replace(/ /g,""),p;
	E=document.f.g5.value="";
	Weg(4);
	if((x=="")||(x=="")||(g==""))return;
	x=parseZahl(x);if(x==null)return;
	y=parseZahl(y);if(y==null)return;
	p=parseGerade(g);if(p==null)return;
	zuletzt=5;
	if(erkl)
	{
		E+="<p><b>Gesucht ist eine Senkrechte zur Geraden &nbsp;"+((p.length==2)?gstr(p[0],p[1]):"x = "+bstr(kettenbruchapprox(p)))+"&nbsp; durch den Punkt (<small>"+bstr(x)+"|"+bstr(y)+"</small>).</b></p>\n";
		if(p.length==2)
		{
			if(p[0][0]!=0)E+="<p>Die gegebene Gerade besitzt die Steigung m="+bstr(p[0])+". Die Steigung jeder Senkrechten ist der negative Kehrwert davon, also <nobr>m = "+bstr(new Array(-p[0][1],p[0][0]))+"</p>";	
			else E+="<p>Die gegebene Gerade ist parallel zur x-Achse; also muß die Senkrechte parallel zur y-Achse sein.</p><p>Da sie durch x="+bstr(x)+" gehen soll, ist ihre Gleichung  x&nbsp;=&nbsp;"+bstr(x)+"</p>\n";
		}
		else E+="<p>Die gegebene Gerade ist parallel zur y-Achse; also muß die Senkrechte parallel zur x-Achse sein.</p><p>Da sie durch y="+bstr(y)+" gehen soll, ist ihre Gleichung  y&nbsp;=&nbsp;"+bstr(y)+"</p>\n";
	}
	if(p.length==2)
	{
		if(p[0][0]==0){document.f.g5.value="x = "+bstr(x);return;}
		m=new Array(-p[0][1],p[0][0]);if(m[1]<0){m[0]=-m[0];m[1]=-m[1];}
		g=ggps(x,y,m);document.f.g5.value=g;return;
	}
	document.f.g5.value="y = "+bstr(y);
}
function berechnen6() // Mittelsenkrechte
{
	var ax=document.f.p13.value.replace(/ /g,""),ay=document.f.p14.value.replace(/ /g,""),bx=document.f.p15.value.replace(/ /g,""),by=document.f.p16.value.replace(/ /g,"");
	E=document.f.g6.value="";
	Weg(6);
	if((ax=="")||(bx=="")||(ay=="")||(by==""))return;
	ax=parseZahl(ax);if(ax==null)return;
	ay=parseZahl(ay);if(ay==null)return;
	bx=parseZahl(bx);if(bx==null)return;
	by=parseZahl(by);if(by==null)return;
	var x=new Array(ax[0]*bx[1]+ax[1]*bx[0],2*ax[1]*bx[1]),
	    y=new Array(ay[0]*by[1]+ay[1]*by[0],2*ay[1]*by[1]);
	kuerze(x);kuerze(y);
	var m=new Array(0,1);
	m[1]=ax[1]*bx[1]*(ay[1]*by[0]-ay[0]*by[1]);
	m[0]=-(ay[1]*by[1]*(ax[1]*bx[0]-ax[0]*bx[1]));
	zuletzt=6;
	if(erkl)
	{
		E+="<p><b>Gesucht ist eine Mittelsenkrechte der Strecke A(<small>"+bstr(ax)+"|"+bstr(ay)+"</small>) B(<small>"+bstr(bx)+"|"+bstr(by)+"</small>).</b></p>\n";
		E+="<p>Diese geht durch den Mittelpunkt von A und B. Berechne dessen Koordinaten als Mittelwerte der jeweiligen Koordinaten von A und B:</p>\n";
		E+="<table><tr><td style='vertical-align:center'>x<sub>M</sub> = </td><td align=center>"+bstr(ax)+" + "+bstr(bx,1)+"<hr noshade size=1 color='#000000'>2</td>\n";
		E+="<td style='vertical-align:center'> = "+bstr(x)+"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td>\n";
		E+="<td style='vertical-align:center'>y<sub>M</sub> = </td><td align=center>"+bstr(ay)+" + "+bstr(by,1)+"<hr noshade size=1 color='#000000'>2</td>\n";
		E+="<td style='vertical-align:center'> = "+bstr(y)+"</td></tr></table>\n";
		if(m[0]*m[1]!=0)
		{
			E+="<p>Die Steigung der Mittelsenkrechten ist der negative Kehrwert der Steigung zwischen A und B. Berechne also zunächst diese Steigung:</p>\n";
			E+="<table><tr><td style='vertical-align:center'><sup>&nbsp;</sup>m<sub>AB</sub> = </td><td align=center>"+bstr(by)+" - "+bstr(ay,1)+"<hr noshade size=1 color='#000000'>"+bstr(bx)+" - "+bstr(ax,1)+"</td>\n"
			E+="<td style='vertical-align:center'> = "+bstr(new Array(-m[1],m[0]))+"</td></tr></table>\n";
			E+="<p>Die Steigung der Mittelsenkrechten ist der negative Kehrwert davon, also m = "+bstr(m)+"</p>\n";
		}
		else if(m[0]==0)E+="<p>Die Punkte A und B besitzen die gleichen x-Koordinaten, also muß die Mittelsenkrechte die Steigung m=0 besitzen.</p><p>Ihre Gleichung ist damit bereits klar: y = "+bstr(y)+". Dennoch vollständigkeitshalber:</p>\n";
		else if(m[1]==0)E+="<p>Die Punkte A und B besitzen die gleichen y-Koordinaten, also muß die Mittelsenkrechte parallel zur y-Achse verlaufen.<p>Ihre Gleichung ist damit (wegen x<sub>M</sub>="+bstr(x)+"):  x = "+bstr(x)+"</p>\n";
	}
	if(m[1]!=0)
	{
		kuerze(m);
		var g=ggps(x,y,m);
		document.f.g6.value=g;
		return;
	}
	document.f.g6.value="x = "+bstr(x);
}
function berechnen7() // Seitenhalbierende
{
	var ax=document.f.p17.value.replace(/ /g,""),ay=document.f.p18.value.replace(/ /g,""),bx=document.f.p19.value.replace(/ /g,""),by=document.f.p20.value.replace(/ /g,"");
	var cx=document.f.p21.value.replace(/ /g,""),cy=document.f.p22.value.replace(/ /g,"");
	E=document.f.g7.value="";
	Weg(7);
	if((ax=="")||(bx=="")||(ay=="")||(by=="")||(cx=="")||(cy==""))return;
	ax=parseZahl(ax);if(ax==null)return;
	ay=parseZahl(ay);if(ay==null)return;
	bx=parseZahl(bx);if(bx==null)return;
	by=parseZahl(by);if(by==null)return;
	cx=parseZahl(cx);if(cx==null)return;
	cy=parseZahl(cy);if(cy==null)return;
	var x=new Array(cx[0]*bx[1]+cx[1]*bx[0],2*cx[1]*bx[1]),
	    y=new Array(cy[0]*by[1]+cy[1]*by[0],2*cy[1]*by[1]);
	kuerze(x);kuerze(y);
	if(erkl)
	{
		E+="<p><b>Gesucht ist die Seitenhalbierende durch A(<small>"+bstr(ax)+"|"+bstr(ay)+"</small>) und die Mitte von B(<small>"+bstr(bx)+"|"+bstr(by)+"</small>) und C(<small>"+bstr(cx)+"|"+bstr(cy)+"</small>)</b>.</p>\n";
		E+="<p>Berechne zunächst die Koordinaten des Mittelpunktes M<sub>BC</sub> als Mittelwerte der jeweiligen Koordinaten von B und C:</p>\n";
		E+="<table><tr><td style='vertical-align:center'>x<sub>M</sub> = </td><td align=center>"+bstr(bx)+" + "+bstr(cx,1)+"<hr noshade size=1 color='#000000'>2</td>\n";
		E+="<td style='vertical-align:center'> = "+bstr(x)+"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td>\n";
		E+="<td style='vertical-align:center'>y<sub>M</sub> = </td><td align=center>"+bstr(by)+" + "+bstr(cy,1)+"<hr noshade size=1 color='#000000'>2</td>\n";
		E+="<td style='vertical-align:center'> = "+bstr(y)+"</td></tr></table>\n";
	}
	document.f.g7.value=gg2p(x,y,ax,ay);
	zuletzt=7;
}
function berechnen8() // Winkelhalbierende zweier Geraden
{
	var g1=document.f.g8_.value.replace(/ /g,""),g2=document.f.g8__.value.replace(/ /g,""),p1,p2,p3,m1,m2,w1,w2,m=new Array(2),g,gg1,gg2,s;
	E=document.f.g8a.value=document.f.g8b.value="";
	Weg(8);
	if((g1=="")||(g2==""))return;
	p1=parseGerade(g1);if(p1==null)return;
	p2=parseGerade(g2);if(p2==null)return;
	s=Schnitt(p1,p2);
	if(erkl)
	{
		E+="<p><b>Gesucht sind die Gleichungen der Winkelhalbierenden der Geraden &nbsp;"+gstr(p1)+" &nbsp;und&nbsp; "+gstr(p2)+"</b></p>\n";
		E+="<p>Berechnet werden können ein Punkt der gesuchten Geraden als Schnittpunkt der gegebenen Geraden und ihre Steigung der aus den Steigungen der gegebenen Geraden.</p>\n";
		if(s==null)
		{
			var G=gstr(p1);
			E+="<p>Da die gegebenen Geraden parallel sind, kann ein Schnittpunkt nicht berechnet werden!</p>\n";
			if(G==gstr(p2))E+="<p>Die gegebenen Geraden sind identisch, daher kann theoretisch "+G+" als Winkelhalbierende gelten (unsauber!).</p>\n";
		}
		else
		{
			E+="<p>Berechne den Schnittpunkt der Geraden: S(<small>"+bstr(s[0])+"|"+bstr(s[1])+"</small>).</p>\n";
		}
	}
	if(s==null){if(gstr(p1)!=gstr(p2)){document.f.g8a.value="Kein Schnittpunkt";return;}document.f.g8a.value=gstr(p1);return;}
	w1=(p1.length==2)?Math.atan(p1[0][0]/p1[0][1]):Math.PI/2;
	w2=(p2.length==2)?Math.atan(p2[0][0]/p2[0][1]):Math.PI/2;
	zuletzt=8;
	if(erkl)
	{
		var W1,W2,W3,W4;
		E+="<p><b>Lies die Steigungen der Geraden ab und berechne daraus den Steigungswinkel mit &alpha;=tan<sup>-1</sup>(m)</b></p>\n";
		E+="<table cellspacing=0 cellpadding=5 border=1><tr><td align=center>Gerade</td><td align=center>Steigung</td><td align=center>Steigungswinkel</td></tr>\n";
		E+="<tr><td align=center>"+gstr(p1)+"</td><td align=center>"+((p1.length==2)?bstr(p1[0]):"&infin;")+"</td><td align=center>"+(W1=String(w1*180/Math.PI).replace(/\./,",")+"°")+"</td></tr>\n";
		E+="<tr><td align=center>"+gstr(p2)+"</td><td align=center>"+((p2.length==2)?bstr(p2[0]):"&infin;")+"</td><td align=center>"+(W2=String(w2*180/Math.PI).replace(/\./,",")+"°")+"</td></tr></table>\n";
		E+="<p>Der Steigungswinkel einer Winkelhalbierenden ist der Mittelwert dieser Steigungswinkel, der der anderen ist 90° größer.</p>\n";
		if(w2<0)W2="("+W2+")";W4=String((w1+w2)/2*180/Math.PI+90).replace(/\./,",")+"°";
		E+="<table><tr><td style='vertical-align:center'>Berechne den Mittelwert&nbsp;&nbsp;&nbsp;&alpha; = </td><td align=center>"+W1+" + "+W2+"<hr noshade size=1 color='#000000'>2</td>\n";
		E+="<td style='vertical-align:center'> = "+(W3=String((w1+w2)/2*180/Math.PI).replace(/\./,",")+"°")+"</td></tr></table>\n";
		E+="<table><tr><td>und berechne daraus die Steigung"+((W3!="0°")?"en":"")+"&nbsp;&nbsp;</td><td>m<sub>wh1</sub> = tan("+W3+") = "+String(Math.round(1e12*Math.tan((w1+w2)/2))/1e12).replace(/\./,",");
		if(W3!="0°")E+="<br>m<sub>wh2</sub> = tan("+W3+" + 90°) = "+String(Math.round(1e12*Math.tan((w1+w2)/2+Math.PI/2))/1e12).replace(/\./,",");
		E+="</td></tr></table>\n";
	}
	if((w1+w2!=Math.PI)&&(w1+w2!=0))
	{
		//m[0]=Math.round(Math.tan((w1+w2)/2)*1e12)/1e12; m[1]=1;
		m=kettenbruchapprox(Math.tan((w1+w2)/2),1000);
		g=ggps(s[0],s[1],m);
		document.f.g8a.value=g;
		g=ggps(s[0],s[1],kettenbruchapprox(-m[1]/m[0],1000));
		document.f.g8b.value=g;
		return;
	}
	if(erkl)
	{
		E+="<p>Die Winkelhalbierenden sind damit Parallelen zu den Koordinatenachsen durch den bereits berechneten Schnittpunkt:</p>\n";
		E+="<p>y = "+bstr(s[1])+"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;und&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x = "+bstr(s[0])+"</p>\n";
	}
	document.f.g8a.value="y = "+bstr(s[1]);
	document.f.g8b.value="x = "+bstr(s[0]);
}
function berechnen9() // Winkelhalbierende im Dreieck
{
	var ax=document.f.p23.value.replace(/ /g,""),ay=document.f.p24.value.replace(/ /g,""),bx=document.f.p25.value.replace(/ /g,""),by=document.f.p26.value.replace(/ /g,""),whs;
	var cx=document.f.p27.value.replace(/ /g,""),cy=document.f.p28.value.replace(/ /g,""),x1,x2,x3,y1,y2,y3,WH,m=new Array(0,1),w1,w2,g,px,py;
	E=document.f.g9.value="";
	Weg(9);
	if((ax=="")||(bx=="")||(ay=="")||(by=="")||(cx=="")||(cy==""))return;
	ax=parseZahl(ax);if(ax==null)return;
	ay=parseZahl(ay);if(ay==null)return;
	bx=parseZahl(bx);if(bx==null)return;
	by=parseZahl(by);if(by==null)return;
	cx=parseZahl(cx);if(cx==null)return;
	cy=parseZahl(cy);if(cy==null)return;
	whs=document.f.whs.selectedIndex;
	zuletzt=9;
	switch(whs)
	{
	case 0:x1=ax[0]/ax[1];x2=bx[0]/bx[1];x3=cx[0]/cx[1];y1=ay[0]/ay[1];y2=by[0]/by[1];y3=cy[0]/cy[1];px=ax;py=ay;break;
	case 1:x3=ax[0]/ax[1];x1=bx[0]/bx[1];x2=cx[0]/cx[1];y3=ay[0]/ay[1];y1=by[0]/by[1];y2=cy[0]/cy[1];px=bx;py=by;break;
	case 2:x2=ax[0]/ax[1];x3=bx[0]/bx[1];x1=cx[0]/cx[1];y2=ay[0]/ay[1];y3=by[0]/by[1];y1=cy[0]/cy[1];px=cx;py=cy;break;
	default:
	}
	w1=Math.atan((y2-y1)/(x2-x1));w2=Math.atan((y3-y1)/(x3-x1));
	if(erkl)
	{
		var E1,E2,X1=kettenbruchapprox(x1),X2=kettenbruchapprox(x2),X3=kettenbruchapprox(x3),Y1=kettenbruchapprox(y1),
			Y2=kettenbruchapprox(y2),Y3=kettenbruchapprox(y3),W;
		E+="<p><b>Gesucht sind die Gleichungen der Winkelhalbierenden w<sub>"+"abc".charAt(whs)+"</sub>.</b></p>\n";
		E+="<p>Berechne die Steigungen der Geraden durch "+(E1="ABC".charAt(whs)+" und "+"BCA".charAt(whs))+" sowie durch "+(E2="ABC".charAt(whs)+" und "+"CAB".charAt(whs))+" und die zugehörigen Steigungswinkel.</p>\n";
		E+="<table cellpadding=5 cellspacing=0 border=1><tr><td>durch "+E1+"</td><td>durch "+E2+"</td></tr>\n";
		E+="<tr><td><table><tr><td style='vertical-align:center'>m<sub>1</sub> = </td><td align=center>"+bstr(Y2)+" - "+bstr(Y1,1)+"<hr noshade size=1 color='#000000'>"+bstr(X2)+" - "+bstr(X1,1)+"</td>\n"
		E+="<td style='vertical-align:center'> = "+bstr(kettenbruchapprox((y2-y1)/(x2-x1)))+"</td></tr></table></td>\n";
		E+="<td style='vertical-align:center'><table><tr><td>m<sub>2</sub> = </td><td align=center>"+bstr(Y3)+" - "+bstr(Y1,1)+"<hr noshade size=1 color='#000000'>"+bstr(X3)+" - "+bstr(X1,1)+"</td>\n"
		E+="<td style='vertical-align:center'> = "+bstr(kettenbruchapprox((y3-y1)/(x3-x1)))+"</td></tr></table></td></tr>\n";
		E+="<tr><td colspan=2>Steigungswinkel &alpha;=tan<sup>-1</sup>(m)</td></tr>\n";
		E+="<tr><td>&alpha;<sub>1</sub> = "+String(w1*180/Math.PI).replace(/\./,",")+"°</td><td>&alpha;<sub>2</sub> = "+String(w2*180/Math.PI).replace(/\./,",")+"°</td></tr></table>\n";
		E+="<p>Berechne den Mittelwert (&alpha;<sub>1</sub&alpha;<sub>2</sub>)/2 = "+(W=String((w1+w2)/2*180/Math.PI).replace(/\./,",")+"°")+".</p>";
		if((x2-x1)*(x3-x1)<0)E+="<p>Weil die x-Koordinate von "+"ABC".charAt(whs)+" zwischen den x-Koordinaten der beiden anderen Punkte liegt, addiere 90°.</p>\n";
		E=E.replace(/Infinity/,'&infin; (Division durch 0)');
	}
	if(x2<x1)w1+=Math.PI;if(x3<x1)w2+=Math.PI;
	m=kettenbruchapprox(Math.tan((w1+w2)/2),1000);
	if(Math.abs(w1+w2-Math.PI)<1e-12)
	{
		if(erkl)E+="<p>Die Gerade verläuft parallel zur y-Achse durch "+"ABC".charAt(whs)+" und hat damit die Gleichung &nbsp;x = "+bstr(px)+"</p>\n"; 
		document.f.g9.value="x = "+bstr(px);return;
	}
	if(erkl)E+="<p>Berechne aus dem Winkel die Steigung: m = tan("+W+") = "+bstr(m)+"</p>\n";
	g=ggps(px,py,m);
	document.f.g9.value=g;
}

function berechnen10() // Tangenten an Parabel
{
	var x=document.f.p29.value.replace(/ /g,""),y=document.f.p30.value.replace(/ /g,""),p=document.f.f1.value.replace(/ /g,""),m1,m2,r,a,b,c,g1,g2;
	E=document.f.g10a.value=document.f.g10b.value="";
	Weg(10);
	if((x=="")||(y=="")||(p==""))return;
	x=parseZahl(x);if(x==null)return;
	y=parseZahl(y);if(y==null)return;
	p=parseParabel(p);if(p==null)return;
	a=p[2];b=p[1];c=p[0];
	r=a*(a*(x[0]*x[0]/x[1]/x[1])+b*x[0]/x[1]+c-y[0]/y[1]);if(Math.abs(r)<1e-14)r=0;
	if(erkl)
	{
		var f=pstrb(kettenbruchapprox(a),kettenbruchapprox(b),kettenbruchapprox(c)),ers=((y[0]!=0)?bstr(y):"")+(" - "+bstr(x)).replace(/- -/,"+ ")+((x[1]==1)?"":"·")+"m",wurz="";
		ers=ers.replace(/ - 0m/,"").replace(/ 1m/," m");if(ers=="")ers="0";if(ers==" + m")ers="m";
		E+="<p><b>Gesucht ist eine Gerade g(x) durch (<small>"+bstr(x)+"|"+bstr(y)+"</small>), die die Parabel <nobr>f(x) = "+f+"</nobr> berührt, d.h. nur einen gemeinsamen Punkt mit ihr besitzt.</b></p>\n";
		E+="<p>Mit dem Ansatz f(x)=g(x), also &nbsp;"+f+" = mx + b,&nbsp; ergibt sich eine quadratische Gleichung, die, weil ja nur ein gemeinsamer Punkt existieren soll, für x nur eine Lösung haben darf.</p>\n";
		E+="<p>Weil x="+bstr(x)+" und y="+bstr(y)+" die Geradengleichung y = mx + b (mit noch unbekannten m und b) erfüllen, ";
		E+="gilt: <nobr>"+bstr(y)+" = "+bstr(x)+((x[1]==1)?"":"·")+"m + b,</nobr> und damit <nobr>b = "+(ers)+".</nobr>\n";
		E+="<nobr>Mit der rechten</nobr> Seite der letzten Gleichung kann b im obigen Ansatz eliminiert werden.</p>\n";
		E+="<p>Die so entstehende Gleichung &nbsp;"+f+" = mx"+(((y[0]>=0)?"+":"")+bstr(y)+"-"+bstr(x,1)+((x[1]!=1)?"·":"")).replace(/\+/g," + ").replace(/-/g," - ").replace(/\+ 0 /,"").replace(/- \( -/g,"+ ").replace(/\)/,"");
		E+="m &nbsp;wird in Standardform gebracht, \n";
		E=E.replace(/ 1m/," m").replace(/ - 0m/,"");
		E+="und die Parameter werden in die Lösungsformel eingesetzt.\n";
		E+="Weil die Gleichung nur eine Lösung haben soll, muß ihre Diskriminante, d.h. der Wert unter der Wurzel, null werden.</p>\n";
		E+="<p>Durch Nullsetzen der Diskriminante entsteht die quadratische Gleichung &nbsp;<nobr>";
		E+=("m² + "+bstr(kettenbruchapprox(-2*(b + 2*a*x[0]/x[1])))+"m + "+bstr(kettenbruchapprox(-4*c*a+b*b+4*a*y[0]/y[1]))+" = 0").replace(/\+ -/g,"- ").replace(/\+ 0 /,"").replace(/\+ 0m /,"")+",</nobr> \n";
		if(r>0){if(String(Math.sqrt(r)).length<12)wurz=" = "+bstr(kettenbruchapprox(2*a*x[0]/x[1]+b,1000))+" ± "+String(Math.sqrt(4*r)).replace(/\./,",");}
		if(r<0)E+="welche keine reellen Lösungen besitzt. Daher gibt es die gesuchte Tangente nicht.</p>\n";
		if(r==0)E+="welche die Lösung m="+bstr(kettenbruchapprox(2*a*x[0]/x[1]+b,1000))+" besitzt.</p>\n";
		if(r>0){E+="welche die Lösungen <nobr>m = "+bstr(kettenbruchapprox(2*a*x[0]/x[1]+b,1000))+" ± &radic;("+bstr(kettenbruchapprox(4*r,1000))+")</nobr><nobr>"+wurz+"</nobr> besitzt.</p>\n";}
		if(r>=0)E+="<p>Damit k"+((r==0)?"ann die Tangentengleichung":"önnen die Tangentengleichungen")+" berechnet werden.</p>\n";
	}
	if(r<0){document.f.g10a.value="Es gibt keine Tangente";return;}
	m1=-2*Math.sqrt(r)+2*a*x[0]/x[1]+b;
	m2=2*Math.sqrt(r)+2*a*x[0]/x[1]+b;
	g1=ggps(x,y,kettenbruchapprox(m1,1000));if(m2!=m1)g2=ggps(x,y,kettenbruchapprox(m2,1000));
	document.f.g10a.value=g1;document.f.g10b.value=(m1!=m2)?g2:"";
	zuletzt=10;
}
function gg2p(x1,y1,x2,y2)
{
	var m=new Array(1,1),b=new Array(1,1);
	if(erkl)E+="<p><b>Gerade durch zwei Punkte (<small>("+bstr(x1)+"|"+bstr(y1)+"), ("+bstr(x2)+"|"+bstr(y2)+")</small>) finden</b></p>\n";
	if(x1[1]*x2[0]-x1[0]*x2[1]==0)
	{
		if(y1[0]/y1[1]!=y2[0]/y2[1])
		{
			if(erkl)E+="<p>Die x-Werte sind identisch. &rArr; Geradengleichung: x = "+bstr(x1)+"</p>\n";
			return "x = "+bstr(x1);
		}
		if(erkl)E+="<p>Die beiden Punkte sind identisch. Es kann keine <i>eindeutige</i> Geradengleichung angegeben werden.</p>\n";
		return "Punkte identisch!";
	}
	if(y1[1]*y2[0]-y1[0]*y2[1]==0)
	{
		if(erkl)E+="<p>Die y-Werte sind identisch. &rArr; Geradengleichung: y = "+bstr(y1)+"</p>\n";
		return "y = "+bstr(y1);
	}
	m[0]=x1[1]*x2[1]*(y1[1]*y2[0]-y1[0]*y2[1]);
	m[1]=(y1[1]*y2[1]*(x1[1]*x2[0]-x1[0]*x2[1]));
	kuerze(m);
	b[0]=(x1[1]*x2[0]*y1[0]*y2[1]-x1[0]*x2[1]*y1[1]*y2[0]);
	b[1]=(y1[1]*y2[1]*(x1[1]*x2[0]-x1[0]*x2[1]));
	kuerze(b);
	if(erkl)
	{
		E+="<table border=1 cellspacing=0 cellpadding=5><tr><td>Ansatz (Zweipunkteform)</td><td>Koordinaten eingesetzt</td><td>nach y aufgelöst</td></tr>\n";
		E+="<tr><td align=center>"+t2pf+"</td>\n<td align=center>"+zpftab(x1,y1,x2,y2)+"</td>\n<td align=center><nobr>"+gstr(m,b)+"</nobr></td></tr></table>\n";
	}
	return gstr(m,b);
}
function ggps(x,y,m)
{
	var b=new Array(1,1);
	if(Math.abs(m[0]/m[1])<1e-14)m[0]=0;
	b[0]=m[1]*x[1]*y[0]-y[1]*m[0]*x[0];
	b[1]=y[1]*m[1]*x[1];;
	if(m[0]==Math.round(m[0]))
		kuerze(b);
	else
		{b[0]/=b[1];b[1]=1;}
	if(erkl)
	{
		E+="<p><b>Gerade mit Steigung m="+bstr(m)+" durch Punkt (<small>"+bstr(x)+"</small>|<small>"+bstr(y)+"</small>) finden</b></p>\n";
		E+="<table border=1 cellspacing=0 cellpadding=5><tr><td>Ansatz (Punktsteigungsform)</td><td>Zahlen eingesetzt</td><td>nach y aufgelöst</td></tr>\n";
		E+="<tr><td align=center>"+tpsf+"</td>\n<td align=center>"+psftab(x,y,m)+"</td>\n<td align=center><nobr>"+gstr(m,b)+"</nobr></td></tr></table>\n";
	}
	return gstr(m,b);
}

function Schnitt(p1,p2)
{
	var x=new Array(0,1),y=new Array(0,1);
//	x= m1n·m2n·(b1n·b2z - b1z·b2n)/(b1n·b2n·(m1z·m2n - m1n·m2z))
	if(p1.length!=2)
	{
		x[0]=p1;x[1]=1;
	}
	else if(p2.length!=2)
	{
		x[0]=p2;x[1]=1;
	}
	else if((p1.length==2)&&(p2.length==2))
	{
		x[0]=p1[0][1]*p2[0][1]*(p1[1][1]*p2[1][0]-p1[1][0]*p2[1][1]);
		x[1]=p1[1][1]*p2[1][1]*(p1[0][0]*p2[0][1]-p1[0][1]*p2[0][0]);
		if(x[1]==0)return null;
	}
	else {alert("kein Schnittpunkt, Geraden sind echt parallel");return null;}
	kuerze(x);
	//y = bz/bn + mz·xz/(mn·xn)
	if(p1.length==2)
	{
		y[0]=p1[1][1]*p1[0][0]*x[0]+p1[0][1]*p1[1][0]*x[1];y[1]=p1[0][1]*p1[1][1]*x[1];
	}
	else
	{
		y[0]=p2[1][1]*p2[0][0]*x[0]+p2[0][1]*p2[1][0]*x[1];y[1]=p2[0][1]*p2[1][1]*x[1];
	}
	kuerze(y);
	return new Array(x,y);
}
function gstr(m,b,v)
{
	if((b==null)&&(m.length==2)){b=m[1];m=m[0];}
	if((b==null)&&(m.length!=2))return"x = "+bstr(kettenbruchapprox(m));
	if(v==null)v="x";
	var g=bstr(m);if(g.indexOf("/")>-1)g+="·";
	g+=v;if(m[0]==0)g="";
	if(m[0]==m[1])g=v;if(m[0]==-m[1])g="-"+v;
	if(b[0]>0)g+=" + "+bstr(b);
	if(b[0]<0)g+=bstr(b).replace(/-/," - ");
	if(g.substr(0,3)==" + ")g=g.substring(3,g.length);
	if(g.substr(0,3)==" - ")g="-"+g.substring(3,g.length);
	if(g=="")g="0";
	return "y = "+g.replace(/\./g,",");
}

var darstellungsmodus=2;

function bstr(b,kl)
{
	if(b[1]<0){b[1]=-b[1];b[0]=-b[0];}
	var k1=((kl!=null)&&(b[0]*b[1]<0))?"(":"",k2=(k1=="")?"":")",dm=darstellungsmodus,n=b[1],x,i2=0,i5=0,im=0;
	if(dm==1)return k1+String(Math.round(1e12*b[0]/b[1])/1e12).replace(/\./,",")+k2;
	if(dm==0)return String(k1+b[0]+((b[1]!=1)?"/"+b[1]:"")+k2).replace(/\./,",");
	while((n%2)==0){i2++;n/=2;}while((n%5)==0){n/=5;i5++;}
	im=Math.max(i2,i5);
	darstellungsmodus=((n==1)&&(im<11))?1:0;
	x=bstr(b,kl);
	darstellungsmodus=dm;
	return x;
}
function pstrb(a,b,c)
{
	var t="Þ"+bstr(a)+"x² + "+bstr(b)+"x + "+bstr(c)+"¶";
	t=t.replace(/Þ1x²/,"x²").replace(/-1x²/,"-x²").replace(/Þ0x²/,"").replace(/\+ -/g,"- ").replace(/\+ 0x/,"");
	t=t.replace(/\+ 0¶/,"").replace(/[¶Þ]/g,"").replace(/ 1x/g," x");
	return t;
}
function pstrbs(a,xs,ys)
{
	var t="Þ"+bstr(a)+"(x - "+bstr(xs)+")² + "+bstr(ys)+"¶";
	t=t.replace(/- -/,"+ ").replace(/\+ -/,"- ").replace(/- 0\)/,")").replace(/\+ 0¶/,"").replace(/Þ1\(/,"(").replace(/Þ-1\(/,"-(");
	t=t.replace(/\(x \)/,"x").replace(/\+ 0¶/,"").replace(/[¶Þ]/g,"");
	return t;
}
function pstrbn(a,x1,x2)
{
	var t="Þ"+bstr(a)+"(x - "+bstr(x1)+")(x - "+bstr(x2)+")¶";
	t=t.replace(/- -/g,"+ ").replace(/- 0\)/g,")").replace(/\+ 0\)/g,")").replace(/Þ1\(/,"(").replace(/Þ-1\(/,"-(");
	t=t.replace(/\(x \)/g,"x").replace(/\+ 0¶/,"").replace(/[¶Þ]/g,"").replace(/xx/,"x²").replace(/- \(/,"-(");
	return t;
}
function parseZahl(t)
{
	var i,j,k,x,z,n,zz,nn;
	x=String(t).replace(/,/g,".").split("/");
	if(x.length==2){if((x[1]=="")||(isNaN(x[1])))return null;}
	if(x.length==1)x[1]=1;
	x[0]=Number(x[0]);x[1]=Number(x[1]);
	if(x[0]==0)return new Array(0,1);
	if(isNaN(x[0])||isNaN(x[1])){/*alert("Eingabe "+t+" nicht erkannt");*/return null;}
	if(x[0]!=Math.round(x[0]))z=kettenbruchapprox(x[0]);else z=new Array(x[0],1);
	if(x[1]!=Math.round(x[1]))n=kettenbruchapprox(x[1]);else n=new Array(x[1],1);
	zz=z[0]*n[1];nn=z[1]*n[0];g=ggt(zz,nn);
	if(nn<0){zz=-zz;nn=-nn;}
	return new Array(zz/g,nn/g);
}

function parseGerade(g)
{
	var i,j,xx=new Array(4),yy=new Array(4),MultErg=new Array(/\dx/,/\d\(/,/\)\(/,/x\(/,/\)x/,/pi\(/,/\dpi/,/\de_/,/\dy/,/y\(/,/\)y/,/xy/,/yx/,/xx/,/yy/);
	g=("Þ"+g).replace(/Þf\(x\)=/,"y=").replace(/Þ/,"");
	g=("Þ"+g).replace(/Þg\(x\)=/,"y=").replace(/Þ/,"");
	g=("Þ"+g).replace(/Þh\(x\)=/,"y=").replace(/Þ/,"").replace(/,/g,".").replace(/·/g,"*");
	if(g.indexOf("=")==-1){/*alert(g+" ist keine Gleichung");*/return null;}
	if((g.indexOf("x")==-1)&&(g.indexOf("y")==-1))return null;
	var t=g.replace(/,/g,".").split("=");
	if(t.length>2)return null;
	if(!checkterm(t[0])||!checkterm(t[1]))return null;
	if((t[1]=="")||(t[1]==null))return null;
	if((t[0]=="")||(t[0]==null))return null;
	if((t[1]=="-")||(t[1]=="+"))return null;
	if((t[0]=="-")||(t[0]=="+"))return null;
	if(t[1].replace(/ /g,"")=="")return null;
	if(t[0].replace(/ /g,"")=="")return null;
	t=t[1]+"-("+t[0]+")";
	if(t.indexOf("--")>-1)return null;
	for(j=0;j<MultErg.length;j++)
		do{i=t.search(MultErg[j]);if(i==-1)break;t=t.substr(0,i+1)+"*"+t.substring(i+1,t.length);}while(true);
	if(!checkterm(t))return null;
	var t1=t.replace(/x/g,"0"),t2=t.replace(/x/g,"1");
	var N1="("+t1.replace(/y/g,"1")+")-("+t1.replace(/y/g,"0")+")",N2="("+t2.replace(/y/g,"1")+")-("+t2.replace(/y/g,"0")+")";
	var n1=eval(N1),n2=eval(N2);
	if(n1*n2==0)
	{
		t1=t.replace(/y/g,"0");
		N1="("+t1.replace(/x/g,"1")+")-("+t1.replace(/x/g,"0")+")";
		var x1=eval("-("+t1.replace(/x/g,"0")+")/("+N1+")");
		return x1;
	}
	var y1=eval("-("+t1.replace(/y/g,"0")+")/("+N1+")"),y2=eval("-("+t2.replace(/y/g,"0")+")/("+N2+")");
	var mm=y2-y1,bb=y1;
	if(Math.abs(eval(t.replace(/x/g,"10").replace(/y/g,"("+(10*mm+bb)+")")))>1e-8)return null;
	if(Math.abs(eval(t.replace(/x/g,"(-10)").replace(/y/g,"("+(-10*mm+bb)+")")))>1e-8)return null;
	var m=kettenbruchapprox(y2-y1),b=kettenbruchapprox(y1);
	return new Array(m,b);
}
function parseParabel(p)
{
	p=p.replace(/,/g,".").replace(/x²/g,"x*x").replace(/x\^2/g,"x*x");
	var i,j,x,y,y1,y2,y3,a,b,c,MultErg=new Array(/\dx/,/\d\(/,/\)\(/,/x\(/,/\)x/,/pi\(/,/\dpi/,/\de_/);
	if(p.indexOf("=")>-1){/*alert(p+" ist kein Term");*/return null;}
	if(p.indexOf("y")>-1){/*alert(p+" enthält y");*/return null;}
	if(p.indexOf("x")==-1){/*alert(p+" enthält kein x");*/return null;}
	var t=p.replace(/[—–]/g,"-").replace(/²/g,"^2").replace(/³/g,"^3").replace(/math\./gi,"");
	for(j=0;j<MultErg.length;j++)
		do{i=t.search(MultErg[j]);if(i==-1)break;t=t.substr(0,i+1)+"*"+t.substring(i+1,t.length);}while(true);
	t=translate(t);
	if(!checkterm(t))return null;
	y1=eval(t.replace(/X/g,"(-1)"));
	y2=eval(t.replace(/X/g,"0"));
	y3=eval(t.replace(/X/g,"1"));
	c=y2;b=(y3-y1)/2;a=b-c+y1;//alert(a+"  "+b+"  "+c+"\n"+t);
	if(a==0){/*alert("Keine quadratische Funktion erkannt");*/return null;}
	for(i=0;i<10;i++)
	{
		x=Math.random()*20-10;
		y1=eval(t.replace(/X/g,"("+x+")"));
		y2=(a*x+b)*x+c;
		if(Math.abs(y1-y2)>1e-10){/*alert("Keine quadratische Funktion erkannt");*/return null;}
	}
	return new Array(c,b,a);
}

function checkterm(t)
{
	var tt=t.replace(/[^\(\)]/g,"");
	if((t.indexOf("/x")>-1)||(t.indexOf("/ ")>-1))return null;
	if((t.indexOf(" /")>-1)||(t.indexOf("-/")>-1)||(t.indexOf("+/")>-1))return null;
	while(tt.indexOf("()")>-1)tt=tt.replace(/\(\)/g,"");
	if(tt!="")return false;
	tt=t.charAt(t.length-1);
	if("+-,.^/".indexOf(tt)>-1)return false;
	tt=t.replace(/Math.pow/g,"").replace(/Math.sqrt/g,"").replace(/[Xxy0123456789\(\)*-\/\+,\.]/g,"");
	return (tt=="");
}

function kuerze(m){if(m[0]==0)m[1]=1;g=ggt(m[0],m[1]);m[0]/=g;m[1]/=g;if(m[1]<0){m[0]=-m[0];m[1]=-m[1];}}

function ggt(a,b)
{
	if(a*b==0)return 1;a=Math.abs(a);b=Math.abs(b);
	while(b!=0){var r=a%b;a=b;b=r;}
	return a;
}

function zpftab(x1,y1,x2,y2)
{
	var t="<table><tr><td style='text-align:center'><nobr>&nbsp;y - "+bstr(y1,1)+"&nbsp;</nobr><hr size=1 noshade color='#000000'><nobr>&nbsp;x - "+bstr(x1,1)+"&nbsp;</nobr></td>\n";
	t+="<td style='vertical-align:center'><nobr> &nbsp;=&nbsp; </nobr></td>\n";
	t+="<td style='text-align:center'><nobr>&nbsp;"+bstr(y2)+" - "+bstr(y1,1)+"&nbsp;</nobr><hr size=1 noshade color='#000000'><nobr>&nbsp;"+bstr(x2)+" - "+bstr(x1,1)+"&nbsp;</nobr></td>\n";
	t+="</tr></table>\n";
	return t;
}
function psftab(x,y,m)
{
	var t="<table><tr><td style='text-align:center'><nobr>&nbsp;y - "+bstr(y,1)+"&nbsp;</nobr><hr size=1 noshade color='#000000'><nobr>&nbsp;x - "+bstr(x,1)+"&nbsp;</nobr></td>\n";
	t+="<td style='vertical-align:center'><nobr> &nbsp;=&nbsp;&nbsp;"+bstr(m)+"</nobr></td></tr></table>\n";
	return t;
}

var t2pf="<table align=center><tr><td style='text-align:center'>&nbsp;y - y<sub>1</sub>&nbsp;<hr size=1 color='#000000' noshade>&nbsp;x - x<sub>1</sub>&nbsp;</td>\n";
t2pf+="<td style='vertical-align:center'> &nbsp;=&nbsp; </td>\n";
t2pf+="<td style='text-align:center'>&nbsp;y<sub>2</sub> - y<sub>1</sub>&nbsp;<hr size=1 noshade color='#000000'>&nbsp;x<sub>2</sub> - x<sub>1</sub>&nbsp;</td>\n";
t2pf+="</tr></table>";
var tpsf="<table align=center><tr><td style='text-align:center'>&nbsp;y - y<sub>1</sub>&nbsp;<hr size=1 color='#000000' noshade>&nbsp;x - x<sub>1</sub>&nbsp;</td>\n";
tpsf+="<td style='vertical-align:center'> &nbsp;=&nbsp; m</td></tr></table>";
var schweig=1==0;
function Weg(n)
{
	if(schweig)return;
	var t='<div style="background-color:#DCD7C6;padding:1 10 5 20;text-align:left"><!--<h5>Rechenweg</h5>//-->\n';
	switch(n)
	{
	case 0: t='<div><p align=left>Bei jedem Berechnen oder Klicken auf eine der Berechnen-Schaltflächen erscheint hier eine Erklärung des Ansatzes und des allgemeinen Rechenweges. \n';
		t+='(Hier einmal nicht interaktiv mit den Werten der Eingabe.)</p>';
		break;
	case 1:t+="<p><b>Eine Gerade durch zwei Punkte</b> (x<sub>1</sub>|y<sub>1</sub>) und (x<sub>2</sub>|y<sub>2</sub>)\n";
		t+="kann man über die Zweipunkteform der Geradengleichung finden, falls x<sub>2</sub>&ne;x<sub>1</sub> ist:";
		t+=t2pf;
		t+="</p><p>Man setzt die Koordinaten entsprechend ein und löst nach y auf.</p>\n";
		t+="<p>Falls x<sub>2</sub>=x<sub>1</sub>, ist die Geradengleichung x = x<sub>1</sub>.</p>\n";
		break;
	case 2:t+="<p><b>Eine Gerade durch einen Punkt (<small>x<sub>1</sub>|y<sub>1</sub></small>) mit vorgegebener Steigung m</b>\n";
		t+="kann man über die Punktsteigungsform der Geradengleichung finden:\n";
		t+=tpsf;
		t+="</p><p>Man setzt die Koordinaten und die Steigung entsprechend ein und löst nach y auf.</p>\n";
		break;
	case 3:t+="<p><b>Parallele durch einen Punkt finden</b></p><p>Parallelen besitzen gleiche Steigungen. Die gesuchte und die vorgegebene Gerade besitzen daher die gleiche Steigung m.</p>\n";
		t+="<p>Lies also m an der gegebenen Geradengleichung ab. Setze dann dieses m und die Koordinaten des gegebenen Punktes in die Punkt-Steiungs-Form (s.u.) ein und löse nach y auf.\n";
		t+=tpsf;+"</p>\n";
		break;
	case 4:t+="<p><b>Orthogonale zu einer Geraden durch einen Punkt finden</b></p><p>Die Steigungen orthogonaler Geraden erfüllen die Gleichung m<sub>1</sub>·m<sub>2</sub> = -1. Also ist m<sub>2</sub> = -1/m<sub>1</sub>.</p>\n";
		t+="<p>Lies also m an der gegebenen Geradengleichung ab. Setze dann negativen Kehrwert der abgelesen Steigung m sowie die Koordinaten des gegebenen Punktes in die Punkt-Steiungs-Form (s.u.) ein und löse nach y auf.\n";
		t+=tpsf.replace(/m/,"-1/m")+"</p>\n";
		break;
	case 6:t+="<p><b>Die Mittelsenkrechte einer Strecke finden</b></p><p>Die Steigungen orthogonaler (senkrechter) Geraden erfüllen die Gleichung m<sub>1</sub>·m<sub>2</sub> = -1. Also ist m<sub>2</sub> = -1/m<sub>1</sub>.</p>\n";
		t+="<p>Berechne also zunächst die Steigung der Gerade durch A(x<sub>1</sub>|y<sub>1</sub>) und B(x<sub>2</sub>|y<sub>2</sub>) mit <nobr>m<sub>AB</sub>=(y<sub>2</sub>-y<sub>1</sub>)/(x<sub>2</sub>-x<sub>1</sub>).</nobr></p>\n";
		t+="<p>Da die Mittelsenkrechte durch die Mitte von A und B geht, berechne die Koordinaten des Mittelpunktes (x<sub>M</sub>|y<sub>M</sub>).\n";
		t+="<br>Dabei sind x<sub>M</sub> = (x<sub>1</sub>+x<sub>2</sub>)/2 und  y<sub>M</sub> = (y<sub>1</sub>+y<sub>2</sub>)/2 jeweils die arithetischen Mittelwerte der entsprechenden Koordinaten von A und B.</p>\n";
		t+="<p>Setze dann den negativen Kehrwert der berechneten Steigung m sowie die berechneten Koordinaten des Mittelpunktes in die Punkt-Steigungs-Form ein und löse nach y auf.\n";
		t+=tpsf.replace(/1/g,"M").replace(/m/,"-1/m<sub>AB</sub><sup>&nbsp;</sup>")+"</p>\n";
		break;
	case 7:t+="<p><b>Die Seitenhalbierende im Dreieck</b> geht durch einen Punkt des Dreiecks und die gegenüberliegende Seitenmitte.\n";
		t+="Berechne die Koordinaten der Seitenmitte M(x<sub>M</sub>|y<sub>M</sub>) als Mittelwerte der entsprechenden Koordinaten.\n"; 
		t+="Setze dann die Koordinaten des gegebenen Punktes P(x<sub>P</sub>|y<sub>P</sub>) und die der gegenüberliegenden Seitenmitte in die Zweipunkteform ein und löse nach y auf.</p>\n";
		t+=t2pf.replace(/1/g,"P").replace(/2/g,"M");
		break;
	case 8:t+="<p><b>Winkelhalbierende zweier Geraden</b></p>\n";
		t+="<p>Berechne die Steigungswinkel &alpha;<sub>1</sub> und &alpha;<sub>2</sub> beider Geraden aus ihren Steigungen mit der Formel &alpha; = tan<sup>-1</sup>(m).\n";
		t+="Eine der beiden Winkelhalbierenden hat als Steigungswinkel den arithmetischen Mittelwert der Steigungswinkel &alpha;<sub>W1</sub> = (&alpha;<sub>1</sub>+&alpha;<sub>2</sub>)/2.\n";
		t+="Berechne ihre Steigung mit m<sub>1</sub> = tan(&alpha;).<br>Die zweite Winkelhalbierende hat den negativen Kehrwert als Steigung (m<sub>2</sub>=-1/m<sub>1</sub>), denn die beide Winkelhalbierenden \n";
		t+="stehend senkrecht aufeinander. Finde schließlich die Geradengleichungen mit der Punkt-Steigungs-Form.";
		t+=tpsf+"</p>\n";
		break;
	case 9:t+="<p><b>Winkelhalbierende im Dreieck</b></p>\n";
		t+="<p>Berechne die Steigungswinkel <&alpha;<sub>1</sub> und &alpha;<sub>2</sub> beider Dreiecksschenkel aus ihren Steigungen mit der Formel &alpha; = tan<sup>-1</sup>(m).\n";
		t+="<br>Liegt die x-Koordinate der Ecke, durch die die gesuchte Winkelhalbierende gehen soll, nicht zwischen den beiden anderen, so\n";
		t+="hat die Winkelhalbierende den arithmetischen Mittelwert zum Steigungswinkel: &alpha;<sub>W</sub> = (&alpha;<sub>1</sub>+&alpha;<sub>2</sub>)/2.\n";
		t+="Sonst addiere 90° zu diesem Mittelwert. ";
		t+="<br>Berechne nun die Steigung m = tan(&alpha;)\n";
		t+="und finde schließlich die Geradengleichung mit der Punkt-Steigungs-Form:";
		t+=tpsf+"</p>\n";
		break;
	case 10:t+="<p><b>Tangente durch Punkt an Parabel finden</b></p><p>Setze die allgemeine Geradengleichung (für die zu findende Tangente) und die Parabelgleichung gleich: mx + b = f(x).\n";
		t+="<br>Löse die entstandene quadratische Gleichung für x bis zum Ansatz der p-q-Formel (bzw. abc-Formel). Die Gerade ist genau dann Tangente, wenn es nur einen \n";
		t+="gemeinsamen Punkt gibt und |m|&nbsp;&ne; ±&infin;. Das ist dann erfüllt, wenn die Diskriminante (also der Wert unter der Wurzel) Null ist.\n";
		t+="Setze die Diskriminante gleich Null (&rarr;Gleichung (1)). <br>Setze dann die Koordinaten des gegebenen Punktes in y=mx+b ein, löse nach b\n";
		t+="auf (&rarr;Gleichung (2)) und ersetze damit b in Gleichung (1). (Das kann auch schon vorher geschehen, auch bereits im Ansatz.)\n";
		t+="Löse diese Gleichung (sie ist quadratisch) für m. Finde für beide Lösungen mit Hilfe der Gleichung (2) das b.</p>\n";
		break;
	default: t+="<p><i>Keine Erklärung verfügbar.</i></p>";
	}
	t+="</div>";
	document.getElementById("erkl").innerHTML=t;
	document.getElementById("erkldet").innerHTML=(erkl)?"<table align=right><tr><td><input type='button' class='button' value='Details zur letzten Rechnung' onclick='Details()'></td></tr></table>\n":"";
}
function Details()
{
	if(E==""){alert("Es sind keine Details verfügbar, da die letzte Eingabe nicht vollständig oder nicht korrekt war.");return;} 
	document.getElementById("erkldet").innerHTML='<div style="background-color:#FAF0E3;padding:5 15 15 20">'+E+'</div>';
}
