七巧板复原算法探讨之二——七巧板的表示

通常意义的七巧板就是个多边形,凸的或者凹的,因此只要确定了顶点,这个七巧板就确定了。简单查了一下多边形的表示方法,我决定采用顶点表示法,再加上考虑后面的计算需要,初步采用下面的链表结构,C# 表示法。 采用自定义的混合链表结构,这样遍历和定位时比较方便。

结构定义

 class Vertex {
 	Point pnt;
 	int idx;
 	int last_idx;
 	int next_idx;
 	double center ;// the angle formed by the two sides from this vertex、
 	double lastLen;// the side length to the last point 
 	double nextLen:// the side length to the next point 
  class  Polygon{
 	private vertex[] vertex;// The set of all the vertex of the polygon 
 	private int firstPnt;// used to recored the first point of the polygon which is is dynamic one
 	Public Vertex GetLastVertex(int idx);
 	Public Vertex GetNexVertex(int idx);
 	Public Rotate(Point pnt);
 	
 }

坐标系

坐标系的建立,以七巧板的盒子的两条边为XY轴建立平面直角坐标系,为了减少计算量,准备让它的Y轴方向和屏幕坐标一致。
如图示:
在这里插入图片描述
七巧板的部件的初始定义坐标, 首个顶点就是(0,0),按顺时针方向,第一条边和X轴重合,计算过程当中要进行平移和旋转。
如图示:

在这里插入图片描述
盒子的表示,显然是相同的坐标系,采用和七巧板相同的表示法,是一个矩形。
可能用到 函数
覆盖检测,边界检测,角度匹配,长度匹配,这里面要考虑计算误差,因为实际的七巧板是有误差的,数据准备时也会存在误差。

覆盖检测

可以采用两种方式,一种是利用图像处理有关的API,将七巧板部件和容器都转换成IMG ,将七巧板部件在这个容器里,通过图像的计算技术,检测是否有覆盖。这种方法比较简单,但是效率会很低。另一种方法就是利用计算机图形学技术,计算点线面的空间几何关系。
经过思考,只要考察部件的顶点是否在多边形内部就可以了。而这样的算法是已经很成熟了,网上有很多。原理简介如下(抄的)

判断一个点是否在多边形内部的方法有很多,射线法是其中比较容易理解且容易实现的算法。

参考:https://www.cnblogs.com/charlee44/p/10704156.html
原文引用如下:

判断平面内点是否在多边形内有多种算法,其中射线法是其中比较好理解的一种,而且能够支持凹多边形的情况。该算法的思路很简单,就是从目标点出发引一条射线,看这条射线和多边形所有边的交点数目。如果有奇数个交点,则说明在内部,如果有偶数个交点,则说明在外部。如下图所示:

该图出处同上

在这里插入图片描述
特殊处理:
此图出处:https://blog.csdn.net/WilliamSun0122/article/details/77994526
在这里插入图片描述
maraSun 2022-03-21 BJFWDQ
思路渐渐清晰,文章可能比较乱。我会在代码完成之后,慢慢整理。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值