You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何生成中间带间隔的随机数?校园项目障碍生成需求

实现双区间随机数生成(0-10/30-40)的几种实用方案

嘿,这个需求我熟!做这类校园场景的项目时,要避开中间道路只在两侧offroad区域生成障碍物,本质就是要生成双区间的随机数,我给你几个简单易实现的方案,不管你用什么编程语言都能快速套用:

方法1:分区间选择 + 内部随机取值(最直观)

这个思路逻辑清晰,先随机决定生成左区域(0-10)还是右区域(30-40)的数值,再在选中的区间内生成随机数。

举个Python的实现例子:

import random

def get_offroad_position():
    # 50%概率选择左/右区域,想调整概率直接改这里的权重就行
    choose_left = random.choices([True, False], weights=[0.5, 0.5])[0]
    if choose_left:
        # 左区间生成随机数,要整数就用randint(0,10)
        return random.uniform(0, 10)
    else:
        # 右区间生成随机数
        return random.uniform(30, 40)

如果是用C#的话:

using System;

public static float GetOffroadPosition()
{
    Random random = new Random();
    // 随机选左或右区域
    if (random.Next(2) == 0)
    {
        return (float)random.NextDouble() * 10;
    }
    else
    {
        return 30 + (float)random.NextDouble() * 10;
    }
}

这个方法的优势是可调试性强,还能灵活调整两侧区域的障碍物生成概率——比如想让左侧障碍物更多,直接把左区域的权重调高就行。

方法2:映射法(简洁高效)

另一种思路是先生成一个单区间的随机数,再通过映射跳过中间的道路区域(10-30)。比如先生成0-20的随机数,把10-20的部分直接加20,就变成了30-40。

Python代码示例:

import random

def get_offroad_position():
    base_num = random.uniform(0, 20)
    # 把10-20的区间映射到30-40
    return base_num if base_num <=10 else base_num + 20

这个方法只需要一次随机操作,代码更简洁,适合追求性能和代码紧凑的场景。

方法3:排除法(应急可用,不推荐高频场景)

就是直接生成0-40的随机数,如果落在中间道路区域(10-30)就重新生成,直到得到符合要求的数值。

Python代码示例:

import random

def get_offroad_position():
    while True:
        pos = random.uniform(0, 40)
        if pos <=10 or pos >=30:
            return pos

⚠️ 注意:这个方法虽然简单,但极端情况下可能会多次循环(连续生成中间区域的数),如果你的项目对性能有要求,优先用前两种方法。

额外小提示

  • 如果需要生成整数位置,把代码里的uniform(浮点随机)换成randint(Python)或Next(C#)这类整数随机函数即可。
  • 建议把区间参数化,比如把左区间的[min_left, max_left]和右区间的[min_right, max_right]做成变量,以后调整道路宽度或区域大小的时候,直接改参数不用动逻辑。

内容的提问来源于stack exchange,提问作者Preben Tjemsland

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 03:33:41