确定特定像素是否在形状处理中

时间:2017-12-12 05:05:05

标签: java geometry processing pixel hexagonal-tiles

我正在创建一个图像过滤器,通过查找六边形组的平均值来创建蜂窝效果。 此代码将为任何给定大小生成六边形网格,并最终将限制为画布的大小:

float unitSize = 20;
float eqTriH = 0.8660254;
int cellsX;
int cellsY;
void setup() {
  size(700, 700);
  cellsX = int(width/(unitSize*3));
  cellsY = int(height/(unitSize*eqTriH*2+eqTriH));
  smooth();
}

void draw() {
  for (int i = 0; i < cellsX; i++) {
    for (int j = 0; j < cellsY; j++) {
      beginShape();
      for (int k = 0; k < 6; k++) vertex(unitSize+i*unitSize*3+cos(TWO_PI/6*k)*unitSize, unitSize*eqTriH+j*unitSize*2*eqTriH+sin(TWO_PI/6*k)*unitSize);
      endShape(CLOSE);
      beginShape();
      for (int k = 0; k < 6; k++) vertex(unitSize*2.5+i*unitSize*3+cos(TWO_PI/6*k)*unitSize, unitSize*eqTriH*2+j*unitSize*2*eqTriH+sin(TWO_PI/6*k)*unitSize);
      endShape(CLOSE);
    }
  }
}

这很好,但是,我无法弄清楚如何绘制每个六边形内的六边形数组。

如果这个问题太模糊,请告诉我,以便我可以更具体。

编辑:当我说我想确定一个像素是否在形状中时,我的意思是,一旦我能做到这一点,我就会循环,然后创建一个数组。

1 个答案:

答案 0 :(得分:1)

有两种方法:

  • 遍历所有图像像素,确定每个像素所属的六边形,并将其坐标写入相应的列表/数组

  • 栅格化每个六边形,获取扫描线 - 即用型连续像素阵列。

我认为第二种方法对你的情况更好。你有顶点的坐标。看起来你的六边形是平顶的(水平的),所以扫描上方的梯形然后扫描底部的一个。

底部梯形的伪代码:

for y = (centery; y <= centery + ysize; y++)
    left_x = (int) themostleftx + (y - centery) * eqTriH
    right_x = (int) themostright - (y - centery) * eqTriH
    get horizontal segment of pixels (left_x,y)-(right_x,y)