| in.tetrahedron | R Documentation |
Checks if the point p lies
in the tetrahedron, th,
using the barycentric coordinates, generally denoted as
(\alpha,\beta,\gamma).
If all (normalized or non-normalized) barycentric coordinates are positive
then the point p is inside the tetrahedron,
if all are nonnegative with one or more are zero,
then p falls on the boundary.
If some of the barycentric coordinates are negative,
then p falls outside the tetrahedron.
boundary is a logical argument (default=FALSE)
to include boundary or not, so if it is TRUE,
the function checks if the point, p,
lies in the closure of the tetrahedron (i.e., interior and boundary
combined) else it checks if p lies
in the interior of the tetrahedron.
in.tetrahedron(p, th, boundary = TRUE)
p |
A 3D point to be checked whether it is inside the tetrahedron or not. |
th |
A |
boundary |
A logical parameter (default= |
A list with two elements
in.tetra |
A logical output, if the point, |
barycentric |
The barycentric coordinates of the point |
Elvan Ceyhan
in.triangle
A<-c(0,0,0); B<-c(1,0,0); C<-c(1/2,sqrt(3)/2,0);
D<-c(1/2,sqrt(3)/6,sqrt(6)/3); P<-c(.1,.1,.1)
tetra<-rbind(A,B,C,D)
in.tetrahedron(P,tetra,boundary = FALSE)
in.tetrahedron(C,tetra)
in.tetrahedron(C,tetra,boundary = FALSE)
n1<-5; n2<-5; n<-n1+n2
Xp<-rbind(cbind(runif(n1),runif(n1,0,sqrt(3)/2),runif(n1,0,sqrt(6)/3)),
runif.tetra(n2,tetra)$g)
in.tetra<-vector()
for (i in 1:n)
{in.tetra<-c(in.tetra,in.tetrahedron(Xp[i,],tetra,boundary = TRUE)$in.tetra) }
in.tetra
dat.tet<-Xp[in.tetra,]
if (is.vector(dat.tet)) {dat.tet<-matrix(dat.tet,nrow=1)}
Xlim<-range(tetra[,1],Xp[,1])
Ylim<-range(tetra[,2],Xp[,2])
Zlim<-range(tetra[,3],Xp[,3])
xd<-Xlim[2]-Xlim[1]
yd<-Ylim[2]-Ylim[1]
zd<-Zlim[2]-Zlim[1]
plot3D::scatter3D(Xp[,1],Xp[,2],Xp[,3], phi=40,theta=40,
bty = "g", pch = 20, cex = 1,
ticktype="detailed",xlim=Xlim+xd*c(-.05,.05),
ylim=Ylim+yd*c(-.05,.05),zlim=Zlim+zd*c(-.05,.05))
#add the vertices of the tetrahedron
plot3D::points3D(tetra[,1],tetra[,2],tetra[,3], add=TRUE)
plot3D::points3D(dat.tet[,1],dat.tet[,2],dat.tet[,3],pch=4, add=TRUE)
L<-rbind(A,A,A,B,B,C); R<-rbind(B,C,D,C,D,D)
plot3D::segments3D(L[,1], L[,2], L[,3], R[,1], R[,2],R[,3], add=TRUE,lwd=2)
plot3D::text3D(tetra[,1],tetra[,2],tetra[,3],
labels=c("A","B","C","D"), add=TRUE)
in.tetrahedron(P,tetra) #this works fine
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.