如何在R语言中计算.ply文件包围盒的尺寸及Z轴长度?
解决PLY模型Z轴包围盒长度计算问题
问题描述
我有多个.ply格式的3D模型文件,需要计算模型的长度(所有网格纵轴与包围盒Z轴平行),但找不到能直接返回.ply文件包围盒轴向尺寸的函数。尝试用rgl包时,误用了readOBJ读取.ply文件导致失败,现有脚本无法适配.ply格式,求可行的解决方案。
解决方案
方法1:修正rgl包的使用方式
rgl包本身支持读取.ply文件,你之前的问题是用了读取OBJ格式的readOBJ,换成专门的readPLY函数即可:
# 加载rgl包 library(rgl) # 读取.ply文件 my_ply <- readPLY("my_file.ply") # 提取所有顶点的Z轴坐标(rgl中顶点矩阵的行对应XYZ轴) z_coords <- my_ply$vb[3, ] # 计算Z轴方向的包围盒长度 z_length <- diff(range(z_coords)) # 输出结果 print(z_length)
方法2:使用Rvcg包(专业3D网格处理)
如果需要更稳定的PLY文件解析和网格操作,推荐使用Rvcg包,它专门针对多边形网格设计:
# 首次使用需安装包 # install.packages("Rvcg") library(Rvcg) # 读取.ply文件 ply_model <- vcgPlyRead("my_file.ply") # 提取顶点的XYZ坐标矩阵 vertices <- ply_model$vb[, 1:3] # 获取Z轴坐标并计算长度 z_coords <- vertices[, 3] z_length <- diff(range(z_coords)) print(z_length)
批量处理多个.ply文件
如果要处理目录下所有.ply文件,可以用循环批量计算:
library(rgl) # 设置目标目录路径,替换为你的文件夹路径 target_dir <- "你的模型文件目录" # 获取所有.ply文件的完整路径 ply_files <- list.files(path = target_dir, pattern = "\\.ply$", full.names = TRUE) # 创建结果数据框存储文件名和对应Z轴长度 results_df <- data.frame( 文件名 = basename(ply_files), Z轴长度 = numeric(length(ply_files)) ) # 遍历文件计算 for (idx in seq_along(ply_files)) { current_model <- readPLY(ply_files[idx]) z_vals <- current_model$vb[3, ] results_df$Z轴长度[idx] <- diff(range(z_vals)) } # 查看批量计算结果 print(results_df)
内容的提问来源于stack exchange,提问作者user21889737
相关产品推荐
相关产品推荐

