【问题标题】:Logarithmic growth with min and max values具有最小值和最大值的对数增长
【发布时间】:2018-03-12 18:37:37
【问题描述】:

我试图在 WPF 中的游戏中“伪造 3D”。想象一条路,物体出现在远处的某个地方。当它们靠近时,它们看起来更大,最终它们的大小增长得非常快。

我在想当物体出现时,它的宽度和高度都接近于0。当它向玩家移动时,它会变得接近其真实大小的 100%。

我想我需要使用对数计算来解决这个问题,并且有几个线程。然而,我真正想做的是将三个值发送到 LogaritmicGrowth 方法:

  • 起始 Y 点
  • 对象应以 100% 出现的点
  • 此时对象所在的 y 点。

因此,我希望得到的回报是相关对象的比例因子。所以如果它在起点和终点的中间,那么可能应该返回0.3(左右)。

我可以自己编写方法输入和输出,但在计算方面需要帮助。谢谢!

【问题讨论】:

标签: c# logarithm


【解决方案1】:

我不完全确定这里日志的使用。这是一个简单的几何问题。

考虑一个点 P,它距离你前方 D,高度为 Y(从你的观察线) .您的屏幕距离您前方 d 的距离。来自P的光线在屏幕上的交点是p,这使得屏幕上的高度为y

那么,通过考虑相似三角形,可以证明:

y = (Y/D) d

【讨论】:

  • 谢谢,但这并不能满足我真正想要的。有关代码,请参见下面我自己的答案。 (基本上,我正在做的是使用指数增长。)
【解决方案2】:

以防万一其他人将来看到这个问题,这是正确的答复(我自己想出来的):

    /// <summary>
    ///  Method that enlargens the kind of object sent in
    /// </summary>
    public void ExponentialGrowth2(string name, float startY, float endY)
    {
        float totalDistance = endY - startY;
        float currentY = 0;

        for (int i = 0; i < Bodies.Bodylist.Count; i++)
        {
            if (Bodies.Bodylist[i].Name.StartsWith(name)) //looks for all bodies of this type
            {
                currentY = Bodies.Bodylist[i].PosY;
                float distance = currentY - startY + (float)Bodies.Bodylist[i].circle.Height;
                float fraction = distance / totalDistance; //such as 0.8

                Bodies.Bodylist[i].circle.Width = Bodies.Bodylist[i].OriginalWidth * Math.Pow(fraction, 3);
                Bodies.Bodylist[i].circle.Height = Bodies.Bodylist[i].OriginalHeight * Math.Pow(fraction, 3);

            }
        }
    }

该方法可以进一步研究,例如允许随机功率值(例如从 1.5 到 4.5)。请注意,指数值越高,效果越大。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-03
    • 1970-01-01
    • 2018-10-05
    • 1970-01-01
    • 1970-01-01
    • 2014-06-21
    相关资源
    最近更新 更多