gpt4 book ai didi

c# - 用C#以一定概率触发事件

转载 作者:太空狗 更新时间:2023-10-29 21:46:12 26 4
gpt4 key购买 nike

我正在尝试模拟真实的按键事件。出于这个原因,我使用 SendInput() 方法,但为了获得更好的结果,我需要指定 keyDOWN 和 KeyUP 事件之间的延迟!下面的这些数字显示了 DOWN 和 UP 事件之间耗时(以毫秒为单位)(这些是真实/有效的):

969511211111910414396951041201121118810411911110395104951271121431441421431281441121111121201281111351181479613510364648779112881111111121111048795

我们可以简化输出:

延迟 64 - 88 毫秒 -> 20% 的时间

延迟 89 - 135 毫秒 -> 60% 的时间

延迟 136 - 150 毫秒 -> 20% 的时间

如何根据上述概率触发事件?这是我现在使用的代码:

        private void button2_Click(object sender, EventArgs e)
{
textBox2.Focus();
Random r = new Random();
int rez = r.Next(0, 5); // 0,1,2,3,4 - five numbers total

if (rez == 0) // if 20% (1/5)
{
Random r2 = new Random();
textBox2.AppendText(" " + rez + " " + r2.Next(64, 88) + Environment.NewLine);
// do stuff
}
else if (rez == 4)//if 20% (1/5)
{
Random r3 = new Random();
textBox2.AppendText(" " + rez + " " + r3.Next(89, 135) + Environment.NewLine);
// do stuff

}
else // if 1 or 2 or 3 (3/5) -> 60%
{
Random r4 = new Random();
textBox2.AppendText(" " + rez + " " + r4.Next(136, 150) + Environment.NewLine);
// do stuff

}

}

这段代码有一个大问题。理论上,经过数百万次迭代后,生成的图形将类似于以下内容:

comparison

如何处理这个问题?

编辑:解决方案是按照人们的建议使用分发。

这里是此类代码的java实现:

http://docs.oracle.com/javase/1.4.2/docs/api/java/util/Random.html#nextGaussian%28%29

这是 C# 实现:

How to generate normally distributed random from an integer range?

尽管我建议稍微降低“偏差”的值。

这是一篇有趣的 msdn 文章

http://blogs.msdn.com/b/ericlippert/archive/2012/02/21/generating-random-non-uniform-data-in-c.aspx

谢谢大家的帮助!

最佳答案

听起来您需要生成正态分布。内置 .NET 类生成一个 Uniform Distribution .

通过使用 Box-Muller transform 可以使用内置的 Random 类生成高斯或正态分布随机数。 .

你最终应该得到这样一条漂亮的概率曲线

Normal Distribution

(取自http://en.wikipedia.org/wiki/Normal_distribution)

要将正态分布的随机数转换为整数范围,Box-Muller 转换可以再次提供帮助。看这个previous question and answer它描述了过程和数学证明的链接。

关于c# - 用C#以一定概率触发事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10382229/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com