如图所示,(请忽略图上的误差,默认三个多边形四边长度相等,倾角相等)蓝色多边形和矩形是橙色多边形和矩形旋转得来,绿色多边形和矩形是橙色多边形和矩形镜面效果后得来已知橙色多边形的各点坐标,橙色矩形的各点坐标。现有一多边形(绿色,各点坐标已知),我如何知道绿色多边形是橙色多边形的镜面效果?现有一多边形(蓝色,各点坐标已知),我如何知道绿色多边形是橙色多边形旋转的效果?另外如果取橙色矩形左下角坐标为基准,如何找到蓝色矩形及绿色矩形相应点的坐标实际应用中三套图形分别在不同的文件中,所以三套坐标之间没有联系。谢谢
(2)以公共点为坐标原点
(3)如果是镜面,任一点的坐标应该是一个相同,一个相反,比如(x, y) <==> (x, -y)
(4)如果是旋转:非平移,非镜像状态
如有差错,请楼下补充或修改
两个图的宽高一样。
w = 图宽, 单位像素
遍历橙色图的每一个点(x,y) x,y 的单位像素
如果是白色 则 绿色图 的 (w -x ,y) 也是白色
如果是橙色色 则 绿色图 的 (w -x ,y) 是绿色旋转的话,宽高不一定一致,很难搞,没有具体思路。
大概想法是 先找出4个顶点的坐标,判断旋转了多少度,
然后把橙色图也旋转同样角度,再比较,好像是比较笨的办法。
点的坐标x,y均不相等,比如相邻两
点为(x1,y1)和(x2,y2),则x1<>x2
并且y1<>y2;而镜像的相邻两点必
有一轴相等,比如相邻两点为(x1,y1)
和(x2,y2),则x1=x2或y1=y2。如此发散一下思维,应该能得一种方法。
1 相同,即没有旋转和镜向。
2 镜向
3.旋转分别将每个多边形(其实就是棱形)的长短对角线与X轴正方向的角度求出来,funcA:
如果两个多边形的这2个值相等,则为情况1。
如果不为情况1,则进行如下算法 funcB:
以 funcA 中得到的两个多边形的长对角线和X轴正方向的角度为旋转角度进行旋转运算,旋转完成后,进行funcA, 如果相同,则为情况2,否则为情况3.
(1)先将橙色多边形的一个顶点移动到原点,将其中一条边转到+X轴上,作为标准图形。图中所示正好。
(2)无论绿色图形还是蓝色图形:
(a)分别将4个顶点移到原点,再分别将每个顶点上的两条边转到+X轴上,一共8个图形,只要这8个图形之一与(1)中的标准图形相等,那么该种颜色的原始图形是通过橙色图形旋转得到的。
(b)将(a)中的8个图形按X轴镜像,得到新的8个图形,只要这8个图形之一与(1)中的标准图形相等,那么该种颜色的原始图形是通过橙色图形镜像得到的。任意多边形以此类推。
再不行恐怕要动用人件了。
某多边形A1-A2-A3-...-An的各个顶点所对应的角为,角A1,A2,A3,...,角An。
另一个多边形B1-B2-B3-...-Bn的各个顶点所对应的角为,角B1,B2,B3,...,角Bn。中心对称:
由于两多边形的顶角都为n个,因此按顺时针的顺序依次标记其中一多边形各角,会获得n种结果,另同。
因此当两图形比对时,最多需要比较n^2次,这里只要按顺序匹对,并依次比对角度时,一次中两图形的角度全部吻合,即两多边形是关于中心对称。
轴对称:
就需要将两个多边形顺时针顺序分别标记顶点,然后把标记的顶点按顺序匹对,并依次连接成线段,取每条线段的中点,得到n各点,只需判断这n各点共线,那么就是轴对称。那么就可以开始比较两图形内部的矩形。首先需要将两多边形重合起来,是轴对称的先再次翻转一次,否则即可按上面的结果,把两多边形的各个相应的顶点平移至同一坐标点。此时外部的两多边形已经重合在一起。
这里首先判断内部的矩形的中心点是否能够重合,能,则进行下一步。直接判断两个位于多边形内部的矩形,在经过上述的平移后,是否能够重合在一起,方法略。
由此之下,只要内部的两矩形在外部的多边形重合在一起时,两矩形也重合。就可以得到上述的两个象构成的图形,是轴对称图形,还是中心对称图形。
附:要通过点对点进行比对也可以,但是关键是使用【上下文识别坐标系】,基本如下图所示: