ugly loop
Thanks Marc for your help.
The following code is slow and ugly:
count<-0
for(i in 1:nrow(ver))
for(j in 1:ncol(ver))
{
count<-count+1
x[count]<-pt$x[ver[i,j]]
y[count]<-pt$y[ver[i,j]]
z[count]<-pt$z[ver[i,j]]
}
Please help me make it better.
Thanks!
The following should work:
ver <- matrix(sample(1:16, 16), ncol = 4) pt <- data.frame(x = sample(1:16, 16),
+ y = sample(1:16, 16), + z = sample(1:16, 16))
ver
[,1] [,2] [,3] [,4] [1,] 8 9 5 13 [2,] 14 16 1 10 [3,] 12 2 11 7 [4,] 6 3 4 15
pt
x y z 1 6 15 15 2 9 2 3 3 11 1 5 4 14 4 10 5 13 7 14 6 1 14 7 7 15 10 4 8 10 5 12 9 4 12 2 10 8 8 13 11 16 11 1 12 7 13 9 13 2 16 11 14 3 9 16 15 5 6 8 16 12 3 6
x <- pt$x[ver] y <- pt$y[ver] z <- pt$z[ver]
This doesn't give the same results as my original code -- it scrambles the order. OK I will explain my example. pts contains the x, y, z coordinates of some 3D points. These points are the vertices of 3D triangles. ver contains the indexes into pts. each line of ver contains 3 vertices -- they are the corners of a triangle. For example, if line 1 of ver is 10 9 7 That means I need to draw a triangle whose coordinates are pt$x[10],pt$y[10],pt$z[10] pt$x[9],pt$y[9],pt$z[9] pt$x[7],pt$y[7],pt$z[7] Now it should be clear why the ordering is critical. I am using rgl.triangles() to plot. It requires the x,y,z coordinates in the order I gave in my original code. Cheers Bill