数学从级别堆栈获得相对比例

为可怕的头衔道歉。 我花了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)。

了解级别的大小,逻辑非常简单。

  1. 取当前级别的大小,乘以用户比例。 调用此newSize
  2. 找到大小大于该数字的最低级别。 调用此targetLevel
  3. 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开始):
level(x)= baseSize * 2 <sup/> x-1 </ sup>“></p>
<p> 为简单起见,我们假设你有 <img src= 而你正在努力寻找 电平(Y)

看怎么样 水平(x)的 定义,你可以看到

2 <sup/> a </ sup> * level(x)= level(x + a)”></p>
<p> 但是,你的比例不是像2那样以2的整齐权力给出,所以你可以找到一个具有以下内容(根据你的场景进行四舍五入): </p>
<p><img src=

这个简单的匹配游戏使用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); }