【发布时间】:2018-11-15 07:57:31
【问题描述】:
我有点问题。任务是拍照,通过 EdgeDetector 运行它,然后得到一个 3 轴矩阵打印机来绘制边缘。
我已经解决了大部分问题,但仍然存在一个主要障碍。当我通过我的 Sobel 运行我的图片并使用二进制截断时,它返回一个 0 和 255 的 2D int 数组。只是一个测试数组的示例,以便更好地理解。
255 255 255 255 255 255 255 255
255 0 0 0 255 0 0 255
255 255 0 0 0 255 255 255
255 0 0 255 255 0 0 255
255 255 255 0 255 0 0 255
255 0 255 0 0 0 0 255
255 255 255 255 255 255 255 255
然后我使用嵌套的 for 循环遍历数组,并为数组中的每个位置提供i 坐标、j 坐标和大小,如下所示。我正在使用 StringBuilder,因为我需要向 PLC 发送一个字符串。
public static void stringBuilder(int m[][])
{ // start method stringbuilder
StringBuilder sb = new StringBuilder();
for (int i = 0 ; i < m.length ; i++)
{ // start i for loop
for ( int j = 0 ; j < m[i].length ; j++)
{ // start j for loop
int magnitude = m[j][i];
/*
sb.append("(");
sb.append(i);
sb.append(",");
sb.append(j);
sb.append(")");
sb.append(" : ");
*/
if (magnitude == 0)
{
sb.append(magnitude);
sb.append(" ");
}
else
{
sb.append(magnitude);
sb.append(" ");
}
sb.append(" ");
} // end j for loop
sb.append("\n");
} // end i for loop
System.out.println(sb);
} // end method stringbuilder
我还想出了如何像这样打印连接元素的元素。这是按行,但有按列,左右对角线的方法。再次将其放入 StringBuilder。
for (int i = 0; i < n.length ; i++)
{
for (int j = 0; j < n[0].length ; j++)
{
int d = j + 1;
int e = j - 1;
if (d < n[0].length)
{
if ((n[i][j] == 0 && n[i][d] == 0) || (n[i][j] == 0 && n[i][e] == 0))
{
coordinates.append("(" + i + "," + j + ")\t");
//count ++;
}
}
}
现在问题来了。我非常希望能够向 PLC 发送一个字符串,该字符串仅包含它应该绘制的坐标。在示例数组中,我将是:
0,0 到 0,7 向上
1,0 向上; 1,1 到 1,3 下降; 1,4 向上; 1,5 到 1,6 下降; 1,7 向上
2,0 到 2,1 向上; 2,2 到 2,4 下降; 2,5 到 2,7 向上
3,0 向上 ; 3,1 到 3,2 下降; 3,3 到 3,4 向上; 3,5 到 3,6 下降; 3,7 向上
等等等等。
本质上是在数组中间获取一个元素序列。
这背后的想法是j 坐标的差异可以转化为步进电机中的多个步数。
我只是不知道该怎么做。
【问题讨论】:
标签: java arrays multidimensional-array