回路図
抵抗やなどの部品(描画関数)を作って,RLC回路図などを描きます。
作図例
まず,作図例を示しましょう。いずれも,Cinderellaの作図ツールでいくつかの点を作図し,その間を結んでいく形で描きます。
直列RLC回路
AC("1",A,F);
p1=Resistor("1",B,C);
p2=Solenoide("1",C,D);
p3=Capacitor("1",D,E);
Listplot("1",[A,B]);
Listplot("2",[E,F]);
Letter([p1,"n","R",p2,"n","L",p3,"n","C"]);
並列RLC回路
AC("1",A,B);
p1=Resistor("1",C,H);
p2=Solenoide("1",D,G);
p3=Capacitor("1",E,F,0.8);
Listplot("1",[B,E]);
Listplot("2",[A,F]);
Letter([p1,"c","R",p2,"c","L",p3,"e","C"]);
ブリッジ回路
Battery("1",F,A);
p1=Resistor("1",B,C);
p2=Resistor("2",C,D);
p3=Resistor("3",B,E);
p4=Resistor("4",E,D);
p5=Resistor("5",C,E);
Listplot("1",[A,B]);
Listplot("2",[D,F]);
Expr([p1,"c","\rm{R}_1",p2,"c","\rm{R}_2",p3,"c",
"\rm{R}_3",p4,"c","\rm{R}_4",p5,"c","\rm{R}_5"]);
可変抵抗とダイオードを使った回路
p1=Battery("1",D,C);
p2=Battery("2",E,H);
Diode("1",B,C);
VResistor("1",F,G);
p3=Resistor("1",H,A);
Listplot("1",[A,B]);
Listplot("2",[D,E]);
Letter([p1,"c","6V",p2,"c","12V",p3,"c","$4\Omega$"]);
スイッチをつけた回路
p1=Battery("1",A,B);
SW("1",B,C,0);
p2=Capacitor("1",C,D);
p3=Resistor("1",D,A);
Letter([p1,"sw","2V"]);
電流計,電圧計をつけた回路
p1=Battery("1",A,B);
p2=Resistor("1",B,C);
Meter("1",C,D,"A");
Meter("2",D,G,"V");
p3=Resistor("2",E,F);
Listplot([D,E]);
Listplot([F,A]);
Letter([p1,"sw","20V",p2,"n","400$\Omega$",p3,"e","R"]);
電球をつけた回路
Listplot([A,B,C]);
Listplot([D,G]);
Bulb("1",D,E);
Bulb("2",G,F);
Listplot([E,F]);
Listplot([H,K,L]);
Battery("1",L,M);
Resistor("1",A,M);
部品の作図
作図例で使った,部品を表示する関数です。
これらは Initialization スロットに書いておきます。
引数はいずれも共通で,name,2点の座標,サイズ(比率)です。
2点間を結ぶ線分の中点に部品を描いて2点間を結びます。
サイズはデフォルトを1として,0.5だとその半分になります。
戻り値は中央付近の座標で,記号を書くのに使います。
抵抗:Risistor()
Resistor(name,pt1,pt2):=Resistor(name,pt1,pt2,1);
Resistor(name,pt1,pt2,rt):=(
regional(ct,ev,nv,sz,p1,p2,p3,p4);
sz=rt*0.5;
ct=(pt1+pt2)/2;
i=complex([0,1]);
ev=(pt2-pt1)/|pt2-pt1|;
nv=gauss(complex(ev)*i);
p1=ct+sz*ev+sz*0.5*nv;
p2=ct-sz*ev+sz*0.5*nv;
p3=ct-sz*ev+sz*0.5*(-nv);
p4=ct+sz*ev+sz*0.5*(-nv);
Listplot("res"+name,[p1,p2,p3,p4,p1]);
Listplot("res1"+name,[pt1,ct-sz*ev]);
Listplot("res2"+name,[pt2,ct+sz*ev]);
ct+sz*nv;
);
可変抵抗:VReistor()
VResistor(name,pt1,pt2):=VResistor(name,pt1,pt2,1);
VResistor(name,pt1,pt2,rt):=(
regional(ct,ev,nv,sz,p1,p3);
sz=rt*0.5;
ct=(pt1+pt2)/2;
i=complex([0,1]);
ev=(pt2-pt1)/|pt2-pt1|;
nv=gauss(complex(ev)*i);
p1=ct+sz*ev+sz*nv;
p3=ct-sz*ev-sz*nv;
Resistor("v"+name,pt1,pt2,rt);
Arrowdata("vres"+name,[p3,p1]);
ct+sz*nv;
);
コイル:Inductor()
Inductor(name,pt1,pt2):=Inductor(name,pt1,pt2,1);
Inductor(name,pt1,pt2,rt):=(
regional(sz,th,ct,ev,nv);
sz=rt*0.1;
th=arctan2(pt2-pt1);
ct=(pt1+pt2)/2;
ev=(pt2-pt1)/|pt2-pt1|;
nv=gauss(complex(ev)*i);
Paramplot("Ind1"+name,Assign("[-3*sz+sz*cos(t),sz*2*sin(t)]",["sz",sz]),"t=[0,pi]",["nodisp"]);
Paramplot("Ind2"+name,Assign("[-1*sz+sz*cos(t),sz*2*sin(t)]",["sz",sz]),"t=[0,pi]",["nodisp"]);
Paramplot("Ind3"+name,Assign("[sz+sz*cos(t),sz*2*sin(t)]",["sz",sz]),"t=[0,pi]",["nodisp"]);
Paramplot("Ind4"+name,Assign("[3*sz+sz*cos(t),sz*2*sin(t)]",["sz",sz]),"t=[0,pi]",["nodisp"]);
Joincrvs("Ind"+name,["gpInd1"+name,"gpInd2"+name,"gpInd3"+name,"gpInd4"+name],["nodisp"]);
Rotatedata("Ind"+name,"joinInd"+name,th,["nodisp"]);
Translatedata("Ind"+name,"rtInd"+name,ct);
Listplot("Ind1"+name,[pt1,ct-rt*0.4*ev]);
Listplot("Ind2"+name,[pt2,ct+rt*0.4*ev]);
ct+rt*0.5*nv;
);
コンデンサ:Capacitor()
Capacitor(name,pt1,pt2):=Capacitor(name,pt1,pt2,1);
Capacitor(name,pt1,pt2,rt):=(
regional(sz1,sz2,ct,ev,nv,p1,p2,p3,p4);
sz1=rt*0.5;
sz2=rt*0.15;
i=complex([0,1]);
ct=(pt1+pt2)/2;
ev=(pt2-pt1)/|pt2-pt1|;
nv=gauss(complex(ev)*i);
p1=ct+sz2*ev+sz1*nv;
p2=ct-sz2*ev+sz1*nv;
p3=ct-sz2*ev+sz1*(-nv);
p4=ct+sz2*ev+sz1*(-nv);
Listplot("cap"+name,[p1,p4]);
Listplot("cap1"+name,[p2,p3]);
Listplot("cap2"+name,[pt1,ct-sz2*ev]);
Listplot("cap3"+name,[pt2,ct+sz2*ev]);
ct+0.7*rt*nv;
);
交流電源:AC()
AC(name,pt1,pt2):=AC(name,pt1,pt2,1);
AC(name,pt1,pt2,rt):=(
regional(sz,ct,ev,nv);
sz=rt*0.5;
ct=(pt1+pt2)/2;
ev=(pt2-pt1)/|pt2-pt1|;
nv=gauss(complex(ev)*i);
Plotdata("ac"+name,Assign("rt/6*sin(4*pi/rt*x)",
"rt",rt),Assign("x=[-rt/4,rt/4]","rt",rt),
["nodisp"]);
Translatedata("ac"+name,"grac"+name,ct);
Circledata("ac"+name,[ct,ct+[0.5*rt,0]]);
Listplot("ac1"+name,[pt1,ct-sz*ev]);
Listplot("ac2"+name,[pt2,ct+sz*ev]);
ct+nv;
);
電池:Battery()
Battery(name,pt1,pt2):=Battery(name,pt1,pt2,1);
Battery(name,pt1,pt2,rt):=(
regional(sz1,sz2,ct,ev,nv,p1,p2,p3,p4);
sz1=rt*0.5;
sz2=rt*0.1;
i=complex([0,1]);
ct=(pt1+pt2)/2;
ev=(pt2-pt1)/|pt2-pt1|;
nv=gauss(complex(ev)*i);
p1=ct+sz2*ev+sz1*nv;
p2=ct-sz2*ev+2*sz2*nv;
p3=ct-sz2*ev+2*sz2*(-nv);
p4=ct+sz2*ev+sz1*(-nv);
Listplot("bat"+name,[p1,p4]);
Listplot("bat1"+name,[p2,p3],["dr,2"]);
Listplot("bat2"+name,[pt1,ct-sz2*ev]);
Listplot("bat3"+name,[pt2,ct+sz2*ev]);
ct+0.7*rt*nv;
);
ダイオード:Diode()
Diode(name,pt1,pt2):=Diode(name,pt1,pt2,1);
Diode(name,pt1,pt2,rt):=(
regional(sz1,sz2,ct,ev,nv,p1,p2,p3,p4);
sz=rt*0.3;
sz2=rt*0.25;
i=complex([0,1]);
ct=(pt1+pt2)/2;
ev=(pt2-pt1)/|pt2-pt1|;
nv=gauss(complex(ev)*i);
p1=ct+sz2*ev+sz*nv;
p2=ct-sz2*ev+sz*nv;
p3=ct-sz2*ev-sz*nv;
p4=ct+sz2*ev-sz*nv;
Listplot("dio"+name,[p1,p4]);
Listplot("dio1"+name,[p2,p3,(p1+p4)/2,p2]);
Listplot("dio2"+name,[pt1,pt2]);
ct+rt*nv;
);
スイッチ:SW()
戻り値は中点の座標です。
SW(name,pt1,pt2):=SW(name,pt1,pt2,1);
SW(name,pt1,pt2,rt):=(
regional(ct,ev,sz,p1,p2,p3);
sz=rt*0.4;
ct=(pt1+pt2)/2;
ev=(pt2-pt1)/|pt2-pt1|;
p1=ct-sz*ev;
p2=ct+sz*ev;
th=pi/6;
p3=p1+2*sz*[[cos(th),-sin(th)],[sin(th),cos(th)]]*ev;
Listplot("sw"+name,[p1,p3]);
Listplot("sw1"+name,[pt1,p1]);
Listplot("sw2"+name,[pt2,p2]);
ct;
);
計器:()
Meter(name,pt1,pt2,str):=Meter(name,pt1,pt2,str,1);
Meter(name,pt1,pt2,str,rt):=(
regional(ct,ev,sz,p1,p2,p3,p4);
sz=rt*0.3;
ct=(pt1+pt2)/2;
ev=(pt2-pt1)/|pt2-pt1|;
p1=ct-sz*ev;
p2=ct+sz*ev;
Circledata("met"+name,[ct,p1]);
Listplot("met1"+name,[pt1,p1]);
Listplot("met2"+name,[pt2,p2]);
Letter([ct,"c",str]);
ct;
);
電球:Bulb()
電球は水平だけにします。
Bulb(name,pt1,pt2):=Bulb(name,pt1,pt2,1);
Bulb(name,pt1,pt2,rt):=(
regional(sz,ct,ev,p1,p2,p3,p4);
sz=rt*0.3;
ct=(pt1+pt2)/2;
ev=(pt2-pt1)/|pt2-pt1|;
p1=ct+0.3*[cos(pi/4),sin(pi/4)];
p2=ct+0.3*[cos(3*pi/4),sin(3*pi/4)];
p3=ct+0.3*[cos(5*pi/4),sin(5*pi/4)];
p4=ct+0.3*[cos(7*pi/4),sin(7*pi/4)];
Circledata("bulb"+name,[ct,p1]);
Listplot("bulb1"+name,[p1,p3]);
Listplot("bulb2"+name,[p2,p4]);
Listplot("bulb3"+name,[pt1,ct-sz*ev]);
Listplot("bulb4"+name,[pt2,ct+sz*ev]);
ct;
);
< 戻る >