如何在R中使用rgl包仅绘制单位球的正卦限?
实现单位球正卦限的绘制
当然可以实现,下面提供两种实用方案:
方法1:用rgl包筛选坐标点实现截断
rgl可以通过生成球体的网格数据,筛选出仅属于正卦限(x≥0、y≥0、z≥0)的顶点和面,再进行绘制,避免出现残缺的曲面:
library(rgl) # 生成高精度单位球的网格数据 sphere_data <- sphereMesh(subdivision = 20) # 提取x、y、z坐标(去掉齐次坐标的第四行) vertices <- sphere_data$vb[-4, ] # 筛选正卦限的顶点 keep_vertex <- vertices[1, ] >= 0 & vertices[2, ] >= 0 & vertices[3, ] >= 0 # 仅保留三个顶点都在正卦限的面,避免出现破面 keep_face <- colSums(apply(sphere_data$ib, 2, function(face_idx) keep_vertex[face_idx])) == 3 # 构建筛选后的网格对象并绘制 filtered_sphere <- mesh3d(vertices[, keep_vertex], ib = sphere_data$ib[, keep_face]) open3d() shade3d(filtered_sphere, color = "lightblue") axes3d() title3d(main = "单位球正卦限")
方法2:用plot3D包直接生成正卦限球体
plot3D可以通过限制角度范围,直接生成正卦限的球坐标,无需额外筛选:
library(plot3D) # 生成正卦限对应的角度网格(θ、φ范围均为0到π/2) theta <- seq(0, pi/2, length.out = 30) phi <- seq(0, pi/2, length.out = 30) mesh_data <- mesh(theta, phi) # 计算单位球坐标 x <- sin(mesh_data$x) * cos(mesh_data$y) y <- sin(mesh_data$x) * sin(mesh_data$y) z <- cos(mesh_data$x) # 绘制正卦限球体 persp3D(x, y, z, col = "lightblue", border = "white", xlab = "X", ylab = "Y", zlab = "Z", main = "单位球正卦限", ticktype = "detailed")
内容的提问来源于stack exchange,提问作者GuerreroAguera
相关产品推荐
相关产品推荐

