【发布时间】:2022-10-24 00:31:18
【问题描述】:
我编写了一个程序来根据点云数据绘制图形(x、y、z 坐标显示为列表 x_list、y_list、z_list)。现在,我必须找到最接近 (0,0,0) 的点。有人有这样做的想法吗?这是程序:
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
import math
from mpl_toolkits.mplot3d import axes3d
cloud = np.loadtxt('c1.txt')
rows = len(cloud)
columns = int(len(cloud[0])/5)
x_list = []
y_list = []
z_list = []
for i in range(rows):
for j in range(columns):
x_list.append(cloud[i][j])
y_list.append(cloud[i][j+columns])
z_list.append(cloud[i][j+2*columns])
#x_list = x_list[~pd.isnull(x_list)]
X = x_list
Y = y_list
Z = z_list
#Eliminating 'nan' values
newlist_x = [X for X in x_list if math.isnan(X) == False]
newlist_y = [Y for Y in y_list if math.isnan(Y) == False]
newlist_z = [Z for Z in z_list if math.isnan(Z) == False]
display(newlist_x, newlist_y, newlist_z)
fig = plt.figure()
ax = fig.add_subplot(projection='3d')
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z')
ax.scatter(newlist_x, newlist_y, newlist_z, c=newlist_z, cmap='plasma', linewidth=0.01)
#3D plotting of points
plt.rcParams["figure.figsize"] = (12,15) #making plot more viewable
plt.show()
【问题讨论】:
-
我还发现最小 Z 坐标是已知的(我可以从列表中轻松找到它),并且该坐标肯定来自最近的点。是否有可能找到知道 z 坐标的点的相应 x 和 y 值?
-
如何计算到集合中每个点的距离,然后找到其中的最小值?你试过吗?
-
@ItaiDagan 你能写出它应该是什么样子吗?你的意思是d=sqrt(x2+y2+z2),d的最小值是最近点?是的,我正在考虑,但不确定如何在程序中实现它。
-
@ItaiDagan我找到了最小距离,但是由于该距离值,现在我如何找到坐标x,y,z?
-
distance = [] for i in range(len(newlist_x)): xa, ya, za = newlist_x[i], newlist_y[i], newlist_z[i] # 这些值相互对应 distance.append(((xa2)+(是的2)+(za**2))**(1/2)) #print(距离) min(距离)
标签: python pandas math point closest