某天脑子突然抽筋了,想着既然有方形的矩阵,为什么不来一个圆形的圆阵来储存内容呢,于是就写了一个小python包,CirMatCoder。。。。。。
不过实施证明矩阵是有矩阵的道理,就像电脑内图片的储存一样,都是以矩形来存储像素点的,对于各种图形的存取,都是在矩形里进行填充形成的,不过如果把圆阵线性化,可能会有一些不同,至少让数据看起来很乱,无章,然后就还是决定写了下,可能也会有别的可能的用处(可能)
先放上GitHub的项目链接 (内含readme说明文档)
GitHub - WhatMelonGua/CirMatCoder: A python package for secret coding
然后,,,虽然很奇怪,我们还是来看下效果
from CirMatCoder import * Cir = CirMapping(['a','b','c'],7,1,[4,4],['0']) Cir.ShowCir()
执行输出:
001- . . . ['0', '0', '0']
002- . . ['0', '0', '0', '0', '0']
003- . ['0', '0', '0', '0', '0', '0']
004- . ['0', '0', '0', 'a', 'b', 'c', '0']
005- . ['0', '0', '0', '0', '0', '0']
006- . . ['0', '0', '0', '0', '0']
007- . . . ['0', '0', '0']
这样,我们的数据['a','b','c'],就存在了直径7的圆阵里的 第4行、第4位。元素两两间距为1单位长度
末尾['0']代表的是未输入数据的地方,我们以'0'填充<默认传入数组仅有一个元素时,全填充此元素;而为多个元素时,将按顺序填充元素,具体参考GitHub Readme文档>
然后执行
Cir.AngleSet(math.pi/4,['A','B','C']) Cir.ShowCir()
获得输出:
001- . . . ['0', '0', '0']
002- . . ['0', '0', '0', '0', '0']
003- . ['0', '0', '0', 'B', 'C', '0']
004- . ['0', '0', '0', 'A', 'b', 'c', '0']
005- . ['0', '0', '0', '0', '0', '0']
006- . . ['0', '0', '0', '0', '0']
007- . . . ['0', '0', '0']
这样,我们在圆阵的45°方向,插入了'A','B','C'三个数据...
但是这有个错误,AngleSet是取角度sin,cos函数结果的最小整值,有时候两个相邻的数据计算得到的 行、列 数 是一样的,导致后边的数据把前边的覆盖,比如:
Cir = CirMapping([],11,1) Cir.model='Debug' #model 设置为 'Debug',一些函数会自动执行并输出结果,如下边的AngleSet Cir.AngleSet(math.pi/3,[1,2,3,4,5,6])
输出
001- . . . . [0, 0, 0, 0]
002- . . . [0, 0, 0, 0, 0, 0, 6]
003- . . [0, 0, 0, 0, 0, 0, 5, 0, 0]
004- . [0, 0, 0, 0, 0, 0, 3, 0, 0, 0]
005- . [0, 0, 0, 0, 0, 2, 0, 0, 0, 0]
006- . [0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0]
007- . [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
008- . [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
009- . . [0, 0, 0, 0, 0, 0, 0, 0, 0]
010- . . . [0, 0, 0, 0, 0, 0, 0]
011- . . . . [0, 0, 0, 0]
可以看到,4没了,被5覆盖掉了,所以这种插入方式是存在一个插入长度的,过了就会造成丢失,不过丢失的位数是对应圆阵的 直径D、数据间隔d 可以确定的。
然后这个阵呢。。。还可以镜像<原理就是数组reverse逆排序>
还可以转90°<先转为矩阵再转90°,然后再转回圆阵,然后会造成圆阵最上端数据丢失>
为了防止数据丢失,就又写了一个函数
ProtectCir(cir),可以对存满数据的圆阵扩充,让他上下左右各多一行一列。。。保证内部数据不丢失,外圈的会丢失。
因此这个包也包含了矩阵的一些功能,大家可以去GitHub了解更多
至于应用这方面吗。。。
或许大家用PIL<python的图片处理库>的时候,画圆圈,,,
大家可以试着把PIL返回的rgb索引值以data存在圆阵里,然后操作吧。。。。
然后别的什么的潜在的
真的是兴趣乱做的,大家不要当真
谢谢朋友们!
关于本人CSDN码龄的解释:
首先。。。没有六年,好像是注册的比较早
其实才一年不到,还是半吊子吊过来的啊,不要被忽悠了