数学从级别堆栈获得相对比例
为可怕的头衔道歉。 我花了10分钟试图用一句话来解释这个并且失败了。
虽然提示这个问题的应用程序是在Java(Android)中,但我认为它非常通用并适用于任何语言。 Psuedo-code(或简单的英文)回复是受欢迎的。 我不确定我是否应该只标记所有常用语言,但这似乎有点垃圾。
我的实际要求与以下的一些示例相比,结构有点简单,但我会尝试简单明了地提出这个想法。
假设我有5个“图像级别”,每个级别是前一级别的两倍:
- 等级1 = 100px平方
- 2级= 200px平方
- 3级= 400px平方
- 等级4 = 800px平方
- 等级5 = 1600px平方
这些图像级别都显示相同的内容,但具有不同程度的细节(最小的图像仅显示主要特征;最大的图像显示精细的细节)。
假设我们从不想缩放较大的图像以避免失真,并且应该仅对使其变小的图像执行变换,目标是使用具有最小缩放量的最大适当图像。
假设用户处于3级(400px)并执行到1.8的缩放操作。 新的大小将是(1.8 * 400 = 720),这意味着我应该显示4级(800px),缩放到0.9(800 * 0.9 = 720)。
另一个例子 – 用户在2级并且扩展到5.2。 大小将是(5.2 * 200 = 1040)。 所以显示等级5,缩放到0.65(1600 * 0.65 = 1040)。
了解级别的大小,逻辑非常简单。
- 取当前级别的大小,乘以用户比例。 调用此
newSize
- 找到大小大于该数字的最低级别。 调用此
targetLevel
- 将
newSize
除以targetLevel
的大小。 这是相对比例。
现在让我们说我实际上并不知道图像的实际大小,并且没有办法找到它们,也许它们的确不是它们应该具有的大小(尽管它们总是会呈现前一级的两倍),并且可能有任何数量的级别。
仅使用当前级别和用户定义的比例值,获取适当的目标级别及其相对(新)比例所涉及的数学或逻辑是什么?
更多例子……
- 5级用户扩展到0.2。 新等级应为3,新等级应为0.8
- 级别1上的用户扩展到3.6。 新等级应为3,新等级应为0.9
- 级别1上的用户扩展到5.0。 新的水平应该是4,新的水平应该是0.625
- 级别2上的用户扩展到5.0。 新的水平应该是5,新的水平应该是0.625
- 级别3上的用户扩展到3.0。 新的水平应该是5,新的水平应该是0.75
- 级别4上的用户缩放到0.3。 新的水平应该是3,新的水平应该是0.6
- 级别4上的用户扩展到1.6。 新等级应为5,新等级应为0.8
- 级别4上的用户缩放到0.6。 新的水平应该是4,新的水平应该是0.6 [1]
[1]可能很明显,但任何小于1但大于0.5的东西都会保持不变
TYIA
您的“级别”可以通过以下指数函数定义(级别从1开始):
而你正在努力寻找 。
看怎么样 定义,你可以看到
这个简单的匹配游戏使用enum Game
来指定游戏的四个级别所需的常量。 通过重写toString()
(并略微违反常量的大小写), Game.values()
可用于直接填充级别选择gameCombo
。 更改级别只需要更换组件并在封闭Container
上调用validate()
。
至今…
public static void getZoom(int currentLevel, double userScale){ double ns = (1 << (currentLevel - 1)) * userScale; int newLevel = 1; int ts = 1; while(ts < ns){ ts <<= 1; newLevel++; } double newScale = ns / ts; System.out.println(newLevel + ", " + newScale); }