わさっきhb

大学(教育研究)とか ,親馬鹿とか,和歌山とか,とか,とか.

階段状の軌跡

いきなりですが問題です.

sを任意の正整数とし,sの逆数を1/sと表記します.点Pが2次元座標平面上を以下の要領で動きます.

  1. はじめに,点Pは原点(0,0)にいます.
  2. 点PはX軸の正の方向に1だけ移動します.(1,0)に着きます.
  3. 点PはY軸の正の方向に1だけ移動します.(1,1)に着きます.
  4. 次の2つの操作をワンセットとして,これをs回繰り返します.
    • 点PはX軸の負の方向に1/sだけ移動します.
    • 点PはY軸の負の方向に1/sだけ移動します.
  5. 最終的に点Pは原点に戻ります.

点Pの軌跡を図にし,その長さを求めましょう.

さっそくですが解答,というわけにもいきません.というのもこの点Pの軌跡はsの値に依存するからです.
例えばs=5のときは次のようになります.

sが1から20までと,100のときの軌跡を,GIFアニメーションにしてみました.

その一方で,長さは,sの値に依存しません.任意の正整数sに対し,1+1+(1/s+1/s)s=1+1+1+1=4です.
ただ,長さがsに依存しないというのは,直感に合いません.s=1のとき,軌跡は正方形なのですが,sが大きくなるにつれて,直角二等辺三角形に近くなります.だから大きくなればなるほど,1周分の長さは2+√2となり,4より小さくなってほしいのです.
そうならないのは結局のところ,1/sずつ左と下に移動するのをs回,行っているからです.sが十分大きい場合の,軌跡を三角形に見立てたときの斜辺になる部分は,「斜めの辺」ではなく,X軸またはY軸に平行なのです.ずっとギザギザ,と言うこともできます.sの値が100でも何十億でも,正整数であれば(s→∞とするのでなければ)この性質は保たれます.
オレンジ色で塗りつぶしているのには理由があって,今週のプログラミング授業で学生に取り組ませた問題だったのでした.「s=値」の記載はさせていません.プログラミングというのは,SVG画像を生成するJavaアプリケーションの作成です.昨年度は,星型の描画を中心課題としましたが,演習のあとの課題で極座標形式を使用しておらず,2次元平面上の扱いがあればいいと判断し,出題内容を変更しました.
冒頭の問題のような動かし方も,実は授業で指示していません.先に以下のような,一辺の長さが1/sの正方形を階段状に配置する(ようなSVGXML文書)を生成する)プログラムを作ってもらい,次に輪郭だけとしました.

SVGで正方形を描くには,rect要素が使えます.輪郭に関しては,polygon要素またはpath要素が有用です.何もない状態から,生成プログラムを作るのも容易ではありませんので,rect要素でシアンに塗りつぶしただけのものと,s=1の正方形を描いたものは,SVGPNGの各画像を用意し参照してもらいました.
ところでこの階段状の図形は,昨年リリースの『小学校学習指導要領解説算数編』に取り入れられた事例をもとにしています.サブブログで整理を試みました.

冒頭の問題は,左下が原点,右上が(1,1)の単位正方形の周囲および内部を動くものとしましたが,原点を中心としてs倍に拡大した図形で,考えることもできます.このとき,sは段数となり,そして軌跡の長さをLとすると,L=4sと表すことができます.『小学校学習指導要領解説算数編』に貼り付けられた以下の図が関連します.