• 検索結果がありません。

Plain_Basic を使ったプログラミング例

ドキュメント内 Microsoft Word - CChap00.doc (ページ 57-60)

= 垂心:  r

6.4 Plain_Basic を使ったプログラミング例

========================================================

10 rem 三辺の長さから求める三角形の諸量、Triang1 20 data 350,400,450

30 defdbl L 40 read La,Lb,Lc

50 rem --- 面積 F 60 S=(La+Lb+Lc)/2

70 F=sqr(S*(S-La)*(S-Lb)*(S-Lc)) 80 print "面積 F= ";F

90 rem --- 頂角 A,B,C 100 SS=(La*La+Lb*Lb+Lc*Lc)/2

110 sinA=2*F/(Lb*Lc):cosA=(SS-La*La)/(Lb*Lc) 120 sinB=2*F/(Lc*La):cosB=(SS-Lb*Lb)/(Lc*La) 130 sinC=2*F/(La*Lb):cosC=(SS-Lc*Lc)/(La*Lb) 140 angA=atn2(sinA,cosA):print "angA= ";angA 150 angB=atn2(sinB,cosB):print "angB= ";angB 160 angC=atn2(sinc,cosc):print "angC= ";angC 170 print "angA+angB+angC = ";(angA+angB+angC) 180 rem --- 内接円半径 Ri 190 Ri=F/S: print "内接円半径 Ri= ";Ri

200 rem --- 外接円半径 Ro 210 Ro=La*Lb*Lc/(4*F): print "外接円半径 Ro= ";Ro 220 rem --- 作図

230 dperas

240 Xb= -La/2:Yb=-Lc/2:dpmove Xb,Yb 250 Xc=Xb+La:Yc=Yb:dpdraw Xc,Yc 260 Xa=Xb+Lc*cosB:Ya=Yb+Lc*sinB 270 dpdraw Xa,Ya: dpdraw Xb,Yb 280 dptext Xa,Ya, "A"

290 dptext Xb,Yb, "B"

300 dptext Xc,Yc, "C"

run

面積 F= 67082.0393249937 angA= 48.1896851042214 angB= 58.4118644947988 angC= 73.3984504009798 angA+angB+angC = 180

内接円半径 Ri= 111.803398874989 外接円半径 Ro= 234.787137637478

========================================================

10 rem 三辺の長さから求める三角形の諸量、Triang2 20 rem 内接円と外接円

30 dperas

40 data 60, 160, -175, -225, 175, -225 50 read Xa,Ya,Xb,Yb,Xc,Yc

60 dpmark Xa,Ya,3: dptext Xa,Ya, "A"

70 dpmark Xb,Yb,3: dptext Xb,Yb, "B"

80 dpmark Xc,Yc,3: dptext Xc,Yc, "C"

90 rem --- 以上は入力データ

100 print "--- 三辺の長さ La, Lb, Lc ---"

110 defdbl L

120 La=sqr((Xb-Xc)^2+(Yb-Yc)^2):print "La=";La 130 Lb=sqr((Xc-Xa)^2+(Yc-Ya)^2):print "Lb=";Lb 140 Lc=sqr((Xa-Xb)^2+(Ya-Yb)^2):print "Lc=";Lc 150 dpmove Xa,Ya

160 dpdraw Xb,Yb 170 dpdraw Xc,Yc 180 dpdraw Xa,Ya

190 rem --- 200 S=(La+Lb+Lc)/2

210 F=sqr(S*(S-La)*(S-Lb)*(S-Lc)) 220 SS=(La*La+Lb*Lb+Lc*Lc)/2 230 defdbl K

240 rem --- 内接円 250 K1=La/(2*s):K2=Lb/(2*s):k3=Lc/(2*s) 260 Xi=K1*Xa+K2*Xb+K3*Xc

270 Yi=K1*Ya+K2*Yb+K3*Yc

280 Ri=F/S: print "内接円半径 Ri= ";Ri 290 dpmark Xi,Yi,6:dptext Xi,Yi,"Ri"

300 dpcirc Xi,Yi,Ri

310 rem --- 外接円 320 K1=La*La*(SS-La*La)/(8*F*F)

330 K2=Lb*Lb*(SS-Lb*Lb)/(8*F*F) 340 K3=Lc*Lc*(SS-Lc*Lc)/(8*F*F) 350 Xo=K1*Xa+K2*Xb+K3*Xc 360 Yo=K1*Ya+K2*Yb+K3*Yc

370 Ro=La*Lb*Lc/(4*F): print "外接円半径 Ro= ";Ro 380 dpmark Xo,Yo,6:dptext Xo,Yo,"Ro"

390 dpcirc Xo,Yo,Ro run

--- 三辺の長さ La, Lb, Lc --- La= 350

Lb= 401.808412057289 Lc= 451.054320453756

