1

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

我遇到的问题是所有线条的尺寸都相同(这就是它需要的尺寸),当我绘制 L 系统时,如果我没有给出正确的线条尺寸,绘图就会像你一样离开图形窗口可以在那张照片上看到。

在此处输入图像描述

我知道我可以将绘图移到左侧,但我总是从窗口的中心开始绘图。我需要帮助的是如何为给定的指令序列设置正确的线条大小,例如:我有那个指令列表下图: ACAABAABABACACAACACACACAACAABABACAABAABABACACAACACACACAACAABABACAABAABABACACAACACACACAACAABABACAABAABABACACAACACACACAACAABA。

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

我怎样才能找到 X(线的大小)的最佳值,以便使图形保留在图形窗口上。

我发现的唯一解决方案是从给定值(示例 X=20)开始,并尝试使用该值绘制 l 系统,如果它熄灭,然后使用 X/2 再次尝试,直到它工作!

有人有更好的主意吗?

4

2 回答 2

1

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

于 2013-12-28T15:41:37.747 回答
1

我的想法是通过一次来评估迷宫的大小。让(W: int)成为你的宽度变量。当画家向西移动时,W 递减,当画家向东移动时,你递增W。如果m1是最大可能值W并且m2是过程中的最小值(可能,< 0),W那么图表的总宽度是padding + linewidth * (m1-m2)

例如:让画家最初看向东方。

AAAAABABAAAAAABABA

IE

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

在此过程W中将改变这种方式:

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

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

于 2013-12-28T17:01:51.687 回答