将 3D spacel 分成相同大小的块
Dividing 3D spacel into same size blocks
我有一个包含 rgb 颜色列表的数组。我想做的是对颜色进行分组,这样在做哈希映射时,我就不会有很多颜色只出现在一个像素中的条目。我决定将颜色 space 分成 64 个大小相等的箱子,并将每种颜色分配给一个箱子,然后为每个箱子而不是像素计算哈希映射。但是,我不知道如何做到这一点是一种简单的方法,我的方法如下:
int r = c.getRed();
int b = c.getBlue();
int g = c.getGreen();
//declare all bins as arrays
if (0 = < r =<63) {
if (0=< g =< 63) {
if (0=< b =< 63) {
bin1= push.c;
if (64 =<b =<126){
bin2= push.c;
if (127 =<b =< 190)
bin3 =push.c;
}
if (191 =<b =< 255)
bin4 = push.c;
}
if (64 =<g =<126){
if (0=< b =< 63) {
bin5= push.c;
if (64 =<b =<126){
bin6= push.c;
if (127 =<b =< 190)
bin7 =push.c;
}
if (191 =<b =< 255)
bin8 = push.c;
}
if (127 =<g =<190){
if (0=< b =< 63) {
bin9= push.c;
if (64 =<b =<126){
bin10= push.c;
if (127 =<b =< 190)
bin11 =push.c;
}
if (191 =<b =< 255)
bin12 = push.c;
}
if (190 =<g =<255){
if (0=< b =< 63) {
bin13= push.c;
if (64 =<b =<126){
bin14= push.c;
if (127 =<b =< 190)
bin15 =push.c;
}
if (191 =<b =< 255)
bin16 = push.c;
}
...
}
}
这个过程很乏味而且效率不高。但是我不知道其他的方法。
对于初学者来说,如果 bin 变量称为 bin1、bin2 等,则将 bin 设为数组。
然后您只需决定如何设置数组的索引 - 这只是一些数学运算。对于精确的颜色,您将范围 0..255 分成 4(0..63、64..127 等)。除以 64(舍去余数)得到相同的效果。
因此,所有这些 'if' 语句都可以替换为:
int idx = 16 * (r/64) + 4 * (g/64) + (b/64);
bin[idx] = push.c;
我有一个包含 rgb 颜色列表的数组。我想做的是对颜色进行分组,这样在做哈希映射时,我就不会有很多颜色只出现在一个像素中的条目。我决定将颜色 space 分成 64 个大小相等的箱子,并将每种颜色分配给一个箱子,然后为每个箱子而不是像素计算哈希映射。但是,我不知道如何做到这一点是一种简单的方法,我的方法如下:
int r = c.getRed();
int b = c.getBlue();
int g = c.getGreen();
//declare all bins as arrays
if (0 = < r =<63) {
if (0=< g =< 63) {
if (0=< b =< 63) {
bin1= push.c;
if (64 =<b =<126){
bin2= push.c;
if (127 =<b =< 190)
bin3 =push.c;
}
if (191 =<b =< 255)
bin4 = push.c;
}
if (64 =<g =<126){
if (0=< b =< 63) {
bin5= push.c;
if (64 =<b =<126){
bin6= push.c;
if (127 =<b =< 190)
bin7 =push.c;
}
if (191 =<b =< 255)
bin8 = push.c;
}
if (127 =<g =<190){
if (0=< b =< 63) {
bin9= push.c;
if (64 =<b =<126){
bin10= push.c;
if (127 =<b =< 190)
bin11 =push.c;
}
if (191 =<b =< 255)
bin12 = push.c;
}
if (190 =<g =<255){
if (0=< b =< 63) {
bin13= push.c;
if (64 =<b =<126){
bin14= push.c;
if (127 =<b =< 190)
bin15 =push.c;
}
if (191 =<b =< 255)
bin16 = push.c;
}
...
}
}
这个过程很乏味而且效率不高。但是我不知道其他的方法。
对于初学者来说,如果 bin 变量称为 bin1、bin2 等,则将 bin 设为数组。
然后您只需决定如何设置数组的索引 - 这只是一些数学运算。对于精确的颜色,您将范围 0..255 分成 4(0..63、64..127 等)。除以 64(舍去余数)得到相同的效果。
因此,所有这些 'if' 语句都可以替换为:
int idx = 16 * (r/64) + 4 * (g/64) + (b/64);
bin[idx] = push.c;