Find the direction away from the closest point in a 3d projection
Jim Lemon's thigmophobe
function in the
plotrix
package
computes good directions for labels in a 2D plot. This function
does the same for a particular projection in a 3D plot by
projecting down to 2D and calling his function.
thigmophobe3d(x, y = NULL, z = NULL, P = par3d("projMatrix"), M = par3d("modelMatrix"), windowRect = par3d("windowRect"))
x, y, z |
point coordinates. Any reasonable way of defining
the coordinates is acceptable. See the function |
P, M, windowRect |
The projection and modelview matrices, and the size and position of the display in pixels. |
Since thigmophobe3d
projects using fixed P
and M
,
it will not necessarily choose good directions if the user rotates
the display or makes any other change to the projection.
A vector of values from 1 to 4 to be used as the pos
argument
in text3d
.
The example below shows how to update the directions during an animation; I find that the moving labels are distracting, and prefer to live with fixed ones.
Duncan Murdoch
if (requireNamespace("plotrix", quietly = TRUE)) { # Simulate some data xyz <- matrix(rnorm(30), ncol = 3) # Plot the data first, to establish the projection plot3d(xyz) # Now thigmophobe3d can choose directions textid <- text3d(xyz, texts = 1:10, pos = thigmophobe3d(xyz)) # Update the label positions during an animation if (interactive() && !rgl.useNULL()) { spin <- spin3d(rpm = 5) f <- function(time) { par3d(skipRedraw = TRUE) on.exit(par3d(skipRedraw = FALSE)) pop3d(id = textid) # Need to rotate before thigmophobe3d is called result <- spin(time) par3d(userMatrix = result$userMatrix) textid <<- text3d(xyz, texts = 1:10, pos = thigmophobe3d(xyz)) result } play3d(f, duration = 5) } else textid # just print the static display }
Please choose more modern alternatives, such as Google Chrome or Mozilla Firefox.