[英]Print the coordinates of the highest point of an .obj file?
我从来没有用 Python 处理过 3D 对象,所以我觉得有点迷茫。
我想知道是否可以创建一个程序来检测 3D 对象(.obj 格式)的最高点并给出它们的坐标。
我有一个关于比较 3D 对象的每个点并只返回最高点的坐标的想法。
我会很感激任何帮助,即使只是告诉我在哪里看。
编辑:我创建了一个返回对象最大高度的程序。
它有效,但我怎么能让它不仅返回最高点的最大高度,还返回它与另一个轴的坐标?
例如,它会返回:最高点在 5.04 m。 它的坐标是 (xxx, xxx, 5.04)。 有没有办法打印给定点的坐标?
编辑 2:这是我的实际代码。 它返回 .obj 的最大高度。 我希望它返回最高点的 3 轴坐标。
是否可以将此代码不应用于整个对象,而仅应用于其中的一部分? (例如:检测 x 轴和 y 轴上精确间隔之间 z 上的最高点?)我不知道如何使用 python 处理坐标
import sys
filename = 'test2.obj' # sys.argv[1]
x, y, z = [], [], []
with open(filename) as f:
for line in f:
line = line[:-1].split(' ')
if line[0] == 'v':
y.append(float(line[2]))
print('height max = ' + str(max(y)) + ' m')
input()
编辑 2:这是我的实际代码。 它返回 .obj 的最大高度。 我希望它返回最高点的 3 轴坐标。
在您的代码中,您只附加到列表y
。 您还需要附加到相应的x
和y
列表。 然后,您可以在y
列表中找到最大值的索引,然后使用相同索引对x
和z
列表进行索引。
将 x、y 和 z 值保存在单独的列表中有点麻烦。 考虑将它们保存在namedtuple
。 然后您需要的只是这些命名元组的单个列表。
将此视为您的输入文件:
v 10.307 4.083 4.905
v 1.920 11.778 13.118
v 7.883 17.747 0.258
v 5.085 0.353 10.356
v 8.999 9.146 8.047
和代码:
import sys
from collections import namedtuple
Point = namedtuple('Point', 'x y z')
points = []
filename = 'test2.obj' # sys.argv[1]
with open(filename) as f:
for line in f:
line = line[:-1].split(' ')
if line[0] == 'v':
x, y, z = map(float, line[1:])
points.append(Point(x, y, z))
highest_point = max(points, key=lambda point: point.z)
print('Highest point on the z-axis:', highest_point)
print(highest_point.x, highest_point.y, highest_point.z)
输出:
Highest point on the z-axis: Point(x=1.92, y=11.778, z=13.118)
1.92 11.778 13.118
max()
接受一个关键字参数key ,在这种情况下,它允许您对z
属性进行比较,而不是对Point
namedtuple 进行比较。
是否可以将此代码不应用于整个对象,而仅应用于其中的一部分? (例如:检测 x 和 y 轴上精确间隔之间 z 上的最高点?)
当然。 在找到最大点之前,过滤列表,使其只包含区间内的点。 例如:
filtered_points = []
for point in points:
if 9 > point.x > 3 and 10 > point.y > 5:
filtered_points.append(point)
highest_point = max(filtered_points, key=lambda point: point.z)
print('Highest point on the z-axis between some interval on the x and y axis:', highest_point)
输出:
Highest point on the z-axis between some interval on the x and y axis: Point(x=8.999, y=9.146, z=8.04)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.