我需要将矩形的角点移动给定量。我得到了 4 个 3D 点的列表,每个点都是一个坐标列表 ([x,y,z])。
我有这个,它工作正常,但感觉很尴尬(pts是给定的点列表,top、bot和side是移动点的给定数量):
# Get top and bottom points
upDownPts = sorted(pts, key=lambda k: [k[2]])
topPts = upDownPts[-2:]
botPts = upDownPts[0:2]
# adjust their Z coords
topPts[0][2] = topPts[0][2] - top
topPts[1][2] = topPts[1][2] - top
botPts[0][2] = botPts[0][2] + bot
botPts[1][2] = botPts[1][2] + bot
# Get left and right points
leftRightPts = sorted(pts, key=lambda k: [k[1]])
leftPts = leftRightPts[0:2]
rightPts = leftRightPts[-2:]
# adjust their Y coords
leftPts[0][1] = leftPts[0][1] + side
leftPts[1][1] = leftPts[1][1] + side
rightPts[0][1] = rightPts[0][1] - side
rightPts[1][1] = rightPts[1][1] - side
movedPts = pts
特别是,加法和减法看起来应该是列表理解或其他东西,但我无法使语法工作,所以只能诉诸暴力。
有任何建议欢迎提出!
您可以使用增强的
+=
和 -=
运算符来缩短每行 -
但除此之外,由于坐标是通过数字索引而不是属性进行操作的,所以我想拥有此片段中的所有显式行比在坐标索引上进行迭代更具可读性,并且然后在操作信号上 - 即使这样,您可能最好使用基于语句的for
循环和显式块,因为理解对于新值的分配并不友好)