Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 确定特定像素是否在形状处理中_Java_Geometry_Processing_Pixel_Hexagonal Tiles - Fatal编程技术网

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

Java 确定特定像素是否在形状处理中,java,geometry,processing,pixel,hexagonal-tiles,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+eqT

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

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);
    }
  }
}
float unitSize=20;
浮动eqTriH=0.8660254;
int-cellsX;
内细胞;
无效设置(){
大小(700700);
cellsX=int(宽度/(单位大小*3));
cellsY=int(高度/(单位尺寸*eqTriH*2+eqTriH));
光滑的();
}
作废提款(){
对于(int i=0;i
这很好,但是,我不知道如何为绘制的每个六边形获取每个六边形内的像素位置数组

如果这个问题太模糊,请让我知道,这样我可以更具体


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

有两种方法:

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

  • 光栅化每个六边形,获得扫描线-准备使用连续像素阵列

我认为第二种方法更适合你的情况。你有顶点的坐标。看起来你们的六边形是平顶的(水平),所以先扫描上面的梯形,然后扫描下面的梯形

底部梯形的伪代码:

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)

对于y=(centery;y是确定点是否在六边形内的最终目标?为什么需要在实际像素上循环?你在用它们做什么?@KevinWorkman最终目标是找到多边形内所有事物的平均颜色。