gpt4 book ai didi

java - 确定特定像素是否在形状处理内

转载 作者:行者123 更新时间:2023-12-02 11:52:57 26 4
gpt4 key购买 nike

我正在创建一个图像过滤器,它将通过查找六边形组的平均值来创建蜂窝效果。此代码将生成任意给定尺寸的六边形网格,并且最终将限制于 Canvas 的尺寸:

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);
}
}
}

这工作正常,但是,我不知道如何为绘制的每个六边形获取每个六边形内的像素位置数组。

如果这个问题太模糊,请告诉我,以便我得到更具体的信息。

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

最佳答案

有两种方法:

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

  • 光栅化每个六边形,获取扫描线 - 即用型连续像素数组。

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

底部梯形的伪代码:

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)

关于java - 确定特定像素是否在形状处理内,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47765646/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com