繁体   English   中英

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

[英]Logarithmic growth with min and max values

我正在WPF的游戏中尝试“伪造3D”。 想想一条道路,并且物体出现在遥远的某个地方。 当它们靠近时,它们看起来更大,最终它们的尺寸很快增大。

我在想,当对象出现时,其宽度和高度接近于0。 随着它朝向播放器移动,它接近其真实大小的100%。

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

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

因此,我希望得到的是有关对象的缩放比例。 因此,如果它介于起点和终点之间,则应该返回0.3(或大约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);

            }
        }
    }

该方法可以进一步处理,例如允许随机幂乘值(例如从1.5到4.5)。 请注意,指数值越高,效果越好。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM