gpt4 book ai didi

c# - 随机平滑方向变化

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:20:39 25 4
gpt4 key购买 nike

我有一个游戏,我想在其中进行随机移动。我写了一个算法来计算移动的方向和距离。这些目的地是圆周上的点。想象角色总是在这个圆圈的中间。为了使方向变化更顺畅,我认为每个方向变化都应该取决于前一个方向。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;

namespace randomwalk
{
class Program
{
static void Main(string[] args)
{
int? previousAngle = null;
while (true)
{
var angle = 0;
Random rnd;
if (previousAngle.HasValue)
{
rnd = new Random();
var shift = 10;
angle = previousAngle.Value + rnd.Next(shift) - shift/2;
if (angle > 359)
angle -= 180;
}
else
{
rnd = new Random();
angle = rnd.Next(359);
}
var radius = 160;
var x = Convert.ToInt32(Math.Cos(angle) * radius);
var y = Convert.ToInt32(Math.Sin(angle) * radius);
Console.WriteLine("Moved to: X:{0}, Y:{1}", x, y);
previousAngle = angle;
Thread.Sleep(1000);
}
}
}
}

问题是我没有得到预期的结果。这里的每次迭代都应该使用 0-10 之间的随机数来改变角度。实际结果中角度的变化远远超过10度,甚至感觉完全是随机的。

Actual results:
Moved to: X:5, Y:160
Moved to: X:18, Y:-159
Moved to: X:143, Y:-71
Moved to: X:109, Y:117
Moved to: X:109, Y:117

我也想知道我该如何改进它,如果已经有可用的运动算法我可以使用,也许比这更好?

最佳答案

如果我错了请纠正我,但是您当前在调用 Math.Cos 时使用的是度数和 Math.Sin框架功能。

这些函数期望输入参数在 radians 中.

有一种简单的转换算法可以将度数转换为弧度,其形式如下(如 MSDN 上的链接主题所示):

double angle = Math.PI * degrees / 180.0;

有了这些至少应该可以纠正这个变化,我并没有真正验证其余代码或其假设:)

您可以在以下 dotnetfiddle 中看到输出的变化,其输出类似于:

Moved to: X:73, Y:143
Moved to: X:82, Y:137
Moved to: X:92, Y:131
Moved to: X:101, Y:124
Moved to: X:109, Y:117
Moved to: X:117, Y:109
Moved to: X:124, Y:101
Moved to: X:131, Y:92
Moved to: X:137, Y:82

关于c# - 随机平滑方向变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58019170/

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