设计数据结构, 用来存储折叠纸飞机的步骤

硪对沵始终如⒈
  • 245

如何设计一套数据结构, 可以存储折叠纸飞机的步骤. 可以支持查询是否某种叠法以及存在. 返回给前端数据如何设计, 要求前端能根据这种数据, 动态展示折叠过程(这里只考虑前后端数据交换格式, 不讨论前端实现).


是这样的, 这个问题是我昨晚做梦梦到的, 但是把我给难醒了.. 所以我很难保证这个提的严禁性. 我尽量描述清楚.

设想有个网站, 可以动态展示 N 中叠纸飞机方法. 后台编辑人员可以添加新的叠纸飞机方法, 从表设计, api 设计来谈谈对这个业务的处理.

首先问题是如何表示折纸飞机的过程, 是不是要定义一大堆的 状态(state) 和 动作(action). 然后每一个步骤都可以简单描述为 初始状态的一张平铺展开的纸, 经过 N 个动作, 切换到 N 种状态.

那么数据表就只需要存储一堆状态. (或者用有向图表示状态改变?) ....

评论
阅读 304
3 个回答

既然是步骤的,那就是有序的,有序的那基本就是数组或链表

最重要的不是如何存储,而是前端你怎么显示,显然这个是最难的。是使用现成的框架改造,还是自己写一个渲染器?那么这个东西本身就有数据要求,有了这个再讨论后台存储。

你都说了有 n 个有序的步骤,那你就整一个长度为 n 的数组,每个元素是一个步骤
那根据我的经验折纸飞机无非就两个类型的步骤,(1) 折 (2) 旋转。

那你再细分,旋转比较简单,比如有的折纸书里把图形给你转 180 度便于观察,那就存个 degree: number 呗。
那可能还需要翻面,那就再存个 ifTurnOver: boolean 呗。
如果你有把飞机立起来的需求,也行。

折的话会复杂一些,据我所知不存在弯的折法,吧,也就是说任何一条折痕都可以用线段来描述,因此你需要 x1, y1, x2, y2: number。然后折还存在正着折反着折,那就 direction: "in" | "out" 可能直观一些。存个 bool 也行吧。

鉴于我的折纸水平仅限于此,其他折法,就暂时不写了吧()

宣传栏