回路図

抵抗やなどの部品(描画関数)を作って,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;

);

< 戻る >