簡體   English   中英

找到合適的比例尺繪制L系統的迭代

[英]Find right scale to draw an iteration of L-system

我制作了一個OCaml程序,該程序使用他的定義在圖形窗口上繪制給定l系統的表示形式,並進行命令解釋和迭代。 該繪圖是使用Turtle圖形制作的(turtle可以畫一條線,移動到給定的點並旋轉給定的角度)。

我的問題是所有線條的大小都相同(這就是需要的大小),當我繪制L系統時,如果我沒有給出正確的線條大小,則繪圖會從您的圖形窗口中消失可以在那張照片上看到。

在此處輸入圖片說明

我知道我可以向左移動圖形,但是我總是從窗口的中心開始繪制。我需要幫助的是如何為給定的攝錄機序列設置正確的線條大小,例如:我有該說明列表下方:ACAABAABABACACAACACACACACAACAABABACAABAABABACACAACACACACACAAAAABAABACAABAABABACACAACACACACACAACAABABACAABAABABACACAACACACACACAACAABA。

其中A的意思是:畫一條“ X”大小的線B:轉動π/ 2 C:轉動-π/ 2。

我如何才能找到X的最佳值(線的大小),以使圖形保留在圖形窗口中。

我發現的唯一解決方案是從給定值開始(示例X = 20)並嘗試使用該值繪制l系統,如果它消失了,請再次嘗試X / 2,直到它可用!

有人有更好的主意嗎?

您可以對L系統進行一些分析,以確定其范圍並適當縮放。 但是,這與僅以任意大小(例如1)繪制它並看到它有多大並縮放(一次)以適合屏幕(在工作之前不只是X / 2)沒什么不同。 例如,如果您使用scale = 1進行繪制,並且尺寸為40個單位,並且屏幕為400個單位,那么您知道可以使用scale = 10進行繪制並且仍然適合。 您也可以使用此第一遍來確定XY偏移,以便將其居中。

我的想法是通過評估迷宮的大小。 (W: int)為您的寬度變量。 當畫家西移動你遞減W和當你的移動畫家東你incerement W 如果m1是最大可能值Wm2是極小值(也許,<0)的W過程中則你總寬度圖是padding + linewidth * (m1-m2)

例如:讓畫家最初看向東方。

AAAAABABAAAAAABABA

<<<<<.
>.>>>>

在過程W此方式將更改:

 AAAAABABAAAAA A B A BA
01234555543210-1-1-1-10

機器人向東移動5步,向上移動,向西移動6步,向下移動並返回起始位置。 在這種情況下, m1 = 5m2 = -1 ,您需要使用大小為5+(-1)畫布乘以線寬。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM