nbv_rec_control/vis_pts_and_nrm.py
2024-10-18 17:13:45 +08:00

54 lines
1.9 KiB
Python

# import numpy as np
# import matplotlib.pyplot as plt
# from mpl_toolkits.mplot3d import Axes3D
# # 假设 points_and_normals 是你的 Nx6 矩阵
# # 前三列是点坐标,后三列是法线
# points_and_normals = np.loadtxt("/Users/hofee/Downloads/temp_output/cad_model_world/points_and_normals.txt") # 这里用随机点代替你的数据
# points = points_and_normals[:100, :3]
# normals = points_and_normals[:100, 3:]
# # 创建3D图形
# fig = plt.figure()
# ax = fig.add_subplot(111, projection='3d')
# # 绘制点云
# ax.scatter(points[:, 0], points[:, 1], points[:, 2], color='b', marker='o')
# # 绘制法线 (从每个点出发的一小段箭头)
# ax.quiver(points[:, 0], points[:, 1], points[:, 2],
# normals[:, 0], normals[:, 1], normals[:, 2], length=0.1, color='r')
# plt.show()
import numpy as np
# 假设 points_and_normals 是你的 Nx6 矩阵
# points_and_normals[:,:3] 是点的坐标
# points_and_normals[:,3:] 是法线
points_and_normals = np.loadtxt("/Users/hofee/Downloads/temp_output/cad_model_world/points_and_normals.txt") # 这里用随机点代替你的数据
print(points_and_normals.shape)
points = points_and_normals[300:400, :3]
normals = points_and_normals[300:400, 3:]
# 设置你想在法线方向上采样的距离范围和点数
num_samples_per_point = 20 # 每个法线方向采样的点数
sampling_distances = np.linspace(0, 0.5, num_samples_per_point) # 采样距离范围
# 创建一个空列表来保存采样点
sampled_points = []
# 对每个点进行法线方向的采样
for point, normal in zip(points, normals):
for dist in sampling_distances:
# 在法线方向上偏移点
sampled_point = point + dist * normal
sampled_points.append(sampled_point)
# 转换为 numpy 数组
sampled_points = np.array(sampled_points)
# 保存为点云文件 (例如 .txt 或 .xyz 格式)
np.savetxt('sampled_points.txt', sampled_points)
print("采样点云已保存为 'sampled_points.xyz'")