var canvas;var canvas2;var ctx;var cty;var img;//MATCHING2用parametervar Cir1=4;var Cir2=1;var Cir3=4;var za;var zb;var zc;var Z0a;var Z0b;var Z0c;var UVzero;var UVinfi;var firstCalc=false;var CalcDone=false;		//計算完了状態ならtrue  待機中はfalsevar onlyP;	//マッチング線を消すかどうかを決めるグローバル変数var Srad=110;				//半径var SmithX=0;				//smithチャートを描画する左上の座標var SmithY=0;var Spox=SmithX+Srad+7;		//smithチャートの中心座標var Spoy=SmithY+Srad+7;var stateC=0;			//3のとき複数解ありvar selectC=true;				//交点選択用変数var mcn=1;				//選択されている回路の番号var LamdaStb;var minimsl;			//MSLの波長短縮率var ministb;			//スタブの波長短縮率//Q値表示用var	cropL;		//左スミスのマッチング交点var cropR;		//右スミスのマッチング交点var DoneQzs=false;var DoneQzL=false;var DoneQcross=false;//その昔branchにあった変数たち	var freq; 		//周波数	var Z0; 		//特性インピーダンス	var Z0stb;		//ストリップラインの特性インピーダンス	var Z0msl;		//ストリップラインの特性インピーダンス		var zs;			//Zsの読み込み	var zsk;		//zsの複素共役	var zL;			//ZLの読み込み	var zLk;		//zLの複素共役	var Ys;			//Ys=1/Zsを求める 	var Ysk;		//Ysk=1/zsk	var YL;			//YL=1/ZLを求める	var YLk;		//YLk=1/zLk	var UVs;		//Zsのチャート上の座標定義	var UVsk;		//Zskのチャート上の座標定義	var UVL;		//ZLのチャート上の座標定義	var UVLk;		//ZLkのチャート上の座標定義	var RcurvS;		//Zsのレジスタンス円の中心点と半径取得	var RcurvL;		//ZLのレジスタンス円の中心点と半径取得	var GcurvS;		//Ysのコンダクタンス円の中心点と半径取得	var GcurvL;		//YLのコンダクタンス円の中心点と半径取得		var nstb;	var nmsl;//Sパラ表示用の変数たちvar graphData;var dataS21;var dataS11;var point=200;//var fstart=100E6;var fstart=0;var fstop=4E9;var FlatS=40;var imgR;var ctr;var canvasRect;var boxPosiX=51;var boxPosiY=0;var offset=10;		//0dBの位置調整 //なんでboxPosiYに加えない？var boxX=302;var boxY=200;var mini1,mini2,mini3		//波長短縮率function first() {	canvas = document.getElementById("canvas");	if ( ! canvas || ! canvas.getContext ) { return false; }	ctx = canvas.getContext("2d");		img = new Image();	img.src="img/smith.jpg?" + new Date().getTime();	img.onload = function(){ ctx.drawImage(img,SmithX,SmithY); cty.drawImage(img,SmithX,SmithY); }		canvasRect = document.getElementById("rectangular");		//rectangularキャンバスのイニシャライズ	if ( ! canvasRect || ! canvasRect.getContext ) { return false; }	ctr = canvasRect.getContext("2d");		imgR = new Image();			//Sパラの背景目盛り	imgR.src="img/RectBack.jpg?" + new Date().getTime();	imgR.onload = function(){ ctr.drawImage(imgR,0,0);}	document.formResult.Za.value="";	document.formResult.Zb.value=""; 	document.formResult.Zc.value=""; 	UVzero=new positUV(-1,0);		//ゼロ点の定義	UVinfi=new positUV(1,0);		//無限点の定義	getBasicParam();//	rectS();				//Sパラを表示//	ClearSpara();//	fstart=parseFloat(document.formRect.F0.value)*1E9;		//グラフの周波数始点を取得//	fstop=parseFloat(document.formRect.F4.value)*1E9;		//グラフの周波数終点を取得	//	paramSub();	document.form1.Rs.select();	//起動時にRe[zs]を選択状態にする	//writeResult(CirA + "" + CirB + "" + CirC);//	document.formTest.test.value=0;		//デバッグ終了次第削除の事//	document.formTest.test2.value=0;		//デバッグ終了次第削除の事	checkf();							//デバッグ終了次第削除の事}function paramCalc(){		//各基本パラメータを計算する関数	CalcDone=false;			//計算待機状態	getBasicParam();//	paramSub();//	ClearDoneQ();			//Qカーブをリセット	//	cropR= new realimg(0,0);//	cropL= new realimg(0,0);	Z0=parseFloat(document.form1.Z0.value);	zs=new realimg(parseFloat(document.form1.Rs.value)/Z0 , parseFloat(document.form1.Xs.value)/Z0); //Zsの読み込み		if(zs.re==0) zs.re=1/1E12;		//zsの値がゼロのとき，1E-9にする		if(zs.im==0) zs.im=1/1E12;	zsk=compcon(zs);	//zsの複素共役	zL=new realimg(parseFloat(document.form1.RL.value)/Z0 , parseFloat(document.form1.XL.value)/Z0);  //ZLの読み込み		if(zL.re==0) zL.re=1/1E12;		//zLの値がゼロのとき，1E-9にする		if(zL.im==0) zL.im=1/1E12;		zLk=compcon(zL);	//zLの複素共役	Ys=RXtoGB(zs);		//Ys=1/Zsを求める 	Ysk=RXtoGB(zsk);	//Ysk=1/zsk	YL=RXtoGB(zL);		//YL=1/ZLを求める	YLk=RXtoGB(zLk);	//YLk=1/zLk	UVs=RXtoUV(zs);		//Zsのチャート上の座標定義	UVsk=RXtoUV(zsk);	//Zskのチャート上の座標定義	UVL=RXtoUV(zL);		//ZLのチャート上の座標定義	UVLk=RXtoUV(zLk);	//ZLkのチャート上の座標定義		RcurvS = ReToAR(zs.re);		//Zsのレジスタンス円の中心点と半径取得	RcurvL = ReToAR(zL.re);		//ZLのレジスタンス円の中心点と半径取得	GcurvS = ReToARG(Ys.re);	  //Ysのコンダクタンス円の中心点と半径取得	GcurvL = ReToARG(YL.re);	  //YLのコンダクタンス円の中心点と半径取得		par1=parseFloat(document.form1.Apar.value);	par2=parseFloat(document.form1.Bpar.value);	par3=parseFloat(document.form1.Cpar.value);	ctr.clearRect(0, 0, 352, 352);	//グラフ背景いったん消去	ctr.drawImage(imgR,0,0);		//グラフ描画	Z01=parseFloat(document.form1.Z0A.value);	Z02=parseFloat(document.form1.Z0B.value);	Z03=parseFloat(document.form1.Z0C.value);//	if(!firstCalc){//		plotOnePoint(UVsk,4);		//Zs点のプロット//		plotOnePoint(UVL,5);		//ZLk点のプロット////	}	firstCalc=!firstCalc;}function branch(){	getFss();			//グラフの周波数始点終点を取得	ctx.clearRect(0, 0, 2*Spox, 2*Spoy);		//いったん画面消去	ctx.drawImage(img,SmithX,SmithY);			//背景のSmithチャート描画	paramCalc();		zc=eval("Part"+Cir3+"(zL,par3,Z03,3)")		//evalでむりやり関数呼び出し	zb=eval("Part"+Cir2+"(zc,par2,Z02,2)")	za=eval("Part"+Cir1+"(zb,par1,Z01,1)")		document.formResult.Za.value=round2(za.re*Z0) + "+ j" + round2(za.im*Z0); 		//インピーダンス表示	document.formResult.Zb.value=round2(zb.re*Z0) + "+ j" + round2(zb.im*Z0); 	document.formResult.Zc.value=round2(zc.re*Z0) + "+ j" + round2(zc.im*Z0);		plotOnePoint(RXtoUV(za),1);	plotOnePoint(RXtoUV(zb),2);	plotOnePoint(RXtoUV(zc),3);//	plotOnePoint(UVsk,4);		//Zsk点のプロット	plotOnePoint(UVL,5);		//ZL点のプロット		CalcSpara();	rectS();		CalcDone=true;			//計算完了状態}function getFss(){		//グラフの周波数始点終点を取得してくれる関数	var fsub;	//周波数の差分	var freqF1;	var freqF2;	var freqF3;		fstart=parseFloat(document.formRect.F0.value)*1E9;		//グラフの周波数始点を取得	fstop=parseFloat(document.formRect.F4.value)*1E9;		//グラフの周波数終点を取得	fsub=(fstop-fstart)/4		freqF1=round1((fstart+fsub)/1E9);	freqF2=round1((fstart+fsub*2)/1E9);	freqF3=round1((fstart+fsub*3)/1E9);	document.formRect.F0.value=addP0(fstart/1E9);		//値が整数のとき、.0を付加	document.formRect.F4.value=addP0(fstop/1E9);		if(document.getElementById){		var objF1=document.getElementById("F1");		var objF2=document.getElementById("F2");		var objF3=document.getElementById("F3");		objF1.innerHTML=addP0(freqF1);		//値が整数のとき、.0を付加しながら表示		objF2.innerHTML=addP0(freqF2);		objF3.innerHTML=addP0(freqF3);	}}function addP0(freqText){		//値が整数のときに、.0を付加して返す	if (freqText % 1 == 0) freqText += ".0";	return freqText;}function rectBeforeBranch(){	if(CalcDone){		branch();	}}//-----------------------------------------------------//-----------------------------------------------------//-----------------------------------------------------//-----------------------------------------------------//-----------------------------------------------------function rectS(){			//Sパラの方形グラフを表示する関数	var LineCut=false;		//途中でFlatS dBを下回ったときにラインをカットするための二値　trueのときカット状態　	var bias=(boxY-offset)/FlatS;		//グラフの下辺をFlatS dBに設定する	ctr.clearRect(0, 0, 352, 352);	//背景いったん消去	ctr.drawImage(imgR,0,0);		//グラフ描画	if(fstart>fstop) ClearSpara();			//始点>終点のときSパラをクリアして表示させない	ctr.lineWidth = 1.2;	ctr.strokeStyle = 'rgba(150, 0, 0, 1)';			//S11を描く	ctr.beginPath();	ctr.moveTo(boxPosiX, boxPosiY+offset-dataS11[0]*bias);	for(cnt=0; cnt <= point; cnt++){		ctr.lineTo(boxPosiX+(boxX)*cnt/point, boxPosiY+offset-dataS11[cnt]*bias);	//プロットをつなぎ合わせる部分		}	ctr.stroke();		ctr.strokeStyle = 'rgba(0, 80, 0, 1)';			//S21を描く	ctr.beginPath();	ctr.moveTo(boxPosiX, boxPosiY+offset-dataS21[0]*bias);		//IE対策	for(cnt=0; cnt <= point; cnt++){		ctr.lineTo(boxPosiX+(boxX)*cnt/point, boxPosiY+offset-dataS21[cnt]*bias);	//プロットをつなぎ合わせる部分	}	ctr.stroke();}function CalcSpara(){	var mother;	var fsweep;	var cnt;	var objTextarea = document.getElementsByName('tarea')[0]; 	dataS21 = new Array(point);	dataS11 = new Array(point);	var comzero=new realimg(0,0);	//複素数の0	var comone=new realimg(1,0);	//複素数の1	var Rs=new realimg(parseFloat(document.form1.Rs.value), 0); //Rsの読み込み	var Xs=new realimg(0, parseFloat(document.form1.Xs.value)); //Xsの読み込み Xsの単位はオーム	var FXs=new mat4x4(comone,Xs,comzero,comone);		//直列リアクタンスXsのF行列化	var RL=new realimg(parseFloat(document.form1.RL.value), 0); //RLの読み込み	var XL=new realimg(0, parseFloat(document.form1.XL.value)); //XLの読み込み XLの単位はオーム	var FXL=new mat4x4(comone,XL,comzero,comone);		//直列リアクタンスXLのF行列化			var mode;	var Fmiddle;	var Fmidium;	var Xseri,Xpara;	var cosita;	var migiue;	var hidasita;		for(cnt=0; cnt<=point; cnt++){			fsweep=fstart+cnt*(fstop-fstart)/point;		if(fsweep==0)fsweep=1/1E3;//		document.formTest.test.value=3E8/freq*mini1*1000;		for(mode=1; mode<=3; mode++){		//3つの行列を生成するためのループ			switch(eval("Cir"+mode)){				case 0: Fmidium=new mat4x4(comone,comzero,comzero,comone);				//0ohm						break;				case 1: Xseri=new realimg(0, 2*Math.PI*fsweep*eval("par"+mode)/1E9);		//serial L						Fmidium=new mat4x4(comone,Xseri,comzero,comone);						break;				case 2: Xseri=new realimg(0, -1E12/(2*Math.PI*fsweep*eval("par"+mode)));	//serial C						Fmidium=new mat4x4(comone,Xseri,comzero,comone);						break;				case 3: Xpara=new realimg(0, 2*Math.PI*fsweep*eval("par"+mode)/1E9);		//parallel L						Fmidium=new mat4x4(comone,comzero,RXtoGB(Xpara),comone);						break;				case 4: Xpara=new realimg(0, -1E12/(2*Math.PI*fsweep*eval("par"+mode)));	//parallel C						Fmidium=new mat4x4(comone,comzero,RXtoGB(Xpara),comone);						break;				case 5: cosita=new realimg(Math.cos(2*Math.PI*fsweep*eval("par"+mode)/1E3/3E8/eval("mini"+mode)),0);						migiue=new realimg(0,eval("Z0"+mode)*Math.sin(2*Math.PI*fsweep*eval("par"+mode)/1E3/3E8/eval("mini"+mode)));						hidasita=new realimg(0,Math.sin(2*Math.PI*fsweep*eval("par"+mode)/1E3/3E8/eval("mini"+mode))/eval("Z0"+mode));						Fmidium=new mat4x4(cosita,migiue,hidasita,cosita);				//MicroStrip						break;				case 6: tansita=new realimg(0,-1/(eval("Z0"+mode)*Math.tan(2*Math.PI*fsweep*eval("par"+mode)/1E3/3E8/eval("mini"+mode))));						Fmidium=new mat4x4(comone,comzero,tansita,comone);				//ShortStub						break;				case 7:	cotsita=new realimg(0,Math.tan(2*Math.PI*fsweep*eval("par"+mode)/1E3/3E8/eval("mini"+mode))/eval("Z0"+mode));						Fmidium=new mat4x4(comone,comzero,cotsita,comone);				//OpenStub						break;				}			if(mode==1)Fmiddle=Fmidium;			else if(mode>1)Fmiddle=comatimes(Fmiddle,Fmidium);		}		Ftotal=comatimes(comatimes(FXs,Fmiddle),FXL);			//すべてのF行列の積		dataS21[cnt]=FtoS(Ftotal,Rs,RL,2);		dataS11[cnt]=FtoS(Ftotal,Rs,RL,1);		if(dataS21[cnt] < -FlatS)	dataS21[cnt]=-FlatS;		//小さすぎたらフラットにする		if(dataS11[cnt] < -FlatS)	dataS11[cnt]=-FlatS;	}}function CalcSparaTest(){	var mother;	var fsweep;	var cnt;	var objTextarea = document.getElementsByName('tarea')[0]; 	dataS21 = new Array(point);	dataS11 = new Array(point);	var comzero=new realimg(0,0);	//複素数の0	var comone=new realimg(1,0);	//複素数の1	var Rs=new realimg(parseFloat(document.form1.Rs.value), 0); //Rsの読み込み	var Xs=new realimg(0, parseFloat(document.form1.Xs.value)); //Xsの読み込み Xsの単位はオーム	var FXs=new mat4x4(comone,Xs,comzero,comone);		//直列リアクタンスXsのF行列化	var RL=new realimg(parseFloat(document.form1.RL.value), 0); //RLの読み込み	var XL=new realimg(0, parseFloat(document.form1.XL.value)); //XLの読み込み XLの単位はオーム	var FXL=new mat4x4(comone,XL,comzero,comone);		//直列リアクタンスXLのF行列化		var Ftotal;	var Fleft;	var Fmiddle;	var Fright;	var Fmatch;	var iXLS;	var iXCP;	for(cnt=0; cnt<=point; cnt++){			fsweep=fstart+cnt*(fstop-fstart)/point;		if(fsweep==0)fsweep=1/1E3;				iXLS=new realimg(0, 2*Math.PI*fsweep*8.22/1E9);		iXCP=new realimg(0, -1E12/(2*Math.PI*fsweep*3.59));				Fleft=new mat4x4(comone,iXLS,comzero,comone);		Fmiddle=new mat4x4(comone,comzero,RXtoGB(iXCP),comone);		Ftotal=comatimes(Fleft,Fmiddle);		Ftotal=comatimes(FXs,comatimes(comatimes(Fleft,Fmiddle),FXL));		dataS21[cnt]=FtoS(Ftotal,Rs,RL,2);		dataS11[cnt]=FtoS(Ftotal,Rs,RL,1);		if(dataS21[cnt] < -FlatS)	dataS21[cnt]=-FlatS;		//小さすぎたらフラットにする		if(dataS11[cnt] < -FlatS)	dataS11[cnt]=-FlatS;	}}function checkf(){	var a1=new realimg(1,0);	var a2=new realimg(0,51.6478);	var a3=new realimg(0,0);	var a4=new realimg(1,0);		var b1=new realimg(1,0);	var b2=new realimg(0,0);	var b3=new realimg(0,0.0225566);	var b4=new realimg(1,0);	var A=new mat4x4(a1,a2,a3,a4);	var B=new mat4x4(b1,b2,b3,b4);	var C=comatimes(A,B);	//	document.formTest.test.value=0;//	document.formTest.test2.value=0;	}//-----------------------------------------------------//-----------------------------------------------------//-----------------------------------------------------//-----------------------------------------------------//-----------------------------------------------------function Part0(zin){	return zin;}function Part1(zin,Wpar,Z0w,mode){		//直列L	modeは色選択用（つまりabcのいずれかかを示している）	wpar=new realimg(0,2*Math.PI*freq*Wpar/1E9/50);	var zout=ZseriZ(zin,wpar);		//zinとzoutをUVに変換	var UVin=RXtoUV(zin)	var UVout=RXtoUV(zout)		//UV座標からインダクタンスカーブ円を生成する	var Curv=ThreePtoCurv(UVin,UVinfi);		//Curv上のUVin点,UVout点の角度を求める	var Ang=ANG2(UVin,UVout,Curv);	//カーブをプロット	plotOneCurv(Curv,Ang,false,mode);		return zout;}function Part2(zin,Wpar,Z0w,mode){		//直列C	wpar=new realimg(0,-1/(2*Math.PI*freq*Wpar/1E12)/50);	var zout=ZseriZ(zin,wpar);	//zinとzoutをUVに変換	var UVin=RXtoUV(zin)	var UVout=RXtoUV(zout)		//UV座標からインダクタンスカーブ円を生成する	var Curv=ThreePtoCurv(UVin,UVinfi);		//Curv上のUVin点,UVout点の角度を求める	var Ang=ANG2(UVin,UVout,Curv);		//カーブをプロット	plotOneCurv(Curv,Ang,true,mode);	return zout;}function Part3(zin,Wpar,Z0w,mode){		//並列L	wpar=new realimg(0,2*Math.PI*freq*Wpar/1E9/50);	var zout=ZparaZ(zin,wpar);		//出力インピーダンスの計算		//zinとzoutをUVに変換	var UVin=RXtoUV(zin)	var UVout=RXtoUV(zout)		//UV座標からコンダクタンスカーブ円を生成する	var Curv=ThreePtoCurv(UVin,UVzero);		//Curv上のUVin点,UVout点の角度を求める	var Ang=ANG2(UVin,UVout,Curv);	//カーブをプロット	plotOneCurv(Curv,Ang,true,mode);			return zout;}function Part4(zin,Wpar,Z0w,mode){		//並列C	wpar=new realimg(0,-1/(2*Math.PI*freq*Wpar/1E12)/50);	var zout=ZparaZ(zin,wpar);		//出力インピーダンスの計算		//zinとzoutをUVに変換	var UVin=RXtoUV(zin)	var UVout=RXtoUV(zout)		//UV座標からコンダクタンスカーブ円を生成する	var Curv=ThreePtoCurv(UVin,UVzero);		//Curv上のUVin点,UVout点の角度を求める	var Ang=ANG2(UVin,UVout,Curv);		//カーブをプロット	plotOneCurv(Curv,Ang,false,mode);			return zout;}function FindMSLzout(zin,Z0w,sita,MSLcurv){	var zinw=new realimg(zin.re*Z0/Z0w,zin.im*Z0/Z0w);	//ZinをZ0wで規格化	var MSLcurvw=FindMSLcurv(1,zinw);	var UVinw=RXtoUV(zinw);//	var Wcurv=new positAR(0,Math.sqrt(pow2(UVinw.re)+pow2(UVinw.im)));	var UVoutw=mslUVout(UVinw,MSLcurvw,sita);	var zoutw=UVtoRX(UVoutw);	zout=new realimg(zoutw.re*Z0w/Z0,zoutw.im*Z0w/Z0);//	document.formTest.test.value=round2(zin.im*Z0) + "   " + round2(zinw.im*Z0w);	return zout;}function getElementIdOfK(minidisp,modeK,mini){	switch(modeK){		case 1: minidisp=document.getElementById("k1");				mini1=mini;				break;		case 2: minidisp=document.getElementById("k2");				mini2=mini;				break;				case 3: minidisp=document.getElementById("k3");				mini3=mini;				break;	}	return minidisp;}function Part5(zin,Wpar,Z0w,mode){		//マイクロストリップライン	var MSLcurv=FindMSLcurv(Z0w/Z0,zin);	var mini=CalcLamdaE(Z0w);		//波長短縮率の計算//	document.form1.lamdag.value=3E8/freq*mini*1000;	var minidisp;	minidisp=getElementIdOfK(minidisp,mode,mini);	//波長短縮率をそれぞれの窓に表示	minidisp.innerHTML=round2(mini);	var sita=4*Math.PI*freq*Wpar/(3E11*mini);		//伝送線路長から回転角θをもとめる	var zout=FindMSLzout(zin,Z0w,sita,MSLcurv);	var UVin=RXtoUV(zin);	//zinとzoutをUVに変換	var UVout=RXtoUV(zout);	var Ang=ANG2(UVin,UVout,MSLcurv);	//Curv上のUVin点,UVout点の角度を求める	plotOneCurv(MSLcurv,Ang,false,mode);	//カーブをプロット	return zout;}function Part6(zin,Wpar,Z0w,mode){		//ショートスタブ	var UVin=RXtoUV(zin);	//zinをUV形式に変換	var Curv=ThreePtoCurv(UVin,UVzero);		//UV座標からコンダクタンスカーブ円を生成する	var mini=CalcLamdaE(Z0w);				//波長短縮率の計算	var minidisp;	minidisp=getElementIdOfK(minidisp,mode,mini);	//波長短縮率をそれぞれの窓に表示	minidisp.innerHTML=round2(mini);	wpar= new realimg(0,Z0w/Z0*Math.tan(2*Math.PI*freq/(3E8*mini)*Wpar/1000));	zout=ZparaZ(zin,wpar);	UVout=RXtoUV(zout);//	var UVout=mslUVout(UVin,Curv,-sita)//初期位置、円、回転角より出力位置を求める//	var zout=UVtoRX(UVout);	//Curv上のUVin点,UVout点の角度を求める	var Ang=ANG2(UVin,UVout,Curv);	//カーブをプロット	plotOneCurv(Curv,Ang,true,mode);	return zout;}function Part7(zin,Wpar,Z0w,mode){		//オープンスタブ	var UVin=RXtoUV(zin);	//zinをUV形式に変換	var Curv=ThreePtoCurv(UVin,UVzero);		//UV座標からコンダクタンスカーブ円を生成する	var mini=CalcLamdaE(Z0w);				//波長短縮率の計算		var minidisp;	minidisp=getElementIdOfK(minidisp,mode,mini);	//波長短縮率をそれぞれの窓に表示	minidisp.innerHTML=round2(mini);		wpar= new realimg(0,-Z0w/Z0/Math.tan(2*Math.PI*freq/(3E8*mini)*Wpar/1000));	zout=ZparaZ(zin,wpar);	UVout=RXtoUV(zout);	//Curv上のUVin点,UVout点の角度を求める	var Ang=ANG2(UVin,UVout,Curv);	//カーブをプロット	plotOneCurv(Curv,Ang,false,mode);		return zout;}//2点をプロットfunction plotOnePoint(pt,PointColor){			//1点プロットする関数	switch(PointColor){		case 1: ctx.fillStyle = 'rgba(204, 0, 0, 0.7)'; break;		//Za点		case 2: ctx.fillStyle = 'rgba(0, 204, 0, 0.7)'; break;		//Zb点		case 3: ctx.fillStyle = 'rgba(0, 0, 204, 0.7)'; break;		//Zc点		case 4: ctx.fillStyle = 'rgba(0, 204, 204, 0.7)'; break;		//Zs点		case 5: ctx.fillStyle = 'rgba(204, 204, 0, 0.7)'; break;		//ZLk点	}	ctx.beginPath();	ctx.arc(Spox+Srad*pt.uu, Spoy-Srad*pt.vv, 5, 0, 2*Math.PI, false);	ctx.fill();}  //------以下、プロット関数-----------------------------------function plotOneCurv(Curv,Ang,CurvDir,CurvColor){		//ひとつのカーブを描く//  ctx.clearRect(0, 0, 2*Spox, 2*Spoy);		//いったん画面消去//	ctx.drawImage(img,SmithX,SmithY);			//背景のSmithチャート描画	//カラー選択	switch(CurvColor){		case 1: ctx.strokeStyle = 'rgba(204, 0, 0, 0.7)'; break;		case 2: ctx.strokeStyle = 'rgba(0, 204, 0, 0.7)'; break;		case 3: ctx.strokeStyle = 'rgba(0, 0, 204, 0.7)'; break;	}	//第１カーブのプロット　1周版	//	ctx.lineWidth = 2;//	ctx.beginPath();//	ctx.arc(Spox+Srad*Curv.am, Spoy, Srad*Curv.ra, 0, Math.PI*2, CurvDir);//	ctx.stroke();		//第１カーブのプロット	ctx.lineWidth = 4;	ctx.beginPath();	ctx.arc(Spox+Srad*Curv.am, Spoy, Srad*Curv.ra, Ang.start, Ang.finish, CurvDir);	ctx.stroke();}function getBasicParam(){	freq=parseFloat(document.form1.Freq.value)*1E6;		//周波数を取得	Z0=parseFloat(document.form1.Z0.value);		//特性インピーダンス}function ClearSpara(){		//Sパラをクリアする関数	var cnt;		dataS21 = new Array(point);	dataS11 = new Array(point);		for(cnt=0; cnt<=point; cnt++){		dataS21[cnt]=-1000;		//-1000dB		dataS11[cnt]=-1000;		//-1000デシベル	}}