今天在论坛里看到一位朋友的提问:“怎么获取大量不重复的三维坐标”,想到了这个标题。
大家都知道,电脑的24位真彩是由红绿蓝三种颜色的值组成的,每一种颜色的取值范围都是0-255这样就能表现出来相当多的颜色了。你可以把颜色列表当做一个三维空间的所有坐标。
那么怎么降维呢?想必一些人看到颜色表的时候已经明白了。明白的人可以不用看了。如果不明白就接着看。
怎么列出所有的颜色呢?当然三重循环遍历了,rgb三种颜色,每种颜色一重循环,从0-255,就可以完成所有颜色遍历了,这样遍历后的颜色值,可以存放在一个一维的颜色结构体数组里面,这个数组的元素个数,有224个,这样我们就把三维坐标降维到了一维。随机抽取一个0-224的数,就可以得到一个三维坐标。
// 只是伪代码
typedef struct
{
unsigned char r;
unsigned char g;
unsigned char b;
} color;
color allColors[16777215];
int r,g,b;
int i = 0;
for(r = 0; r <= 255; r++)
{
for(g = 0; g <= 255; g++)
{
for (b = 0; b <= 255; b++)
{
allColors[i].r = r;
allColors[i].g = g;
allColors[i].b = b;
}
}
}
但是等等,我还要三重循环干嘛?直接随机获取一个0-224的数,低位的三个字节分开一下不就一下得到了,一个三维坐标了吗?没错三维降维到一维不算什么,我们可以直接降到0维。但是为了达到题目的要求“不重复”,我们还是需要一个一维空间存放已经用过的坐标,所以为了保证信息还有意义,就至少还要保留一维空间。
如果要降维到了0维,那就是黑洞了,黑洞无毛,只能有一些基本信息保留(这里就是取值上限,下限,升维规律),其他的信息都会化为虚无,当然你也可以说这个零维黑洞吞噬了整个空间,整个空间都是由一个奇点爆炸而来。
说了那么多玄之又玄的东西,可以看出来,我们可以在降维的时候保留高维信息的,只要不降到0维,我们都可以用低维表示出来高维。所以我为我们人类把科技提升到三体人的水平打下了基础:p,快来感谢我吧:p