以多边形为例,在封闭区域产生随机点很容易,一个命令的事:
序列(随机内点(p1),i,1,100)
但是我们现在想在封闭区域内随机产生多个圆,且这些圆不能相交,方便小朋友去数个数,情况就娈复杂多了。
(点坐标省去)
l1 = {A, B, C, D, E, F, G, H, I, J, K, L, M, N, A} (列表时,最后加上第一个点,后面用的上)
p1 = 多边形(l1)

由于产生的是圆,我们不能简单地以这个多边形为边界,要根据圆半径向内等距缩小(不能用位似命令)。
r = 0.1 (要生成圆半径)
l2 = 序列(直线(l1(i), l1(i + 1)), i, 1, 长度(l1) - 1)
l3 = 映射(平移(m, 向量(-r 单位法向量(m))), m, l2)
l5 = 合并({l3, {l3(1)}})
l4 = 序列(交点(l5(i), l5(i + 1)), i, 1, 长度(l5) - 1)
p2 = 多边形(l4)

我们通过以上操作,把多边形各边向内等距移动r,得到新的多边形作为边界(蓝色)
a = 最大值(x(l4))
b = 最小值(x(l4))
c = 最大值(y(l4))
d = 最小值(y(l4))
e = 曲面((u, v), u, b, a, v, d, c)
l6 = 序列(序列((i, j), j, d, c, 2r), i, b, a, 2r)

生成刚好能盖住p2的点阵,点阵间距为2r,这是我们生成圆的基础,下边是确定在p2内的这些点。
l7 = 扁平列表(l6)
l9 = 序列((距离(l7(i), 区域内最近点(p2, l7(i))), i), i, 1, 长度(l7))
l8 = 条件子列(x(A) ≟ 0, A, l9)
l10 = y(l8)
l11 = 序列(l7(l10(i)), i, 1, 长度(l10))

上边图可以看到,我们在蓝色区域内生成了点阵,从这些点中随机生成点就行了。
n = 36 (整数滑动条,1到长度(l11),增量1,确定生成圆个数)
l12 = 序列(随机元素(l11), i, 1, n)
l13 = 映射(圆周(a, r), a, l12)

上边是完成图,实现了在封闭区域内随机产生不相交的圆的设想。
序列(随机内点(p1),i,1,100)
但是我们现在想在封闭区域内随机产生多个圆,且这些圆不能相交,方便小朋友去数个数,情况就娈复杂多了。
(点坐标省去)
l1 = {A, B, C, D, E, F, G, H, I, J, K, L, M, N, A} (列表时,最后加上第一个点,后面用的上)
p1 = 多边形(l1)

由于产生的是圆,我们不能简单地以这个多边形为边界,要根据圆半径向内等距缩小(不能用位似命令)。
r = 0.1 (要生成圆半径)
l2 = 序列(直线(l1(i), l1(i + 1)), i, 1, 长度(l1) - 1)
l3 = 映射(平移(m, 向量(-r 单位法向量(m))), m, l2)
l5 = 合并({l3, {l3(1)}})
l4 = 序列(交点(l5(i), l5(i + 1)), i, 1, 长度(l5) - 1)
p2 = 多边形(l4)

我们通过以上操作,把多边形各边向内等距移动r,得到新的多边形作为边界(蓝色)
a = 最大值(x(l4))
b = 最小值(x(l4))
c = 最大值(y(l4))
d = 最小值(y(l4))
e = 曲面((u, v), u, b, a, v, d, c)
l6 = 序列(序列((i, j), j, d, c, 2r), i, b, a, 2r)

生成刚好能盖住p2的点阵,点阵间距为2r,这是我们生成圆的基础,下边是确定在p2内的这些点。
l7 = 扁平列表(l6)
l9 = 序列((距离(l7(i), 区域内最近点(p2, l7(i))), i), i, 1, 长度(l7))
l8 = 条件子列(x(A) ≟ 0, A, l9)
l10 = y(l8)
l11 = 序列(l7(l10(i)), i, 1, 长度(l10))

上边图可以看到,我们在蓝色区域内生成了点阵,从这些点中随机生成点就行了。
n = 36 (整数滑动条,1到长度(l11),增量1,确定生成圆个数)
l12 = 序列(随机元素(l11), i, 1, n)
l13 = 映射(圆周(a, r), a, l12)

上边是完成图,实现了在封闭区域内随机产生不相交的圆的设想。