新しく発言する EXIT インデックスへ
三角形を描くプログラムです。

  三角形を描くプログラムです。 山中和義 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


インデックスへ EXIT
新規発言を反映させるにはブラウザの更新ボタンを押してください。