是否打印.obj文件最高点的坐标



我从未用Python处理过3D对象,所以我觉得有点失落。

我想知道是否有可能创建一个程序来检测3D对象的最高点(.obj格式(并给出它们的坐标。

我有一个想法,比较三维物体的每个点,只返回最高点的坐标。

我会感谢任何帮助,即使只是告诉我在哪里看。


EDIT:我创建了一个程序,返回对象的最大高程。

它是有效的,但我怎么能让它不仅返回最高点的最大高程,还返回它与另一条轴的坐标?

例如,它会返回:最高点在5.04米。它的坐标是(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。您还需要附加到相应的xy列表中。然后,您可以在y列表中找到最大值的索引,然后索引到具有相同索引的xz列表中。

将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()采用关键字参数,在这种情况下,它允许您对z属性而不是Point命名元组进行比较。

是否可以不将此代码应用于整个对象,而仅应用于其中的一部分?(例如:检测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)

最新更新