内接円半径 Ri= 112.024420042262 外接円半径 Ro= 235.373273055978

========================================================

10 rem 三辺の長さから求める三角形の諸量、Triang3 20 rem 重心と垂心

30 dperas

40 data 60, 160, -175, -225, 175, -225 50 read Xa,Ya,Xb,Yb,Xc,Yc

60 dpmark Xa,Ya,3: dptext Xa,Ya, "A"

70 dpmark Xb,Yb,3: dptext Xb,Yb, "B"

80 dpmark Xc,Yc,3: dptext Xc,Yc, "C"

90 rem --- 以上は入力データ

100 print "--- 三辺の長さ La, Lb, Lc ---"

110 defdbl L

120 La=sqr((Xb-Xc)^2+(Yb-Yc)^2):print "La=";La 130 Lb=sqr((Xc-Xa)^2+(Yc-Ya)^2):print "Lb=";Lb 140 Lc=sqr((Xa-Xb)^2+(Ya-Yb)^2):print "Lc=";Lc 150 dpmove Xa,Ya

160 dpdraw Xb,Yb 170 dpdraw Xc,Yc 180 dpdraw Xa,Ya

190 rem --- 200 S=(La+Lb+Lc)/2

210 F=sqr(S*(S-La)*(S-Lb)*(S-Lc)) 220 SS=(La*La+Lb*Lb+Lc*Lc)/2 230 defdbl K

240 rem --- 重心 250 Xg=(Xa+Xb+Xc)/3

260 Yg=(Ya+Yb+Yc)/3 270 print "重心= ";Xg,Yg

280 dpmark Xg,Yg,6:dptext Xg,Yg,"G"

290 rem --- 垂心 300 K1=(SS-Lb*Lb)*(SS-Lc*Lc)/(4*F*F) 310 K2=(SS-Lc*Lc)*(SS-La*La)/(4*F*F) 320 K3=(SS-La*La)*(SS-Lb*Lb)/(4*F*F) 330 Xh=K1*Xa+K2*Xb+K3*Xc

340 Yh=K1*Ya+K2*Yb+K3*Yc 350 print "垂心= ";Xh,Yh

360 dpmark Xh,Yh,6:dptext Xh,Yh,"H"

run

--- 三辺の長さ La, Lb, Lc --- La= 350

Lb= 401.808412057289 Lc= 451.054320453756 重心= 20 -96.6666666666667 垂心= 60 -154.805194805195

========================================================

10 rem 三頂点座標から求める三角形の諸量、Triang4 20 rem 慣性モーメントと主軸の計算

30 dperas

40 data 125, 220, -260, -170, 40, -240 50 read Xa,Ya,Xb,Yb,Xc,Yc

60 rem --- 以上は入力データ 70 dpmark Xa,Ya,3: dptext Xa,Ya, "A"

80 dpmark Xb,Yb,3: dptext Xb,Yb, "B"

90 dpmark Xc,Yc,3: dptext Xc,Yc, "C"

100 rem --- 面積 110 F=((Xc-Xb)*(Ya-Yb)-(Yc-Yb)*(Xa-Xb))/2 120 print "面積= ";F

130 dpmove Xa,Ya 140 dpdraw Xb,Yb 150 dpdraw Xc,Yc

160 dpdraw Xa,Ya

170 rem --- 重心 180 Xg=(Xa+Xb+Xc)/3

190 Yg=(Ya+Yb+Yc)/3 200 print "重心= ";Xg,Yg

210 dpmark Xg,Yg,6:dptext Xg,Yg,"G"

220 rem --- 慣性モーメント 230 defdbl J:dim J[2,2]

240 J[1,1]=(Xa*Xa+Xb*Xb+Xc*Xc)*F/12 + 3*F*Xg*Xg/4 250 J[1,2]=(Xa*Ya+Xb*Yb+Xc*Yc)*F/12 + 3*F*Xg*Yg/4 260 J[2,2]=(Ya*Ya+Yb*Yb+Yc*Yc)*F/12 + 3*F*Yg*Yg/4 270 print "Jxx,Jxy,Jyy=";J[1,1],J[1,2],j[2,2]

280 rem --- 主軸の計算 290 J0=(J[1,1]+J[2,2])/2

300 Jx=(J[1,1]-J[2,2])/2 310 Jy=J[1,2]

320 Sign=1:if Jx<0 then Sign=-1 330 Jr=sqr(Jx*Jx + Jy*Jy) 340 Ang=atn2(Sign*Jy,Sign*Jx)/2 350 print "主軸の回転角度=";Ang 360 J11=J0+Sign*Jr

370 J22=J0-Sign*Jr

380 print "主軸回りの慣性モーメント=";J11,J22 390 rem --- 主軸の作図 400 ccc=cos(Ang):sss=sin(Ang)

