我正在尝试"假3D"在WPF游戏中。想象一条道路,并且物体出现在遥远的某个地方。随着它们越来越近,它们看起来更大,最终它们的尺寸变得非常快。
我认为当物体出现时,它的宽度和高度接近于0。当它向玩家移动时,它变得接近其真实大小的百分之百。
我想我需要使用对数计算来解决这个问题,并且有几个线程。然而,我真正想要做的是将三个值发送到LogaritmicGrowth方法:
因此,我想得到的是相关对象的缩放因子。因此,如果它位于起点和终点之间,那么可能会返回0.3(左右)。
我可以自己编写方法输入和输出,但需要帮助进行计算。谢谢!
答案 0 :(得分:1)
我不完全确定在这里使用日志。这是一个简单的几何问题。
想一下 P 点 D 在你面前的距离,其高度 Y (来自你的观察线) 。您的屏幕在您面前 d 距离。屏幕上 P 的光交点是 p ,这会在屏幕上显示高度 y 。
然后,通过考虑相似的三角形,可以证明:
y =(Y / D)d
答案 1 :(得分:1)
以防万一其他人在将来看这个问题,这里有正确答案(我自己想出来):
/// <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)。请注意,指数值越高,效果越大。