[Squeak-ja: 3463] 正7角形の処理についてお教えください

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
3 messages Options
Reply | Threaded
Open this post in threaded view
|

[Squeak-ja: 3463] 正7角形の処理についてお教えください

田中 昭二

 東京三鷹市の田中です。

 『eラーニング「タイルプログラムの読み方・考え方——正多角形と円を考
える」PDF』第2弾を作成していて、説明をするうえで分からなくなりました。

■ スクイークは円に内接する(360を割り切れない数の)正多角形は書けるか?

 3月17日に開催された三鷹市での『第2回スクイーク指導者講習会』で、
わたしの作成した「スクイーク関係ファイル」のサイトを見て、参加者に説明
させていただいたときにも、そのことはお母さんたちから即座に質問を受けま
した。

■ 原点から『回すと進める』タイルスクリプトで正7角形を……

「スクイークに『回すと進める』のタイルスクリプトを使って『正多角形』を
書かせるときに、360度を割り切れない数=辺の正多角形処理は、どう処理
しているのでしょうか?」と言った2人のお母さんからの質問内容でした。

 その時は、講師の阿部和広先生からお聞きしていたので、

「スクイークは、小数点以下の端数を出さず『分数式のまま』計算するので、
原点(最初の座標)に戻ってきます」と説明させていただきました。

□ 下記サイトの「スクイーク疑問集」に、PDFファイルと動画で表示
 ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
 ⇒ http://www.s-paru.com/sq/sq

     User Name:   squ

     Password:     12345

■ スクイークで実行すると

 その内容を「スクイークの性質」としてPDFファイルにまとめました。

 つぎに、「座標軸」と「向き」「シータ値」を見ながら実行する様子をAVI
ファイルにまとめました。

 「くるまのx座標、y座標、向き」が原点に戻ってくると、「シータ値」以外
は少しずつ違ってきました。

■ 中心から円に内接する正7角形では……

 「中心から円に内接する正7角形の概念」をPDFファイルにまとめました。

 また中心から円に内接する正7角形をスクイークに書かせると、外延の出発
点に正確に戻ってきました。

■ お教えください!

 子どもたちにもお母さんたちにも「文字を少なく、オブジェクト指向で説明
する」というコンセプトですので、端的に表記したいのですが、スクイークに
『回すと進める』のタイルスクリプトを実行する場合の説明方法をお教えくだ
さい。

 田 中 昭 二
***********************************
 181-0004
 三鷹市新川6-28-15-102
 PCメール▼
  mailto:[hidden email]
 http://www.s-paru.com/sq/sq
***********************************




Reply | Threaded
Open this post in threaded view
|

[Squeak-ja: 3465] Re: 正7角形の処理についてお教えください

Kazuhiro ABE-3
阿部@新百合です。

On Wed, 21 Mar 2007 07:56:36 +0900
田中 昭二 <[hidden email]> wrote:
>「スクイークに『回すと進める』のタイルスクリプトを使って『正多角形』を
>書かせるときに、360度を割り切れない数=辺の正多角形処理は、どう処理
>しているのでしょうか?」と言った2人のお母さんからの質問内容でした。
>
> その時は、講師の阿部和広先生からお聞きしていたので、
>
>「スクイークは、小数点以下の端数を出さず『分数式のまま』計算するので、
>原点(最初の座標)に戻ってきます」と説明させていただきました。

これは誤りでした。EToysの「回す」は、SmalltalkのPlayerというクラスの
turn:というインスタンスメソッドで処理されるのですが、その中で引数は浮動小
数点数 (Float)に変換されていました。したがって、回転させた後の「向き
(heading)」の値も分数でなく浮動小数点数で保持しています。
同様に「進める」はforward:で処理されますが、これもFloatに変換されていまし
た。したがって、x座標、y座標などの値もFloatです。お詫びして訂正します。

「進める」「回す」を実現するためには割り算だけでなく、進める距離と回す角
度を、画面上の直交座標における差分に変換するために三角関数なども用いられ
ています。
したがって、「回す」の引数が割り切れることだけではなく、これらに関わる計
算全体の精度も影響します。これらが十分なため、結果として始点にもどってく
るという理解でいかがでしょうか。
このとき、ビューワのそれぞれのフレーズタイルの左にあるメニューから「小数
の桁数…」を選び、桁数を増やしてみると実は誤差が出ている(こともある)こと
が分かります。

> つぎに、「座標軸」と「向き」「シータ値」を見ながら実行する様子をAVI
>ファイルにまとめました。
>
> 「くるまのx座標、y座標、向き」が原点に戻ってくると、「シータ値」以外
>は少しずつ違ってきました。

違っている数は10^-13〜14というオーダですからほとんど0ですね。これが誤差で
すが、前述の「小数の桁数」が0なのに小数点以下が表示されてしまうのはバグだ
と思います。

> また中心から円に内接する正7角形をスクイークに書かせると、外延の出発
>点に正確に戻ってきました。

この方法だと、都度原点からの距離と角度を与えて極座標から直交座標に変換し
ているので、回って「戻ってきている」わけではないと思います。

> 子どもたちにもお母さんたちにも「文字を少なく、オブジェクト指向で説明
>する」というコンセプトですので、端的に表記したいのですが、スクイークに
>『回すと進める』のタイルスクリプトを実行する場合の説明方法をお教えくだ
>さい。

このケースでは、オブジェクト指向とはあまり関係ないように思います。
計算機における数の表現方法と誤差、それを表示する際の問題ではないでしょう
か。
本来、EToysはこれらを隠して、数学のモデルをそのまま扱えるようになっている
べきですが、残念ながらまだ不完全だと言うことだと思います。

 //abee
--
阿部 和広  EMAIL [hidden email]
Reply | Threaded
Open this post in threaded view
|

[Squeak-ja: 3466] Re: 正7角形の処理についてお教えください

iNOUE Koich!
In reply to this post by 田中 昭二
田中 昭二さんがWed, 21 Mar 2007 07:56:36 +0900に
「[Squeak-ja: 3463] 正7角形の処理についてお教えください」の件で:
> 「スクイークに『回すと進める』のタイルスクリプトを使って『正多角形』を
> 書かせるときに、360度を割り切れない数=辺の正多角形処理は、どう処理
> しているのでしょうか?」と言った2人のお母さんからの質問内容でした。

一回転を360にしたのはバビロニア人だそうですが、360を割り切るものと
そうでないもので角度の質にそれほど違いがあるわけではないと思います。xy座
標系に上手く乗るのは割る数が1か2か4かだけでこれ以外は同じ距離進めるた
めには無理数が絡んできます。8の場合はxy座標の比が±1なので向きは正しく
はなるでしょうか。
逆に、進んだ位置が有理数の座標で表せるような、三辺の比が整数値になるよう
な直角三角形の内角は一回転を割り切りません。ですから、正n角形の場合で、
特別に正確に書けるのはたてよこが画面に平行な正方形の場合だけではないで
しょうかね。
#Mathematicaだとsin,cosの値を実数値で表さなければ、正確になるはずです。
#Cynderellaというのもそうだったかもしれません。
--
https://www.ns.musashi-tech.ac.jp/%7einoue/Signature/               井上
.