Graphics 找到合适的比例来绘制L系统的迭代

Graphics 找到合适的比例来绘制L系统的迭代,graphics,ocaml,l-systems,Graphics,Ocaml,L Systems,我制作了一个OCaml程序,它在图形窗口上绘制给定l系统的表示,使用他的定义、他的命令解释和迭代。 该图是使用海龟图形绘制的(海龟可以画一条线,移动到给定的点,并旋转给定的角度) 我遇到的问题是,所有的线都有相同的大小(这就是它的需要),当我画一个L系统时,如果我没有给出正确的线大小,图形就会从图形窗口中消失,正如你在那张图片上看到的那样 我知道我可以将绘图移到左边,但我总是从窗口的中心开始绘图。我需要的帮助是如何为给定的凸轮序列设置正确的线条大小,例如: 我有下面的说明清单: 阿卡巴巴巴巴巴

我制作了一个OCaml程序,它在图形窗口上绘制给定l系统的表示,使用他的定义、他的命令解释和迭代。 该图是使用海龟图形绘制的(海龟可以画一条线,移动到给定的点,并旋转给定的角度)

我遇到的问题是,所有的线都有相同的大小(这就是它的需要),当我画一个L系统时,如果我没有给出正确的线大小,图形就会从图形窗口中消失,正如你在那张图片上看到的那样

我知道我可以将绘图移到左边,但我总是从窗口的中心开始绘图。我需要的帮助是如何为给定的凸轮序列设置正确的线条大小,例如: 我有下面的说明清单: 阿卡巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴

其中A表示:画一条X大小的线 B:转π/2圈 C:转动-π/2

如何找到X(线的大小)的最佳值,以使图形保持在图形窗口中

我发现的唯一解决方案是从一个给定的值(示例X=20)开始,尝试用这个值绘制l系统,如果它消失了,然后用X/2再试一次,直到它工作为止


有人有更好的想法吗?

你可以对L系统进行一些分析,以确定其范围,并进行适当的缩放。但是,这与仅以任意大小(例如,1)绘制它并看到它有多大,然后缩放(一次)以适应屏幕(不只是X/2,直到工作为止)没有多大区别。例如,如果您使用比例=1绘制它,它的大小为40个单位,而您的屏幕为400个单位,则您知道您可以使用比例=10绘制,并且仍然适合。您还可以使用第一次传递来确定XY偏移,以便将其居中。

我的想法是通过一次传递来评估迷宫的大小。让
(W:int)
作为宽度变量。当画师向西移动时,你会减少W;当画师向东移动时,你会增加W。如果过程中,
m1
W
的最大可能值,
m2
W
的最小值(可能,<0),则图表的总宽度是
填充+线宽*(m1-m2)

例如:让我们先看看东方

AAAAABABAAAAAABABA
i、 e


机器人向东走5步,向上移动,向西移动6步,向下移动,返回起始位置。在这种情况下,
m1=5
m2=-1
需要大小为
5+(-1)
的画布乘以线宽

我尝试过这个想法,并将其应用到工作中,因为我从来没有在屏幕上画过一幅画。但我经常有一幅画比原来的画大2倍甚至更多,而且还可能在窗户里
<<<<<.
>.>>>>
 AAAAABABAAAAA A B A BA
01234555543210-1-1-1-10