具有最小值和最大值的对数增长

Logarithmic growth with min and max values

我正在尝试 "fake 3D" 在 WPF 游戏中。想想一条路,物体出现在远处的某个地方。当它们靠近时,它们看起来更大,最终它们的尺寸增长得非常快。

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

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

因此,我想在 return 中得到的是相关对象的比例因子。因此,如果它位于起点和终点之间的中间位置,那么可能应该 returned.

0.3(左右)

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

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

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

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

y = (Y/D) d

以防万一以后有人在看这个问题,这里是正确的回复(我自己想出来的):

    /// <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);

            }
        }
    }

该方法可以进一步改进,例如允许随机 power-to 值(比如从 1.5 到 4.5)。请注意,指数值越高,影响越大。