这种事情很难。
有趣的是,这里可能主要的实际初始约束是排版的大小。
在给出的示例中:观察他们可能选择了不同的 SCPT** 稍大(可能大 10%-15%)或稍小它仍然可以工作。他们对 SCPT 做出了美学决定。
空白对设计至关重要。他们特别的平面设计师碰巧喜欢你看到的白色空间的特殊感觉。但对于较小的 SCTP,它绝不会是“错误的”。此外,请注意他们本可以使用更大的 SCPT ... IF ... 他们在排版上使用更小的磅值。
请注意,在任何情况下,您都无法在 iPad(或 Fone4)上显示这么小的字体。
因此,您必须立即决定字体的显示方式、弹出窗口、音频或其他内容。即使是白色类型(“盘上”类型)也会给您带来麻烦。
在继续使用算法之前,您必须先在 iPad 上使用 Photoshop 进行大量测试。所以纯粹是为了它的价值......
这就是我个人会做这种事情的方式。总体计划:我会尝试做一个软弱的算法,它会自行重试,直到找到满意的结果。
恕我直言,基于之前做过的这类事情:这个问题太难用一些特别聪明的启发式方法一次性解决了。由于没有一种聪明的启发式方法可以挽救这一天,我会这样做:
1) 计算要显示的总万亿。 (看起来示例图像中的总数约为 2.5)
2) 猜测一个 SCPT 值开始。例如“18”基于我们在上面看到的屏幕尺寸的实际图像,如您的问题中发布的那样。
3)把大的(太阳)放在死点,中间的(行星)——只要选择一个非常简单的启发式,从左上角逆时针从大到小怎么样(不要'不要试图在问题的那一部分上变得比这更聪明——这确实可能是一个纯粹靠它自己的巨大研究项目).. 对小的(卫星)做同样的事情。
4) 对于行星和卫星之间的棍子 - 采用一个简单的解决方案(比如“总是 0.5 厘米”!!)就是这样。有了人工智能,你必须减少损失......无处不在! :) 将卫星固定在行星上,然后忘记它们。
5) 现在是困难的部分.. 对它们运行某种启发式方法均匀地平衡你到目前为止所拥有的东西。 将颜色视为质量,无色视为无质量,并移动“太阳”,直到它达到平衡。 (要清楚,作为一个例子,如果你遵循 3 中提到的“行星”布局,可能会向下移动。)也可以将所有行星/月球系统移入移出以尝试平衡它。
6) 接下来的迭代。看看这个结果,然后决定你是否喜欢它!返回 (2) 并选择一个新值。(例如“16!”)
(7) 这里有两种可能的结果。 可能是在开发过程中,SCPT 有一个神奇的值始终有效。可能是“14.3”或“18.2”或其他。 如果你发现了这样的价值,千万不要告诉任何人。将其作为您自己的秘密信息!!!! 为客户提供价值。相反,更困难的是,您可能会发现每次都需要不同的值。在这种情况下:您的 AI 将不得不自己遍历值,直到 找到它喜欢的值。 (例如,通过确定您的所有标签是否适合......以及诸如“它们是否在触摸”“所有在屏幕上”等明显的东西。)
无论如何,FWIW(也许什么都不会)这就是我会做的 - 基于对 SCPT 的第一次猜测的迭代方法。
顺便说一句:您可能很想购买和研究关于这种信息显示的经典而精彩的书!每个人都应该有一份副本。
Tufte 的 量化信息的可视化展示
爱德华·R·塔夫特
国际标准书号 0961392142
关于布局图像的机制。您应该使用石英或任何其他低级绘图 - 忘记 UIView 等。您当然应该将逻辑与绘图层完全分离,因此(即使您确实想更改为 UIViews、OpenGLES 或其他)只需更改几行代码。
希望能有所帮助。
笔记...
** SCPT .. 每万亿平方厘米
跟进...
“为了保持逻辑分离,您会使用管理器类型的模式吗?”
老实说:如果我这样做了,我会开始一个全新的应用程序,纯粹是为了“研究”让这部分,这个挑战,正常工作。在那个应用程序中(说实话!)我会尽一切努力以任何整洁的方式做任何事情! :-/ 全球各地! :) 不幸的是,我一次只能想到一件事,所以在那个阶段我只会考虑算法本身。
我相信,一旦你解决了问题本身,一旦你开始在一个更大的项目中实施它......真的,FWIW,如果是我,我只会让它成为一个类(比如说 AmazingClass)什么都没有比这更复杂。就我个人而言,我会将数据单独设置在某个地方(无论是在数据库中还是在数组中或其他任何地方),我什至会让 AmazingClass 负责获取数据。 (我的想法 - 你永远不知道你将如何需要数据,以及在 AmazingClass 过程中的什么时间点。所以,放弃吧,让 AmazingClass 在它需要的时候接受它。)
如果您熟悉您所说的这些听起来很棒的经理模式 - 是的,为什么不呢!简而言之,我会尽可能地把它分开。我还不够好,无法谈论做到这一点的最佳方式——但只是将它完全分开在某个地方。抱歉,我帮不上那个忙。