You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 03:25:16