問題タブ [l-systems]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - どのようにタートルに L-system での位置を記憶させますか?
大学でプログラミングを始めたばかりです。私たちのタスクの 1 つは、Python でタートルを使用して L システムでフラクタル ツリーを作成することです。これです:
コード:
ご覧のとおり、ぐちゃぐちゃです。タートルに自分の位置と向きを記憶させる方法を考えています " [ " その後、その後に戻る " ] "。
全くの初心者ですので、分かりやすくわかりやすく回答お願いします。
recursion - L-Systems プロダクション ルール (理論) から Python のタートル グラフィックス (実践) への書き込み (翻訳)
問題は、コードの書き方がよくわからないことです。出発点が必要です。コッホ曲線など、1 つのパラメーターに書き換え生成ルールを適用する方法は知っています。問題は、生産ルールの数が複数ある場合に発生します。たとえば、次のようになります。
(シェルピンスキーのガスケット)
私の質問は、これを python タートル スクリプトにどのように統合するのですか? Xコマンドセットを再帰的に置き換えるようにpythonにどのように指示しますか? X 用と F 用の 2 つのプロシージャを作成しようとしましたが、うまくいきません。この例の X を (F + X + F) などの他の単語に置き換えるにはどうすればよいでしょうか? これを翻訳する簡単な方法はありますか?
再帰的プログラミングとフラクタル要素について考えるとき、私にとってはまだかなり抽象的です...
前もって感謝します!
graphics - L-system の反復を描画するための正しい縮尺を見つける
私は、彼の定義、コマンドの解釈、および反復を使用して、特定の l-system の表現をグラフィックウィンドウに描画する OCaml プログラムを作成しました。描画はタートル グラフィックスを使用して作成されます (タートルは線を描画し、指定されたポイントに移動し、指定された角度で回転することができます)。
私が抱えている問題は、すべての線が同じサイズであることです(これが必要な方法です)。Lシステムを描画すると、正しい線のサイズを指定しないと、描画がグラフィックスウィンドウから出てしまいます.その写真で見ることができます。
図面を左側に移動できることはわかっていますが、常にウィンドウの中央から描画を開始します。たとえば、特定の一連のコマンドに対して適切な線のサイズを設定する方法が必要です。その指示のリストがあります。下:ACAABAABABACACAACACACAACAABABACAABAABACACAACACACACAACAABABACAABAABABACACAACACACAACAABABACAABAABABACACAACACACACAABA.
ここで、A の意味: 「X」サイズの線を引く B: π/2 回転 C: -π/2 回転。
グラフィックウィンドウに描画を維持するために、X (線のサイズ) の最適な値を見つけるにはどうすればよいですか?
私が見つけた唯一の解決策は、特定の値 (X=20 の例) から始めて、この値で l-system を描画しようとすることです。
誰かがより良いアイデアを持っていますか?
c# - C#/WPF での L-System レンダラーの高速化
lsysは、 CoffeeScript で書かれた非常に高速な L システムレンダラーです。
以下は、C# と WPF の単純なレンダラーです。この例を表示するようにハードコーディングされています。実行時の結果は次のようになります。
ウィンドウ内でマウスをクリックすると、angleGrowth
変数が調整されます。の再計算と のGeometryGroup
構築にCanvas
かかる時間は、通常 10 分の 1 秒未満です。ただし、実際の画面更新にはもっと時間がかかるようです。
これをより高速または効率的にする方法について何か提案はありますか? 現在、CoffeeScript/JavaScript バージョンよりもかなり遅いです... :-)
python - Python Order 10 のドラゴン カーブ
ドラゴン カーブがドラゴン カーブのように見えないのはなぜですか?
以下は、オーダー 10 の Python での実装です。
オーダー 10 での表示は次のようになります。
編集:これは、より大きなスケーリングされた曲線を使用して、オーダー 1 で得られるものです。
algorithm - Lシステムノード書き換え例
これはスタック オーバー フローの最初の投稿です。最近、「植物のアルゴリズムの美しさ」という本を読み始めました。その第 1 章では、L システムについて説明しています。(この章はこちらで読むことができます)。
つまり、L システムには 2 種類あるということです。エッジの書き換えとノードの書き換え。
エッジの書き換えは比較的簡単です。初期スターター ポリゴンとジェネレーターがあります。初期ポリゴンの各エッジ (側面) がジェネレーターに置き換えられます。
しかし、このノードの書き換えは非常にややこしいです。私が収集したものから、2 つ以上のルールがあり、各反復でルール内の変数を対応する定数に置き換えます。
タートルの解釈では、これらは標準的なルールです
したがって、このWebサイトに示されている例を検討してください。http://www.selcukergen.net/ncca_lsystems_research/lsystems.html
そうat n=0
(公理の X は無視してください)
ちょうど上向きの直線を意味する F です。
at n=1
公理の X をルールに置き換える
F+FF-F+F (最後の X を再び無視)
出力はこれです
ルールが 1 つの単純な例で問題ありません。しかし、本「植物のアルゴリズムの美しさ」の 25 ページには、解釈方法がわからないルールがいくつかあります。
この画像を参照してください。
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での出力は次のようになります
出力は間違いなく直線ではなく、最悪の部分には 5 つの線があります。つまり、最終的な出力方程式には 5 つの F が必要です。
このノードの書き換えを理解するのを手伝ってください。これを理解しないと本を読み進めることができません。
長い投稿と、タグ付け前のリンクで申し訳ありません。2 つ以上のリンクを投稿することはできません。上から下まで辛抱強く読んでいただきありがとうございます。
image - L-system フラクタルによる植物画像の画像類似度指数
そのフォーラムの画像類似性指数に関するすべてのスタッフを読みましたが、比較したい画像はLシステムジェネレーターからのものであり、以下に示すように明らかな違いを見つけるのは難しいため、私の主題は少し異なると思います. そのため、問題に対してどの方法とソフトウェアを選択するかを決めることができませんでした。
しかし、話を最初から見てみましょう。私はいくつかの植物 (合計 15) の枝の角度と長さを測定することによってデータのコレクションを持っており、既に述べたように L-system フラクタル法でそれらを表現しました。
これらの画像は上記のもののように見えます:
A
工場 B
工場 C工場
これまで、2 つの方法を使用して違いを見つけようとしました。
1) それらの画像のフラクタル次元を計算すると、予想どおり、すべての画像で 2 でした
2) 同じキャンバス内の面積の割合を計算する。その場合の数字には多少の違いがありますが、統計的に有意ではありません。
そのため、他の類似性インデックスを使用することを考えましたが、あまりにも多くのプロトコルとアイデアがあり、出発点を見つけることができませんでした. OPENCV 、 VisualCI などについて読みましたが、そのような方法を二度と使用したことがないため、どういうわけか迷っています。
あなたの提案は大歓迎です。
ありがとうございました。
algorithm - Processing でシンプルな l-system を作成する方法
Processingで簡単なl-systemを作りたいです。「A」から始まるすべての文字「A」を「AB」に、すべての文字「B」を「A」に変更したいと考えています。
結果は次のようになります。
(PS私は処理についてあまり知りません)