r - 如何在 rgl plot3d 中绘制曲面
问题描述
所以我有这段代码可以产生精确的表面
f = function(x, y){
z = ((x^2)+(3*y^2))*exp(-(x^2)-(y^2))
}
plot3d(f, col = colorRampPalette(c("blue", "white")),
xlab = "X", ylab = "Y", zlab = "Z",
xlim = c(-3, 3), ylim = c(-3, 3),
aspect = c(1, 1, 0.5))
给出以下情节: 现在我有一些代码可以执行随机游走大都会算法来重现上面的图像。我认为它的工作原理就像我对这些计算值进行另一张图一样,我得到了下一张 500 分的图像。这是代码
open3d()
plot3d(x0, y0, f(x0, y0), type = "p")
这给出了以下情节: 我知道很难看这个静止图像,但能够旋转采样是有效的。
现在这是我的问题:我该如何使用plot3d()
才能拥有一个连接所有这些点的表面,并提供更锯齿状的精确图表示?或者如何将 z 轴上的每个点作为 xy 平面的条形?我只想要比点更 3 维的东西,但我找不到如何做到这一点。
谢谢你的帮助
解决方案
您可以通过对曲面进行三角测量来做到这一点。你没有给我们你的实际数据,但我可以使用创建一些类似的数据
f = function(x, y){
z = ((x^2)+(3*y^2))*exp(-(x^2)-(y^2))
}
x <- runif(500, -3, 3)
y <- runif(500, -3, 3)
z <- f(x, y)
然后使用以下方法完成绘图?persp3d.deldir
:
library(deldir)
library(rgl)
col <- colorRampPalette(c("blue", "white"))(20)[1 + round(19*(z - min(z))/diff(range(z)))]
dxyz <- deldir::deldir(x, y, z = z, suppressMsge = TRUE)
persp3d(dxyz, col = col, front = "lines", back = "lines")
这可能需要一些外观修复,例如
aspect3d(2, 2, 1)
经过一些旋转,这给了我以下情节:
推荐阅读
- python - 如何遍历列表列表并在每个列表中选择随机元素?
- node.js - 将猫鼬查找与动态查询一起使用
- algorithm - 根据所需的平均颜色编辑图像
- visual-studio-2017 - VS2019 包与项目参考(最小版本)
- node.js - 有没有办法在护照js中为不同路由的不同用户实现不同的身份验证策略?
- c# - Scenario 和 Scenario outline 有什么区别?
- typescript - Typescript GRPC 客户端拦截器
- typescript - TypeScript 在对未知变量进行类型检查后仍会触发错误 ts2571
- flutter - 在调试和配置文件模式下工作正常,在发布模式下不工作
- python - 重塑操作引发错误“num_input_elements!= num_output_elements”(50!= 1)