gpt4 book ai didi

r - 使用 RGL 在 R 中绘制 3d 线段

转载 作者:行者123 更新时间:2023-12-05 01:20:46 24 4
gpt4 key购买 nike

我在应用 rgl 3d 绘图包时遇到了一些问题。

我正在尝试绘制一些线段。我的数据被安排在一个名为“标记”的数据框中,它有六列,一列代表起始 x、y 和 z 值,一列代表结束 x、y 和 z 值。

startX  startY startZ endX   endY    endZ
69.345 45.732 20 115 39.072 1.92413
80.270 38.480 30 175 44.548 0.36777
99.590 33.596 20 175 35.224 0.06929
32.120 41.218 20 115 39.294 2.81424
11.775 37.000 30 175 35.890 1.38047
76.820 44.104 22 115 44.992 4.14674
85.790 23.384 18 115 36.112 0.40508
80.040 17.464 20 175 31.080 2.59038
103.615 38.850 22 115 39.220 3.18201
41.200 31.006 30 175 36.260 3.48049
88.665 43.956 30 115 39.738 0.50635
109.365 23.976 20 175 33.374 3.99750

这应该是小菜一碟。只需将这些值提供给 segment3d() 命令,我就应该得到我想要的图。只是我不知道如何正确地将相应的开始和结束对传递给 segment3d()。

我已经尝试了几乎所有可能的方法($ 符号、索引、连接、使用循环、应用和应用等),包括阅读文档。这很好,它对参数 x、y 和 z 说:“定义坐标的任何合理方式都是可以接受的。”呃......它确实让你引用了 xyz.coords 实用程序。

所以我查看了该文档。而且我想我了解它的作用;我什至可以用它来标准化我的数据,例如

starts <- xyz.coords(markers$startX, markers$startY, markers$startZ)

ends <- xyz.coords(markers$endX, markers$endY, markers$endZ)

但是我仍然不确定如何处理这两个列表。

segments3d(starts, ends)
segments3d(starts + ends)
segments3d((starts, ends), (starts, ends), (starts, ends))
segments3d(c(starts, ends), c(starts, ends), c(starts, ends))
segments3d(c(starts$x, ends$x), c(starts$y, ends$y), c(starts$z, ends$z))

我的意思是我知道为什么上面的方法不起作用。在这一点上,我基本上只是在尝试一些事情,因为这让我感到难以置信的愚蠢,就像有一些明显的东西——我的意思是面部手掌水平明显——我不见了。

我浏览了 rgl 文档本身来寻找示例,并且我发现他们以任何类似于我正在尝试做的方式使用 segment3d() 的唯一地方是,他们使用了我在上面尝试过的“+”符号。基本上他们构建了 2 个矩阵并将第二个添加到第一个。

最佳答案

这样的事情应该可行。

library(rgl)
open3d(scale=c(1/5,1,1))
segments3d(x=as.vector(t(markers[,c(1,4)])),
y=as.vector(t(markers[,c(2,5)])),
z=as.vector(t(markers[,c(3,6)])))
axes3d()
title3d(xlab="X",ylab="Y",zlab="Z")

enter image description here

问题是 segments3d(...) 成对地获取 x(以及 y 和 z)值。所以第 1-2 行是第一段,第 3-4 行是第二段,等等。您需要交错,例如$startx$endx 等。上面的代码就是这样做的。

关于r - 使用 RGL 在 R 中绘制 3d 线段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26853717/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com