一些背景信息:我正在开发一个转换器,用于连接一个输出XML格式的地图制作软件(Tiled)和一个接收lua表格的引擎(Angel2D)。大部分内容都很简单。
然而,Tiled输出像素偏移量(绝对值的整数),而Angel2D输入OpenGL单位(相对值的浮点数);需要一个这两者之间的转换因子(例如32px=1gu)。由于OpenGL单位是抽象的,并且如果对象太小或太大,则摄像机可以缩放,实际的转换因子并不重要;我可以使用一个随机数,用户只需缩放即可。
但最好选择这样的转换因子,使得大多数输出数字都是小数或小数部分,因为这样更容易处理(而OpenGL单位的整个目的就是易于处理)。
如何可靠地找到这样的转换因子?
我最初尝试使用给定的最小数字;这导致没有小于1的分数,但通常会导致因子不对齐而产生很多小数位。
然后我尝试了序列的模式,这导致可能的最大数量的1,但通常会导致非常长的背景图像浮点数。
我的当前方法是获取整个序列的GCD,当它起作用时,效果很好,但单个坏苹果容易使其失效。
请注意,虽然我可以轻松地传递我得到的数字,或选择一些固定因子,或使用我上面指定的转换之一,但我正在寻找可靠地将这个整数列表缩放为小的整数或简单分数的方法,因为这最可能对最终用户来说不会出乎意料;这不是一次性的转换。
最终用户倾向于将1.0作为操作的“基础”(因为它简单明了),因此实体的大小更接近于这个值。
然而,Tiled输出像素偏移量(绝对值的整数),而Angel2D输入OpenGL单位(相对值的浮点数);需要一个这两者之间的转换因子(例如32px=1gu)。由于OpenGL单位是抽象的,并且如果对象太小或太大,则摄像机可以缩放,实际的转换因子并不重要;我可以使用一个随机数,用户只需缩放即可。
但最好选择这样的转换因子,使得大多数输出数字都是小数或小数部分,因为这样更容易处理(而OpenGL单位的整个目的就是易于处理)。
如何可靠地找到这样的转换因子?
我最初尝试使用给定的最小数字;这导致没有小于1的分数,但通常会导致因子不对齐而产生很多小数位。
然后我尝试了序列的模式,这导致可能的最大数量的1,但通常会导致非常长的背景图像浮点数。
我的当前方法是获取整个序列的GCD,当它起作用时,效果很好,但单个坏苹果容易使其失效。
请注意,虽然我可以轻松地传递我得到的数字,或选择一些固定因子,或使用我上面指定的转换之一,但我正在寻找可靠地将这个整数列表缩放为小的整数或简单分数的方法,因为这最可能对最终用户来说不会出乎意料;这不是一次性的转换。
最终用户倾向于将1.0作为操作的“基础”(因为它简单明了),因此实体的大小更接近于这个值。