matrix - 3D 复杂矩阵迭代和数据操作
问题描述
我已经达到了预期的结果,但我正在尝试找到一个更优雅的解决方案。现在,它有点硬编码,这不是一个好习惯。
注意:这是一种类似于 PASCAL 的旧机器人语言。
问题:我有一个 STRUCTS 的 3D 矩阵。4 X 4 X 9,但我只关注前 4 X 4。STRUCT 有我需要操作的数据成员。
GlobalTub[i, j, k].calcPos ----这个成员是一个6 REALS (XYZWPR)的仓位类型
通过矩阵初始化是没有问题的。只是一个简单的嵌套 FOR 循环。
--Matrix Size
--numOfTubs = (X_CNT * Y_CNT * Z_CNT)
fCnt = 0
--Init Matrix
FOR i = 1 TO X_CNT DO
FOR j = 1 TO Y_CNT DO
FOR k = 1 TO Z_CNT DO
InitPos(GlobalTub[i, j, k].foundPos, 0, 0, 1, 0, 1, 1)
InitPos(GlobalTub[i, j, k].nextPos, 0, 0, 1, 0, 1, 1)
InitPos(GlobalTub[i, j, k].calcPos, 0, 0, 1, 0, 1, 1)
GlobalTub[i, j, k].inPlace = FALSE
--Assing Tub Number Colmun Major
fCnt = fCnt + 1
GlobalTub[i, j, k].tubNum = fCnt
ENDFOR
ENDFOR
ENDFOR
现在我必须对这个 STRUCTS 矩阵进行“托盘化”。现在我只是使用硬编码流程在 X 中迭代 4 个 STRUCTS,在 Y 中移动,然后继续下一个 4。
--Used for Testing
--1 to 4
FOR i = 1 to 4 DO
TubPos[i] = tempXYZ
tempXYZ.X = tempXYZ.X + (xPitch + xTolerance)
ENDFOR
tempXYZ = TubPos[1]
tempXYZ.Y = tempXYZ.Y + (yPitch + yTolerance)
-- 5 to 8
FOR i = 1 to 4 DO
TubPos[i + 4] = tempXYZ
tempXYZ.X = tempXYZ.X + (xPitch + xTolerance)
ENDFOR
如何使用嵌套的 FOR 循环来实现这一目标?零件托盘
解决方案
我回答了我自己的问题....刚刚敲定了。
--Init Loop Counter
fCnt = 1
FOR j = 1 TO Y_CNT DO
--Place 4 positions in X
FOR i = 1 to X_CNT DO
TubPos[fCnt] = tempXYZ
tempXYZ.X = tempXYZ.X + (xPitch + xTolerance)
fCnt = fCnt + 1
ENDFOR
--Shift Y position for next 4 Rows
tempXYZ = TubPos[fCnt-1]
tempXYZ.X = tempXYZ.X - ((xPitch + xTolerance) * (X_CNT - 1))
tempXYZ.Y = tempXYZ.Y + (yPitch + yTolerance)
ENDFOR
这是我的输出 位置
推荐阅读
- javascript - Next.js ISR(增量静态再生),如何在间隔/ISR时间开始之前手动或动态重建或更新特定页面?
- windows - 为 Firebase 模拟器打包 JSON 脚本
- javascript - 在 Javascript 中初始化和创建数组
- html - 从重叠的两个元素填充
- java - 如何通过 curl 使用斯坦福 NLP POS 标记器
- azure - 如何阻止公共 git 帐户期望防火墙上的组织帐户
- javascript - 异步和等待后未加载 JavaScript 数据
- python - django modal应该有一个单独的视图吗?
- regex - 飞镖,正则表达式,如何不允许特殊字符?
- java - AWS Lambda:如何将多个参数传递给一个方法?