作为我previous question的后续行动,我能够找到照片轮廓,细化它,然后接收2D点图。我现在正试图从这些观点中推导出一些群体,希望能够转向类似于以下内容的群体:
以下内容:
或以下:
规则是组必须是函数,这意味着给定任何x值,将其输入f(x),您将只收到一个y值。这通常意味着遵循垂直线测试,但f(y)结果只有一个x值也会起作用(在水平线测试之后)。我目前正在使用以下内容:
public void loadFunctions() {
functions.clear();
thinOutline();
int i = 0;
functions.add(new Function());
for (int y = 0; y < originalHeight; y++)
for (int x = 0; x < originalWidth; x++)
if (thinned[x][y]) {
if (functions.get(i).containsX(x)) {
functions.get(i).loadPoly();
functions.add(new Function());
i++;
}
functions.get(i).addPoint(x, y);
}
}
这既有效又有效。我得到的所有线都遵循垂直线测试,但因为我从上到下迭代,我可以得到这样的东西:
而不是:
请注意,我只是要求解决方案将飞机上的点分组。我不需要求解函数的解决方案,这是我已经解决的另一个问题