Algorithm Sokumenzu/侧视图生成器背后的算法

Algorithm Sokumenzu/侧视图生成器背后的算法,algorithm,text,graphics,3d,rotation,Algorithm,Text,Graphics,3d,Rotation,我偶然发现了以下新奇的网站,该网站可以生成给定输入文本的“旋转变形图”,该文本名为“旋转变形图”,可以生成动画版本的结果,例如: 我真的很想了解它背后的算法。我试着看看公开的javascript是否能帮助我做到这一点,但这是一个混乱的混乱局面,我对该语言的掌握不够坚定,以至于我不能确定真正的工作没有在服务器端完成 我大致了解了如何构建类似的系统,但它也有其自身的缺点(如果真正的方法是硬编码的,可能还有一点优势): 预计算 Define an nxnxn cube composed of equ

我偶然发现了以下新奇的网站,该网站可以生成给定输入文本的“旋转变形图”,该文本名为“旋转变形图”,可以生成动画版本的结果,例如:

我真的很想了解它背后的算法。我试着看看公开的javascript是否能帮助我做到这一点,但这是一个混乱的混乱局面,我对该语言的掌握不够坚定,以至于我不能确定真正的工作没有在服务器端完成

我大致了解了如何构建类似的系统,但它也有其自身的缺点(如果真正的方法是硬编码的,可能还有一点优势):

预计算

Define an nxnxn cube composed of equally sized sub-cubes
Each sub-cube may either contain a sphere or not
Create a virtual camera orthogonal to one of the cube's faces a fixed distance away
For each of the possible states of the cube:
    Cast rays from the camera and build up an nxn matrix of which cells appear occupied from the camera's point of view.
    Input this matrix into a neural network / other recognizer which has been pre-trained on the latin alphabet.
    If the recognizer matches a character: 
        Add the state which triggered recognition to a hashtable indexed on the character it recognized. 
        Handle collisions (there should be many) by keeping the highest confidence recognition
For every key in the hashtable
    Rotate the corresponding state in fixed increments recognizing characters as before
    If a character other than the current key is recognized:
        Add that character and the amount of rotation performed to a tuple in a list.
    Store each of these lists in the hashtable indexed on the current key.
查询

Generate all of the permutations achieved by substituting each of the characters linked in the list associated with input character at that position.
Find the first dictionary word in the list of permutations
Visualize using the rotation information stored for each character
显然,这与使用的算法不同,因为这是一个字符对一个字符的操作。我想你可以在逐字的基础上使用类似的方法,将整个卷的表面作为文本识别器的输入,但我相信他们可能已经做了一些更简单、更聪明、更高效的事情

这个糟糕想法的一个优点是,通过重新训练识别器,您可以支持其他字符集


有人知道这到底是怎么回事吗?

我觉得比这简单多了

对于每对字母(即2d对象),可以尝试查找投影到其中一个或另一个的3d对象,具体取决于从0°角度还是90°角度观察

在3d网格上查找一组3d点,根据投影情况投影到2d中的两组给定点,这看起来像是离散层析成像的问题,您可以在Wikipedia上阅读:

请注意,可以逐行处理三维造型,实际上只能求解二维实例

完成预计算后,如果有一个3d形状从不同角度生成两个字母,那么就有一个字母图,其中两个字母是链接的,我怀疑算法的工作方式如下:

计算原始单词的字母集。然后,通过将输入的字母更改为链接到的字母,探索您可以拥有的所有字母集。当你找到一组可以组成一个单词的字母时,停下来。(可能有一个预先计算的字典,可以在单词和字母集之间进行匹配)

如果一个3d形状需要投影到单词的不同部分(也就是说,你需要有一个形状投影到单词的位置2或4,这取决于它是原始单词还是另一个单词,比如D(u)ncan-Une(v)en中的u和v),你可以计算出适当的排列矩阵。像这样称呼你的名字:

杜__________

______紫外线____

__nn________

____行政长官______

________ae__

__________nn

(每对中的第一个字母是投影到左侧的字母,第二个字母是投影到底部的字母)

它由置换矩阵计算得出:

十万

000100

010000

001000

000010

000001


以及字母的匹配。(D-U,c-e…。

链接的演示似乎与预先计算的,甚至是手工制作的字母对一起工作。A.N.已经告诉你如何重新排列字母对。请注意,Sokumenzu有时无法生成另一个单词,例如“Lydia”。然后它将单词映射到自身。当它找不到与给定大小写匹配的内容时,它还会尝试使用全大写版本

如果需要更通用的解决方案,可以组合相同高度的任意位图,前提是第一个位图中至少有一个像素的每行第二个位图中也有一个像素。(因此,一个面上不能有
i
,另一个面上不能有
l
,因为
i
的标题和词干之间的行中将有一个像素)

您可以独立创建多维数据集的层。您的目标是至少有一个像素投影到两个位图的每个像素

创建每个位图的填充像素位置列表。如果其中一个列表为空,则没有解决方案。从列表中创建对,以便使用较长列表中的所有像素,并且使用较短列表中的每个像素至少一次

根据您想要实现的自上而下的外观,您可以使用各种算法。如果要创建对角线,可以使用。也可以通过随机指定对来创建分散的外观,只要每个像素至少使用一次

举例说明:

                · · · · · · · · · ·
                · · ● · · · · · ○ ○    #
                · · · · · · · · · ·
                · ● · ○ · · ○ · ● ·    #
                · ○ ○ ● · · ● · · ●    #

                  # # #     #   # #

光盘和圆圈都会产生散列模式,尽管从上面看,圆圈看起来更整洁,从透视角度看也可能更好。

感谢您指导我进行离散层析成像和排列矩阵。