我在使用rgl三维图形包的应用程序时遇到了一些问题。
我正在尝试绘制一些线段。我的数据排列在一个名为“markers”的数据框中,有六列,分别对应起始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()中。
我尝试了几乎所有可能的方法($符号、索引、连接、使用循环、apply和sapply等),甚至阅读了文档。文档很好,它说对于参数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() 的地方与我尝试做的事情有些类似,他们使用了我之前尝试过的 '+' 符号。基本上,他们构建了两个矩阵并将第二个矩阵加到第一个矩阵中。