土壌・植生・写真の解析に興味があります

近くの植生の観察、孫のプログラミング手伝いを目指します^_^

「樹と葉の形状」プログラミング続編:「スクラッチ」・「Python」で

2020-07-03 21:45:39 | 日記

・近くの木の葉や樹の形状を調べます。

・枝や葉脈の形で分類、プログラミングで形を描いてみます。

・子供さん向けの「スクラッチプログラミング」「Pythogプログラミング」で

枝や葉脈の形を実物とプログラミングで描いた形と比べてみました。

☆主樹の軸(主幹)と側枝の交差角度、葉の中央脈(主脈)と側脈の交差角度に

注目すると、枝と葉の形状で、分類できるように思えます。

☆大まかですが、交差角度が小さく、細身のものは、大きな高い樹に、

交差角度が大きく、広がるものは、低木に、なりやすいようです。

「スクラッチプログラミング」で、樹形を描くには、次のようにコードを書きます。

定義の変数「深さ」:枝分岐の階層数、「枝の長さ」「交差角度」を入力します。

上図では、交差角度30度のケヤキの樹の例です。

Pythonプログラミングでは、京都大学が公開している「プログラミング演習 Python 2019」

講義資料(https://repository.kulib.kyoto-u.ac.jp/dspace/handle/...)の

「6.7.4 フラクタル図形を描く」に、次のコードが示されています。

 

from turtle import *

# 再帰的に木を描く

def tree(n):

# 引数が1以下なら5歩すすむ

    if n<=1:

        forward(5)

    else:

# 引数は1より大きいとき

# 引数の値に応じて前進(幹)

        forward(5*(1.1**n))

# 今の位置と向きを記録

        xx = pos()

        h = heading()

# 左へ 30 度回転

        left(30)

# 大きさ n-1 で木を描く(左の枝)

        tree(n-1)

# ペンを挙げて軌跡を残さない

        up()

# 先に記録した位置(幹の先端)に戻る

        setpos(xx)

        setheading(h)

# ペンを降ろす

        down()

# 右へ15度

        right(15)

# 大きさ n-1 で木を描く(右の枝)

        tree(n-1)

# ペンを上げてもどる

        up()

        setpos(xx)

        setheading(h)

# ペンを降ろす

        down()

# 時間がかかるので最も早い描画

speed(0)

# 大きさ6 の木を描く

tree(6)

これを実行すると、次のような樹の図形を描けます。n=6、角度=15度の例です。

再帰の深さn(枝の分岐の層数)、交差角(角度)を変えると、いろいろな形になります。


子供さん用「スクラッチプログラミング」:「樹と葉の形状調査」

2020-07-03 15:50:29 | 日記

・近くの木の葉や樹の形状を調べます。

・枝や葉脈の形で分類、プログラミングで形を描いてみます。

・子供さん向けの「スクラッチプログラミン」「Pythogプログラミング」で

枝や葉脈の形を実物とプログラミングで描いた形と比べてみました。

 

☆主樹の軸(主幹)と側枝の交差角度、葉の中央脈(主脈)と側脈の交差角度に

注目すると、枝と葉の形状で、分類できるように思えます。

☆大まかですが、交差角度が小さく、細身のものは、大きな高い樹に、

交差角度が大きく、広がるものは、低木に、なりやすいようです。

 

詳しくは、まだ調べていませんが、次のような関係(交差角度と、葉身幅)で

整理ができればよいです。

樹形(土色)、葉脈(緑色)を、交差角度を指定して描くには、例えば次のようにします。

「スクラッチプログラミング」で、「樹形(土色)」の場合は

次のようです。交差角の指定は、例えば「35度」のときは、下図のようにします。

「35」左、「70」右です。「35」は交差角、「70」は交差角の2倍値です。

この実行結果は、次のようになります。

「スクラッチプログラミング」で、「葉脈(緑色)」の場合は

次図の左セル(交差角)と右セル(側脈長さ)に、数値を入力します。

下端は、葉の先端方向なので、葉先を細くするには、葉脈長さを小さくします。

この実行結果は、次のようになります。