一个js图形分割算法

已知一个多边形由n个大小相同的方格组成(这个多边形不一定是矩形,但肯定是由正方形拼成的图形),现在要对这个图形进行切割,只能从每个方格的边缘进行切割,当点击提交时进行判断所有被切开的区域的形状与面积相同
比如这个图(百度随便找了一张格子图),红线将图形分为四块,如何判断四块的形状形同?(ps:红色的线是直的,红线只能从端点到端点的直线)
clipboard.png

阅读 4.6k
1 个回答

一个思路:

  1. 用一个数组依次存储一个块的各个顶点坐标,对这个数组定义三种变换。
  2. 定义一个平移变换:将这个图形平移放在坐标系的第一象限,并且让图形至少分别有一条边放在x轴与y轴上。计算简单,将(min(x1,x2,...),min(y1,y2,...))作为原点就可以
  3. 定义第一个90度旋转变换,让图形整体旋转90度,并用2中的平移变换防止在一象限中。这样一个图形就有了在一象限坐标中的4种表示。
  4. 定义一个上下对折变换。
  5. 这样一个图形就有了在一象限内的8种表示,可以证明以上8种表示方式是完备的。(比如左右对折可以通过上下对折加180度旋转得到)。
  6. 对比两个图形是否全等,可以对比它们对应的8种坐标表示否则存在相等的情况,。

下图是四种表示方式的一个示意,分别上下翻转就得到了另外四种:

图片描述

突然发现,采用形心做原点的话,可能会方便些,比如上下对折时只要纵坐标取反就好。另外,你可以自己想想有没有优化些的方法。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题