Я работаю над проектом, в котором я хочу прочитать бинарный файл STL. Я скопировал части чьего-то открытого исходного кода и без проблем. Однако теперь мне нужно манипулировать этими данными, и когда я извлекаю массив векторов нормалей из объекта типа данных, в котором хранятся данные треугольника, я получаю nans.
Объект типа данных структурируется следующим образом:
triangle_data = np.dtype([
('normals', np.float32, (3, )),
('v0', np.float32, (3, )),
('v1', np.float32, (3, )),
('v2', np.float32, (3, )),
('attr', 'u2', (1, )),
])
И раздел, который создает nans, находится здесь:
def identify_surfaces(self):
tri_list = self.triangle_data
#This print has the correct data, no nans!
print(tri_list)
for n in range(len(tri_list)):
surface_list = []
normal_vec = tri_list[n]['normals']
#this print is filled with nans Q_Q
print(normal_vec)
Я подозреваю, что это как-то связано с типом данных float32 в объекте типа данных, но я не уверен как решить это. Недопустимо отклонять данные, содержащие nans, и данные nan могут принимать значения 0, 1 или -1.
Спасибо за понимание!
Вот вывод print ( tri_list)
[([-1.0000000e+00, 0.0000000e+00, 0.0000000e+00], [ 0.0000000e+00, 0.0000000e+00, 5.0799999e+01], [ 0.0000000e+00, 5.0799999e+01, 0.0000000e+00], [ 0.0000000e+00, 0.0000000e+00, 0.0000000e+00], [0])
([ 0.0000000e+00, 0.0000000e+00, -1.0000000e+00], [ 0.0000000e+00, 5.0799999e+01, 0.0000000e+00], [ 1.5240001e+02, 0.0000000e+00, 0.0000000e+00], [ 0.0000000e+00, 0.0000000e+00, 0.0000000e+00], [0])
([ 0.0000000e+00, -1.0000000e+00, 0.0000000e+00], [ 1.5240001e+02, 0.0000000e+00, 0.0000000e+00], [ 1.5240001e+02, 0.0000000e+00, 5.0799999e+01], [ 0.0000000e+00, 0.0000000e+00, 0.0000000e+00], [0])
([-0.0000000e+00, -1.0000000e+00, 0.0000000e+00], [ 1.5240001e+02, 0.0000000e+00, 5.0799999e+01], [ 0.0000000e+00, 0.0000000e+00, 5.0799999e+01], [ 0.0000000e+00, 0.0000000e+00, 0.0000000e+00], [0])
([ 1.0000000e+00, 0.0000000e+00, -0.0000000e+00], [ 1.5240001e+02, 5.0799999e+01, 0.0000000e+00], [ 1.5240001e+02, 5.0799999e+01, 5.0799999e+01], [ 1.5240001e+02, 0.0000000e+00, 0.0000000e+00], [0])
([ 1.0000000e+00, 0.0000000e+00, 0.0000000e+00], [ 1.5240001e+02, 5.0799999e+01, 5.0799999e+01], [ 1.5240001e+02, 0.0000000e+00, 5.0799999e+01], [ 1.5240001e+02, 0.0000000e+00, 0.0000000e+00], [0])
([-3.7314969e-32, -1.1194490e-31, -1.0000000e+00], [ 0.0000000e+00, 5.0799999e+01, 0.0000000e+00], [ 5.0799999e+01, 5.0799999e+01, -1.8956003e-30], [ 1.5240001e+02, 0.0000000e+00, 0.0000000e+00], [0])
([ 0.0000000e+00, 0.0000000e+00, -1.0000000e+00], [ 1.0160000e+02, 5.0799999e+01, 0.0000000e+00], [ 1.5240001e+02, 5.0799999e+01, 0.0000000e+00], [ 1.5240001e+02, 0.0000000e+00, 0.0000000e+00], [0])
([ 3.7314969e-32, 3.7314972e-32, -1.0000000e+00], [ 5.0799999e+01, 5.0799999e+01, -1.8956003e-30], [ 1.0160000e+02, 5.0799999e+01, 0.0000000e+00], [ 1.5240001e+02, 0.0000000e+00, 0.0000000e+00], [0])
([-1.0000000e+00, -0.0000000e+00, -0.0000000e+00], [ 0.0000000e+00, 5.0799999e+01, 5.0799999e+01], [ 0.0000000e+00, 5.0799999e+01, 0.0000000e+00], [ 0.0000000e+00, 0.0000000e+00, 5.0799999e+01], [0])
([ 0.0000000e+00, -0.0000000e+00, 1.0000000e+00], [ 1.5240001e+02, 0.0000000e+00, 5.0799999e+01], [ 1.5240001e+02, 5.0799999e+01, 5.0799999e+01], [ 0.0000000e+00, 0.0000000e+00, 5.0799999e+01], [0])
([ 0.0000000e+00, 0.0000000e+00, 1.0000000e+00], [ 1.5240001e+02, 5.0799999e+01, 5.0799999e+01], [ 1.0160000e+02, 5.0799999e+01, 5.0799999e+01], [ 0.0000000e+00, 0.0000000e+00, 5.0799999e+01], [0])
([ 0.0000000e+00, 0.0000000e+00, 1.0000000e+00], [ 5.0799999e+01, 5.0799999e+01, 5.0799999e+01], [ 0.0000000e+00, 5.0799999e+01, 5.0799999e+01], [ 0.0000000e+00, 0.0000000e+00, 5.0799999e+01], [0])
([ 0.0000000e+00, 0.0000000e+00, 1.0000000e+00], [ 1.0160000e+02, 5.0799999e+01, 5.0799999e+01], [ 5.0799999e+01, 5.0799999e+01, 5.0799999e+01], [ 0.0000000e+00, 0.0000000e+00, 5.0799999e+01], [0])
([-1.0000000e+00, 0.0000000e+00, 0.0000000e+00], [ 5.0799999e+01, 5.0799999e+01, 5.0799999e+01], [ 5.0799999e+01, 1.0160000e+02, 0.0000000e+00], [ 5.0799999e+01, 5.0799999e+01, -1.8956003e-30], [0])
([ 0.0000000e+00, 1.0000000e+00, 0.0000000e+00], [ 0.0000000e+00, 5.0799999e+01, 5.0799999e+01], [ 5.0799999e+01, 5.0799999e+01, -1.8956003e-30], [ 0.0000000e+00, 5.0799999e+01, 0.0000000e+00], [0])
([-0.0000000e+00, 1.0000000e+00, 0.0000000e+00], [ 0.0000000e+00, 5.0799999e+01, 5.0799999e+01], [ 5.0799999e+01, 5.0799999e+01, 5.0799999e+01], [ 5.0799999e+01, 5.0799999e+01, -1.8956003e-30], [0])
([ 3.7314969e-32, 0.0000000e+00, -1.0000000e+00], [ 1.0160000e+02, 1.0160000e+02, 0.0000000e+00], [ 1.0160000e+02, 5.0799999e+01, 0.0000000e+00], [ 5.0799999e+01, 5.0799999e+01, -1.8956003e-30], [0])
([ 0.0000000e+00, 3.7314969e-32, -1.0000000e+00], [ 5.0799999e+01, 1.0160000e+02, 0.0000000e+00], [ 1.0160000e+02, 1.0160000e+02, 0.0000000e+00], [ 5.0799999e+01, 5.0799999e+01, -1.8956003e-30], [0])
([ 0.0000000e+00, 1.0000000e+00, 0.0000000e+00], [ 1.0160000e+02, 5.0799999e+01, 5.0799999e+01], [ 1.5240001e+02, 5.0799999e+01, 0.0000000e+00], [ 1.0160000e+02, 5.0799999e+01, 0.0000000e+00], [0])
([ 1.0000000e+00, 0.0000000e+00, -0.0000000e+00], [ 1.0160000e+02, 1.0160000e+02, 0.0000000e+00], [ 1.0160000e+02, 1.0160000e+02, 5.0799999e+01], [ 1.0160000e+02, 5.0799999e+01, 0.0000000e+00], [0])
([ 1.0000000e+00, 0.0000000e+00, 0.0000000e+00], [ 1.0160000e+02, 1.0160000e+02, 5.0799999e+01], [ 1.0160000e+02, 5.0799999e+01, 5.0799999e+01], [ 1.0160000e+02, 5.0799999e+01, 0.0000000e+00], [0])
([-0.0000000e+00, 1.0000000e+00, 0.0000000e+00], [ 1.0160000e+02, 5.0799999e+01, 5.0799999e+01], [ 1.5240001e+02, 5.0799999e+01, 5.0799999e+01], [ 1.5240001e+02, 5.0799999e+01, 0.0000000e+00], [0])
([ 0.0000000e+00, 0.0000000e+00, 1.0000000e+00], [ 1.0160000e+02, 5.0799999e+01, 5.0799999e+01], [ 5.0799999e+01, 1.0160000e+02, 5.0799999e+01], [ 5.0799999e+01, 5.0799999e+01, 5.0799999e+01], [0])
([-1.0000000e+00, -0.0000000e+00, -0.0000000e+00], [ 5.0799999e+01, 1.0160000e+02, 5.0799999e+01], [ 5.0799999e+01, 1.0160000e+02, 0.0000000e+00], [ 5.0799999e+01, 5.0799999e+01, 5.0799999e+01], [0])
([ 0.0000000e+00, 0.0000000e+00, 1.0000000e+00], [ 1.0160000e+02, 1.0160000e+02, 5.0799999e+01], [ 5.0799999e+01, 1.0160000e+02, 5.0799999e+01], [ 1.0160000e+02, 5.0799999e+01, 5.0799999e+01], [0])
([ 0.0000000e+00, 1.0000000e+00, 0.0000000e+00], [ 5.0799999e+01, 1.0160000e+02, 5.0799999e+01], [ 1.0160000e+02, 1.0160000e+02, 0.0000000e+00], [ 5.0799999e+01, 1.0160000e+02, 0.0000000e+00], [0])
([-0.0000000e+00, 1.0000000e+00, 0.0000000e+00], [ 5.0799999e+01, 1.0160000e+02, 5.0799999e+01], [ 1.0160000e+02, 1.0160000e+02, 5.0799999e+01], [ 1.0160000e+02, 1.0160000e+02, 0.0000000e+00], [0])]
Вот вывод tri_list [n]:
tri_list[n]: ([-3.731497e-32, -1.119449e-31, nan], [ 0. , 50.8, 0. ], [ 5.0799999e+01, 5.0799999e+01, -1.8956003e-30], [152.40001, 0. , 0. ], [0])
Nans появляются только в треугольных «нормальных» векторных данных