# thigmophobe3d

##### 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.

##### Usage

```
thigmophobe3d(x, y = NULL, z = NULL,
P = par3d("projMatrix"),
M = par3d("modelMatrix"),
windowRect = par3d("windowRect"))
```

##### Arguments

- x, y, z
point coordinates. Any reasonable way of defining the coordinates is acceptable. See the function

`xyz.coords`

for details.- P, M, windowRect
The projection and modelview matrices, and the size and position of the display in pixels.

##### Details

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.

##### Value

A vector of values from 1 to 4 to be used as the `pos`

argument
in `text3d`

.

##### Note

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.

##### References

plotrix

##### See Also

##### Examples

```
# NOT RUN {
if (requireNamespace("plotrix")) {
# 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))
rgl.pop(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)
}
}
# }
```

*Documentation reproduced from package rgl, version 0.100.50, License: GPL*