[英]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
是最大可能值W
和m2
是極小值(也許,<0)的W
過程中則你總寬度圖是padding + linewidth * (m1-m2)
例如:讓畫家最初看向東方。
AAAAABABAAAAAABABA
即
<<<<<.
>.>>>>
在過程W
此方式將更改:
AAAAABABAAAAA A B A BA
01234555543210-1-1-1-10
機器人向東移動5步,向上移動,向西移動6步,向下移動並返回起始位置。 在這種情況下, m1 = 5
, m2 = -1
,您需要使用大小為5+(-1)
畫布乘以線寬。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.