つるまきばね

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);

);

< 戻る >