如何生成钟形曲线(高斯函数)

5
我希望能够生成钟形曲线,用于在游戏中进行程序化生成的概率计算。 例如,如果我想生成一片森林,我可以给它一个半径和强度,并制作出合适形状的钟形曲线来确定是否应该放置树木。在中心区域会有很多树木,而当距离中心半径越远时,树木数量会逐渐减少。
我之前使用正弦波做过类似的事情,但我不知道如何制作钟形曲线。这些方程式对我来说就像希腊语一样难以理解。我已经忘记了如何阅读它们,但这对电脑来说也是希腊语。
请问是否有人能够用C#(或Python作为第二选择)写下钟形曲线的方程,并进行简单的解释?

2
我认为很清楚,Guye正在寻找一种表达式,给定一个变量(他称之为“强度”...我们可以假设他将在这里提供随机值,因为他说它是“用于概率的”),产生一个值(树放置的半径系数)。结合随机方向,这就足以以高斯分布距离从中心点绘制树木。 - Christopher McGowan
1个回答

11

可以的。

p(x) = exp(-(x-mu)^2/(2*sigma^2))/sqrt(2*pi*sigma^2)

钟形曲线也称为高斯概率分布。本质上是将e的负平方幂应用于x值。其余部分是确保在模拟特定问题时以mu为中心并按比例缩放,并确保在所有x值上积分总和为1。

要在Python中从这个分布生成随机样本,可以执行以下操作:

import random

sample = random.gauss(mu, sigma)
# where mu is the center of the bell curve, and sigma is proportional to its "width"

如果您想要一个二维钟形曲线,那么知道您可以像上面一样分别找到XY值,并且2D图表将是一个二维钟形曲线,其中密度在中心点(mu_x, mu_y)处最高。


请问一下,mu是什么意思?它可以从Gamma值中推导出来吗? - SepehrM
1
mu通常用于分布的平均值(也就是定义钟形曲线峰值的平均值)。对于二维分布,mu_x是沿x维度分布的平均值,mu_y是沿y维度相应的平均值。我不确定你所指的Gamma值是什么。 - mikeTronix
谢谢你的澄清,Mike。我把它错认为其他函数了。 - SepehrM

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接