在地图内随机生成位置

【更新】2020.12.14

  • 请直接复制代码粘贴到动作,无须导入工坊码。
    动作
    {
        全局.A = 矢量(随机实数(X方向分量(最近的可行走位置(矢量(-999, 0, 0))), X方向分量(最近的可行走位置(矢量(999, 0, 0)))), Y方向分量(目标位置(随机整数(0, 2))), 0);
        全局.A = 矢量(X方向分量(全局.A), Y方向分量(全局.A), 随机实数(Z方向分量(射线命中位置(矢量(X方向分量(全局.A), Y方向分量(全局.A), -999), 全局.A, 无, 无, 假)), Z方向分量(射线命中位置(矢量(X方向分量(全局.A), Y方向分量(全局.A), 999), 全局.A, 无, 无, 假))));
        全局.A = 矢量(X方向分量(全局.A), 随机实数(Y方向分量(射线命中位置(矢量(X方向分量(全局.A), -999, Z方向分量(全局.A)), 全局.A, 无, 无, 假)), Y方向分量(射线命中位置(矢量(全局.A, 999, 全局.A), 	全局.A, 无, 无, 假))), Z方向分量(全局.A));
        If(相距距离(全局.A, 最近的可行走位置(全局.A)) <= 2);
            全局.A = 最近的可行走位置(全局.A);
        Else;
            循环;
        End;
    }

原理:矩形内随机取点,然后拒绝采样。在矩形内随机取点这一步做了修改,以便适应地图工坊。

  1. 假设 Y 轴值 为随机一个目标点的 Y 轴值;Z 轴值为 0。
  2. 通过 最近的可行走位置 取到地图的外接矩形 X 轴最大最小值,并随机产生一个 X 轴值。
  3. 通过 Z 轴的 射线命中位置 取 Z 轴最大最小值,并随机产生一个 Z 轴值。
  4. 通过 Y 轴的 射线命中位置 取 Y 轴最大最小值,并随机产生一个 Y 轴值。
  5. 这样便产生了一个矢量。若这个矢量距离最近的可行走位置小于等于 2 ,便是一个有效随机位置,否则重来。

问题:

  1. Z轴方向用射线命中位置这个动作,是为了降低无效位置产生的概率,但是有效位置的产生概率却提高了。也就是说z轴的边的长度越接近地图的外接矩形的z边的长度,概率越接近随机,否则,越高于随机。
  2. 随机位置与第一步暂取的目标点0位置y分量有很大关系,因为很多地图内的位置有较大的高度差。当高度差较大时,很大可能z轴射线命中位置为终点位置。这样,高度差较大的那片区域便取不到值。

示例图(100次有效位置):

  • 预览
  • 预览
评论
这里空空如也~
这里空空如也~