410 X1=Xg+300*ccc:Y1=Yg+300*sss:dpmove X1,Y1 420 X1=Xg-300*ccc:Y1=Yg-300*sss:dpdraw X1,Y1 430 X1=Xg+300*sss:Y1=Yg-300*ccc:dpmove X1,Y1 440 X1=Xg-300*sss:Y1=Yg+300*ccc:dpdraw X1,Y1 run

面積= 71975

重心= -31.6666666666667 -63.3333333333333 Jxx,Jxy,Jyy= 562904479.166667

480733020.833333 1025643750 主軸の回転角度= -32.1495908225377

主軸回りの慣性モーメント= 260761091.769097 1327787137.39757

========================================================

10 rem 多角形の幾何学的諸量 "PcSection1"

20 rem --- 頂点座標を左回りに準備する

30 dim P[2,20]: REM reserve an array for points 40 data -0.665, 0.00, -0.665, -0.17, -0.385, -0.17 50 data -0.085, -0.27, -0.085, -0.63, -0.205, -0.75 60 data -0.205, -1.00, 0.205, -1.00, 0.205, -0.75 70 data 0.085, -0.63, 0.085, -0.27, 0.385, -0.17 80 data 0.665, -0.17, 0.665, 0.00, 9000 / 90 read P

100 rem: --- 頂点数を勘定する 110 Np=1

120 IF P[1,NP+1]=9000 THEN GOTO 140 130 NP=NP+1: goto 120

140 P[1,NP+1]=P[1,1]: P[2,NP+1]=P[2,1]

150 rem --- データ確認の作図をする 160 dperas: dpwind 0,-0.5,2 170 dpmove P[1,1],P[2,1]

180 for K=2 to NP+1 190 dpdraw P[1,K],P[2,K]

200 next

210 rem --- 三角形要素の集合を計算する 220 defdbl I,J

230 for K=1 to NP

240 dA=(P[1,K]*P[2,K+1]-P[2,K]*P[1,K+1])/2 250 Area=Area+dA

260 dGx=(P[1,K]+P[1,K+1])/3:Gx=Gx+dA*dGx 270 dGy=(P[2,K]+P[2,K+1])/3:Gy=Gy+dA*dGy

280 dIxx=(P[1,K]*P[1,K]+P[1,K+1]*P[1,K+1])*dA/12 290 dIxx=dIxx+3*dA*dGx*dGx/4: Ixx=Ixx+dIxx 300 dIyy=(P[2,K]*P[2,K]+P[2,K+1]*P[2,K+1])*dA/12 310 dIyy=dIyy+3*dA*dGy*dGy/4: Iyy=Iyy+dIyy 320 dIxy=(P[1,K]*P[2,K]+P[1,K+1]*P[2,K+1])*dA/12 330 dIxy=dIxy+3*dA*dGx*dGy/4: Ixy=Ixy+dIxy 340 next K

350 rem --- 重心位置

360 Xg=Gx/Area:Yg=Gy/Area:rem center of gravity 370 print "Xg, Yg = ";Xg,Yg

380 dpmark Xg,Yg,3:dptext Xg,Yg, "G"

390 rem --- 断面積、慣性モーメント 400 print "Area = ";Area

410 Ixx=Ixx-Area*Xg*Xg 420 Iyy=Iyy-Area*Yg*Yg 430 Ixy=Ixy-Area*Xg*Yg

440 print "Ixx,Ixy,Iyy=";Ixx,Ixy,Iyy 450 rem --- 主軸の計算 460 J0=(Ixx+Iyy)/2

470 Jx=(Ixx-Iyy)/2 480 Jy=Ixy

490 Sign=1:if Jx<0 then Sign=-1 500 Jr=sqr(Jx*Jx + Jy*Jy)

510 Ang=atn2(Sign*Jy,Sign*Jx)/2 520 print "主軸の回転角度=";Ang 530 J11=J0+Sign*Jr

540 J22=J0-Sign*Jr

550 print "主軸回りの慣性モーメント=";J11,J22 560 rem --- 主軸の作図 570 ccc=cos(-Ang):sss=sin(-Ang)

580 X1=Xg+ccc:Y1=Yg+sss:dpmove X1,Y1 590 X1=Xg-ccc:Y1=Yg-sss:dpdraw X1,Y1 600 X1=Xg+sss:Y1=Yg-ccc:dpmove X1,Y1 610 X1=Xg-sss:Y1=Yg+ccc:dpdraw X1,Y1 run

rest variables ignored

Xg, Yg = 0 -0.361717557251908 Area = 0.4716

Ixx,Ixy,Iyy= 0.03641561 2.16840434497101E-19 0.0516399687786259

主軸の回転角度= -8.16063382709388E-16 主軸回りの慣性モーメント= 0.03641561 0.0516399687786259

========================================================

_______________________________________________________________________________

ドキュメント内 Microsoft Word - CChap00.doc (ページ 57-60)