つるまきばね
2点A,Bで指定した方向につるまきばねを描きます。一方の端点をAにします。ばねの他方の端点の位置を,関数 Spring()の戻り値とします。これを利用して,端点に錘を表す円などを描くことができます。
作図例
ばねの自然長と伸縮:フックの法則の説明図
配置のための点はCinderellaの作図ツールでとっておきます。
p1=Spring("1",A,B,16,6);
Circledata("1",[p1+[0.2,0],p1]);
p2=Spring("2",C,D,16,12);
Circledata("2",[p2+[0.2,0],p2]);
Listplot("3",[E,F,G,H,E],["nodisp"]);
Hatchdata("1",["i"],[["sg3"]]);
Listplot([E,F]);
Listplot([K,L],["do"]);
Letter([L,"s3","自然長",M,"c","F",N,"c","F"]);
Arrowdata("1",[p1+[0.2,0],p1-[1,0]],["dr,3"]);
Arrowdata("2",[p2+[0.2,0],p2+[1,0]],["dr,3"]);
直列につなぐ
p1=Spring("1",A,B,6);
p2=Spring("2",p1,B,8);
Circledata("1",[p2-[0,0.2],p2]);
Listplot("1",[C,D,E,F,C],["nodisp"]);
Hatchdata("1",["i"],[["sg1"]]);
Listplot([C,D]);
Shade(["cr1"],["Color=[1,1,0,0]"]);
直列と並列につなぐ
p1=Spring("1",A,B,6);
p2=p1-[1,0];
p3=p1+[1,0];
Listplot("1",[p2,p3]);
p4=p2-[0,4];
p5=p3-[0,4];
p6=Spring("2",p2,p4,6);
p7=Spring("3",p3,p5,6);
Listplot("2",[p6,p7]);
p8=(p6+p7)/2;
p9=p8-[0,1];
Listplot("3",[p8,p9]);
Circledata("1",[p9-[0,0.2],p9]);
Listplot("4",[C,D,E,F,C],["nodisp"]);
Hatchdata("1",["i"],[["sg4"]]);
Listplot([C,D]);
Shade(["cr1"],["Color=[1,1,0,0]"]);
斜面に置く
ev=(A-B)/|A-B|;
nv=gauss(complex(ev)*i);
C.xy=A.xy+0.28*nv;
p1=A.xy+nv;
p2=p1+0.5*ev;
p3=A.xy+0.5*ev;
Listplot("1",[A,B,D]);
Anglemark("1",[D,B,A],["Expr=2,\theta"]);
p4=Spring("1",C,C.xy-ev,8);
Circledata("1",[p4-0.28*ev,p4]);
Listplot("4",[A,p1,p2,p3,A],["nodisp"]);
Hatchdata("1",["i"],[["sg4"]]);
Listplot("2",[A,p1]);
Shade(["cr1"],["Color=[1,0,1,0]"]);
ばねを描く関数
n : 巻き回数(偶数): expand 伸び率 size:大きさ
Spring(name,pt1,pt2,n):=Spring(name,pt1,pt2,n,10,1);
Spring(name,pt1,pt2,n,expand):=
Spring(name,pt1,pt2,n,expand,1);
Spring(name,pt1,pt2,n,expand,size):=(
regional(sz,th,ev,start,end,pd);
sz=size*0.2;
th=arctan2(pt2-pt1);
ev=(pt2-pt1)/|pt2-pt1|;
start=(-n-0.875)*pi;
end=(n+0.125)*pi;
Paramplot("coil"+name,
Assign("sz*[sin(t)+t/ex,cos(t+pi/4)+t/ex]",
["sz",sz,"ex",expand]),Assign("t=[a,b]",
["a",start,"b",end]),["Num=200","nodisp"]);
Rotatedata("coil"+name,"gpcoil"+name,th-pi/4,
["nodisp"]);
pd=parse("rtcoil"+name);
Listplot("coil1"+name,[pd_1-sz*ev,pd_1],
["nodisp"]);
Listplot("coil2"+name,[pd_(-1),pd_(-1)+sz*ev],
["nodisp"]);
Joincrvs("coil"+name,["sgcoil1"+name,
"rtcoil"+name,"sgcoil2"+name],["nodisp"]);
pd=parse("joincoil"+name);
tr=pt1-pd_1;
Translatedata("coil"+name,"joincoil"+name,tr);
pd=parse("trcoil"+name);
pd_(-1);
);