4

これはスタック オーバー フローの最初の投稿です。最近、「植物のアルゴリズムの美しさ」という本を読み始めました。その第 1 章では、L システムについて説明しています。(この章はこちらで読むことができます)。

つまり、L システムには 2 種類あるということです。エッジの書き換えとノードの書き換え。

エッジの書き換えは比較的簡単です。初期スターター ポリゴンとジェネレーターがあります。初期ポリゴンの各エッジ (側面) がジェネレーターに置き換えられます。

しかし、このノードの書き換えは非常にややこしいです。私が収集したものから、2 つ以上のルールがあり、各反復でルール内の変数を対応する定数に置き換えます。

タートルの解釈では、これらは標準的なルールです

F : Move turtle forward in current direction (initial direction is up)
+ : rotate turtle clock wise
- : rotate turtle anti clock wise
[ : Push the current state of the turtle onto a pushdown operations stack. 
    The information saved on the stack contains the turtle’s position and orientation, 
    and possibly other attributes such as the  color and width of lines being drawn.
] : Pop a state from the stack and make it the current state of the turtle

したがって、このWebサイトに示されている例を検討してください。http://www.selcukergen.net/ncca_lsystems_research/lsystems.html

Axiom     : FX
Rule      : X= +F-F-F+FX 
Angle     : 45

そうat n=0(公理の X は無視してください)

ちょうど上向きの直線を意味する F です。

at n=1

公理の X をルールに置き換える

F+FF-F+F (最後の X を再び無視)

出力はこれです

http://www.selcukergen.net/ncca_lsystems_research/images/noderewrite.jpg

ルールが 1 つの単純な例で問題ありません。しかし、本「植物のアルゴリズムの美しさ」の 25 ページには、解釈方法がわからないルールがいくつかあります。

X
X = F[+X]F[-X]+X
F = FF

この画像を参照してください。

https://lh6.googleusercontent.com/g3aPb1SQpvnzvDttsiiBgiUflrj7R2V29-D60IDahJs=w195-h344-no

at n=0

ちょうど「X」。これが何を意味するのかわからない

at n=1

ルール 1 を適用 (X->F[+X]F[-X]+X) : F[+]F[-]+ すべての X を無視します。これは単なる直線です。

ルール 2 (F->FF) を適用: FF[+]FF[-]。これはただの直線です。

私の理解では、最終的な出力はタートルが上方向に4回移動するはずです。または、多くても最終出力には 4 行しか含まれません。

これをよりよく理解するのに役立つと思われるオンラインLシステムジェネレーターを見つけたので、同じ値を入力しました.n = 1での出力は次のようになります

https://lh6.googleusercontent.com/-mj7x0OzoPk4/VK-oMHJsCMI/AAAAAAAAD3o/Qlk_02_goAU/w526-h851-no/Capture%2B2.PNG

出力は間違いなく直線ではなく、最悪の部分には 5 つの線があります。つまり、最終的な出力方程式には 5 つの F が必要です。

このノードの書き換えを理解するのを手伝ってください。これを理解しないと本を読み進めることができません。

長い投稿と、タグ付け前のリンクで申し訳ありません。2 つ以上のリンクを投稿することはできません。上から下まで辛抱強く読んでいただきありがとうございます。

4

1 に答える 1

5

L システムは非常に単純で、テキストの置換に依存しています。

この開始情報を使用して:

Axiom     : FX
Rule      : X= +F-F-F+FX 

次に、基本的に、システムの次世代を作成するには、前の世代を使用し、その中の各キャラクターに置換を適用します.

このアルゴリズムを使用して世代を生成できます。

  • 前世代の各キャラクターについて:
    • その文字の置換ルールがあるかどうかを確認します
      • YES: 置換を追加します
      • NO: オリジナルキャラクターを追加

したがって:

n(0) = FX

            +-- from the X
            |
        v---+---v
n(1) = F+F-F-F+FX
       ^
       +- the original F

代わりにこれを開始した場合:

Axiom : ABA
Rule  : A = AB

次に、次のようになります。

        +--------+
        |        |
n(0) = ABA       |
       | |       |
       | ++      |
       |  |      |
       vv vv     |
n(1) = ABBAB     |
         ^       |
         +-------+

基本的:

  • 世代 X のすべての A に対して、世代 X+1 を生成する場合、AB を出力します。
  • ルールのない他のすべての文字については、その文字を出力するだけです (これはすべての B を処理します)。

これは、世代ごとに長さが 2 倍になるシステムです。

Axiom : A
Rule  : A = AA

作成します:

n(0) = A
n(1) = AA
n(2) = AAAA
n(3) = AAAAAAAA
于 2015-01-09T13:47:00.370 に答える