三角形を描くプログラムです。 山中和義 2005/02/17 17:11:20 ├三角形の形状を求めるプログラム 山中和義 2005/02/17 17:55:32 │└辺a=3 もりの 2005/02/18 00:20:02 │ └歪み 山中和義 2005/02/18 09:47:19 │ └よくわからないのでプリンタ、ディスプレー... もりの 2005/02/18 13:15:25 │ └調整方法は、、、 山中和義 2005/02/18 14:38:34 │ └調整法ありがとうございます morino 2005/02/18 19:15:36 └使ってみました!ありがとうございます もりの 2005/02/17 20:37:23 ├!三角形の3辺を与えて、描画と形状を求める... 山中和義 2005/02/18 10:00:41 └続き 山中和義 2005/02/18 10:01:48
三角形を描くプログラムです。 山中和義 2005/02/17 17:11:20 ツリーへ
三角形を描くプログラムです。 |
返事を書く |
山中和義 2005/02/17 17:11:20 | |
!三角形の形状を求める SET WINDOW 0,640,0,480 !左下が原点。横がX、縦Y SET COLOR mode "NATIVE" !RGB指定 SET TEXT font "",12 !文字サイズ DIM x(3),y(3) !描画する三角形の頂点座標 INPUT PROMPT "三角形の三辺を入力してください。(例. 3,4,5) ": a,b,c SET TEXT COLOR 0 LET xx = 10 !表示位置 LET yy = 450 !三角形ができるか判定する。 ! 条件:a+b>cかつb+c>aかつc+a>bが成立する IF a+b>c AND b+c>a AND c+a>b THEN !各辺を表示する PLOT TEXT, AT xx,yy: "辺a="&STR$(a) PLOT TEXT, AT xx,yy-20: "辺b="&STR$(b) PLOT TEXT, AT xx,yy-40: "辺c="&STR$(c) !指定した三角形を描く LET scl = 200/a !比率。とりあえず。。。 LET csB = (c*c+a*a-b*b)/(2*c*a) !余弦定理 LET snB = SQR(1-csB*csB) !sinの2乗とcosの2乗の和は1 LET x(1) = 150 !座標を算出する。描画の原点 LET y(1) = 150 LET x(2) = a*scl+x(1) !真横に、辺a LET y(2) = y(1) LET x(3) = c*csB*scl+x(1) !縦上へ,辺b LET y(3) = c*snB*scl+y(1) SET LINE COLOR 0 PLOT LINES:x(1),y(1); x(2),y(2); x(3),y(3); x(1),y(1) !3辺を描く PLOT TEXT, AT (x(1)+x(2))/2,(y(1)-30): "辺a" !名称を描く PLOT TEXT, AT (x(2)+x(3))/2+10,(y(2)+y(3))/2: "辺b" PLOT TEXT, AT (x(3)+x(1))/2-40,(y(3)+y(1))/2: "辺c" !余弦定理より各角を求めて、表示する LET xx = 10 !表示位置 LET yy = 370 PLOT TEXT, AT xx,yy, USING "∠A=###.###": ACOS((b*b+c*c-a*a)/(2*b*c))*180/PI PLOT TEXT, AT xx,yy-20, USING "∠B=###.###": ACOS((c*c+a*a-b*b)/(2*c*a))*180/PI PLOT TEXT, AT xx,yy-40, USING "∠C=###.###": ACOS((a*a+b*b-c*c)/(2*a*b))*180/PI ELSE !a+b>cかつb+c>aかつc+a>bが成立しない。 PLOT TEXT, AT xx,yy: "三角形はできません。" END IF END |
├三角形の形状を求めるプログラム 山中和義 2005/02/17 17:55:32 ツリーへ
Re: 三角形を描くプログラムです。 |
返事を書く |
山中和義 2005/02/17 17:55:32 | |
三角形の形状を求めるプログラム !三角形の形状を求める INPUT PROMPT "三角形の3辺を入力してください。(例. 3,4,5) ":a,b,c PRINT "a=";a PRINT "b=";b PRINT "c=";c !三角形ができるか判定する。 ! 条件:a+b>cかつb+c>aかつc+a>bが成立する IF a+b>c AND b+c>a AND c+a>b THEN LET flg = 0 !正三角形 ! 条件:a=b=c IF a=b AND b=c THEN PRINT "正三角形です。" ELSE LET s$ = "" !直角三角形 ! 条件:∠A=90°または∠B=90°または∠C=90° IF ABS(b*b+c*c-a*a)<0.00001 THEN LET s$ = "∠Aが90°の直角" END IF IF ABS(c*c+a*a-b*b)<0.00001 THEN LET s$ = "∠Bが90°の直角" END IF IF ABS(a*a+b*b-c*c)<0.00001 THEN LET s$ = "∠Cが90°の直角" END IF !二等辺三角形 ! 条件:a=bまたはb=cまたはc=a IF a=b THEN LET s$ = "辺a=辺bの"&s$&"二等辺" END IF IF b=c THEN LET s$ = "辺b=辺cの"&s$&"二等辺" END IF IF c=a THEN LET s$ = "辺c=辺aの"&s$&"二等辺" END IF PRINT s$;"三角形です。" END IF ELSE ! 条件:a+b>cかつb+c>aかつc+a>bが成立しない PRINT "三角形ではありません。" END IF END |
│└辺a=3 もりの 2005/02/18 00:20:02 ツリーへ
Re: 三角形の形状を求めるプログラム |
返事を書く |
もりの 2005/02/18 00:20:02 | |
辺a=3 辺b=3 辺c=3 の場合実際印刷してみましたが・・・・ 辺 a=3.2 辺 b=4 辺 c=4 となり、正三角形とはなっていません。 なぜでしょうか? 対策は? |
│ └歪み 山中和義 2005/02/18 09:47:19 ツリーへ
Re: 辺a=3 |
返事を書く |
山中和義 2005/02/18 09:47:19 | |
歪み プリンタ、ディスプレイなどの点に対する扱いは、点が正方形かどうかで 決まります。縦横比です。 これをうまく調整すれば実寸で印刷などが可能だと思います。 ヘルプのプリンタ設定の項を参照してください。 |
│ └よくわからないのでプリンタ、ディスプレー... もりの 2005/02/18 13:15:25 ツリーへ
Re: 歪み |
返事を書く |
もりの 2005/02/18 13:15:25 | |
よくわからないのでプリンタ、ディスプレーの調整の仕方を教えていただけますか? 教材としては実寸で正確なものしかつかえませんので 画面で測っても打ち出しても 定規で測って正確なものしかつかえませんから |
│ └調整方法は、、、 山中和義 2005/02/18 14:38:34 ツリーへ
Re: よくわからないのでプリンタ、ディスプレー... |
返事を書く |
山中和義 2005/02/18 14:38:34 | |
調整方法は、、、 各辺の入力値をミリ単位とすると、(10なら10mmである) プログラムの十数行目 !指定した三角形を描く LET scl = 200/MAX(MAX(a,b),c) !比率。とりあえず。。。 LET csB = (c*c+a*a-b*b)/(2*c*a) !余弦定理 LET snB = SQR(1-csB*csB) !sinの2乗とcosの2乗の和は1 の、スケール用に設けた変数sclを LET scl = 3.65 と指定してください。 この値は私のPC(3.65)、プリンタ(4.053)での値です。 実際に表示、印刷して、定規で測って調整すれば実寸で表示、印字します。 現状のプログラムは、入力値にかかわらず一定の大きさの三角形を 描くようにしています。 |
│ └調整法ありがとうございます morino 2005/02/18 19:15:36 ツリーへ
Re: 調整方法は、、、 |
返事を書く |
morino 2005/02/18 19:15:36 | |
調整法ありがとうございます あとでやってみます 僕のプリンターはhpです それからきれいに三角形が表示できるように なりましたね うれしいです 創造的な教材になりそうです ただ 小学校では 角度は整数で表示されますので 角度を整数表示に修正していただけますか? よろしく |
└使ってみました!ありがとうございます もりの 2005/02/17 20:37:23 ツリーへ
Re: 三角形を描くプログラムです。 |
返事を書く |
もりの 2005/02/17 20:37:23 | |
使ってみました!ありがとうございます 改良して欲しい点! 辺はAB BC CA 図形の頂点に A B C を表示する 三辺の線の色を 青 赤 緑で表示する できますでしょうか? 期待しております |
├!三角形の3辺を与えて、描画と形状を求める... 山中和義 2005/02/18 10:00:41 ツリーへ
Re: 使ってみました!ありがとうございます |
返事を書く |
山中和義 2005/02/18 10:00:41 | |
!三角形の3辺を与えて、描画と形状を求める SET BITMAP SIZE 640,480 !画面サイズ640×480 SET WINDOW 0,640,0,480 !左下が原点。横がX、縦Y SET COLOR mode "NATIVE" !RGB指定 SET TEXT font "",12 !文字サイズ DIM x(3),y(3) !描画する三角形の頂点座標 INPUT PROMPT "三角形の三辺(AB,BC,CA)を入力してください。(例. 3,4,5) ": a,b,c SET TEXT COLOR 0 LET xx = 10 !表示位置 LET yy = 450 !三角形ができるか判定する。 ! 条件:a+b>cかつb+c>aかつc+a>bが成立する IF a+b>c AND b+c>a AND c+a>b THEN !各辺を表示する PLOT TEXT, AT xx,yy: "辺AB(辺c)= "&STR$(a) PLOT TEXT, AT xx,yy-20: "辺BC(辺a)= "&STR$(b) PLOT TEXT, AT xx,yy-40: "辺CD(辺b)= "&STR$(c) !指定した三角形を描く LET scl = 200/MAX(MAX(a,b),c) !比率。とりあえず。。。 LET csB = (c*c+a*a-b*b)/(2*c*a) !余弦定理 LET snB = SQR(1-csB*csB) !sinの2乗とcosの2乗の和は1 LET x(1) = 150 !座標を算出する。描画の原点 LET y(1) = 150 LET x(2) = a*scl+x(1) !真横に、辺c(AB) LET y(2) = y(1) LET x(3) = c*csB*scl+x(1) !縦上へ,辺a(BC) LET y(3) = c*snB*scl+y(1) SET LINE COLOR COLORINDEX(0,0,1) !3辺を描く PLOT LINES:x(1),y(1); x(2),y(2) SET LINE COLOR COLORINDEX(1,0,0) PLOT LINES:x(2),y(2); x(3),y(3) SET LINE COLOR COLORINDEX(0,1,0) PLOT LINES:x(3),y(3); x(1),y(1) PLOT TEXT, AT (x(1)+x(2))/2-20,(y(1)-30): "辺AB" !名称を描く PLOT TEXT, AT (x(2)+x(3))/2+10,(y(2)+y(3))/2: "辺BC" PLOT TEXT, AT (x(3)+x(1))/2-60,(y(3)+y(1))/2: "辺CA" PLOT TEXT, AT x(1)-60,y(1)-10: "頂点A" !名称を描く PLOT TEXT, AT x(2)+10,y(2)-10: "頂点B" PLOT TEXT, AT x(3)-20,y(3)+10: "頂点C" !余弦定理より各角を求めて、表示する LET xx = 10 !表示位置 LET yy = 370 PLOT TEXT, AT xx,yy, USING "∠C=###.###°": ACOS((b*b+c*c-a*a)/(2*b*c))*180/PI PLOT TEXT, AT xx,yy-20, USING "∠A=###.###°": ACOS((c*c+a*a-b*b)/(2*c*a))*180/PI PLOT TEXT, AT xx,yy-40, USING "∠B=###.###°": ACOS((a*a+b*b-c*c)/(2*a*b))*180/PI |
└続き 山中和義 2005/02/18 10:01:48 ツリーへ
Re: 使ってみました!ありがとうございます |
返事を書く |
山中和義 2005/02/18 10:01:48 | |
続き !------------------------- 判断 LET s$ = "" !正三角形 条件:a=b=c IF a=b AND b=c THEN LET s$ = "正" ELSE !直角三角形 条件:∠A=90°または∠B=90°または∠C=90° IF ABS(b*b+c*c-a*a)<0.00001 THEN LET s$ = "∠Cが90°の直角" !誤差を考慮して計算する IF ABS(c*c+a*a-b*b)<0.00001 THEN LET s$ = "∠Aが90°の直角" IF ABS(a*a+b*b-c*c)<0.00001 THEN LET s$ = "∠Bが90°の直角" !二等辺三角形 条件:a=bまたはb=cまたはc=a IF a=b THEN LET s$ = "辺ABと辺BCが等しい"&s$&"二等辺" IF b=c THEN LET s$ = "辺BCと辺CAが等しい"&s$&"二等辺" IF c=a THEN LET s$ = "辺CAと辺ABが等しい"&s$&"二等辺" END IF LET xx = 10 !表示位置 LET yy = 80 PLOT TEXT, AT xx,yy: s$&"三角形です。" !------------------------- ELSE !a+b>cかつb+c>aかつc+a>bが成立しない。 PLOT TEXT, AT xx,yy: "三角形はできません。" END IF END |