繁体   English   中英

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

[英]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 您还需要附加到相应的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()接受一个关键字参数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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM