【问题标题】:Randomized smooth direction change随机平滑方向变化
【发布时间】:2019-09-20 06:04:59
【问题描述】:

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

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

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

【问题讨论】:

  • 所以...您对算法的描述是您的代码块...但它不会产生预期的结果...那么我们究竟应该如何帮助您?
  • "问题是我没有得到预期的结果。"那么您期望的结果是什么?
  • @SamAxe 抱歉,我想不出一个结果正确的样本。但这里的问题是每次迭代的角度变化应该最大为 10 度。
  • @Code-Apprentice 抱歉,我加了解释

标签: c# algorithm


【解决方案1】:

如果我错了,请纠正我,但您目前在调用 Math.CosMath.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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多