一个js图形分割算法

发布于 2022-09-11 16:04:53 字数 265 浏览 11 评论 0

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

山色无中 2022-09-18 16:04:53

一个思路:

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

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

图片描述

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文