Last chance! 50% off unlimited learning
Sale ends in
Returns the index of the related vertex in the triangle, tri
, whose region contains point p
.
Vertex regions are based on the general center tri
.
Vertices of the triangle tri
are labeled according to the row number the vertex is recorded.
If the point, p
, is not inside tri
, then the function yields NA
as output.
The corresponding vertex region is the polygon with the vertex, M
, and projections from M
to the edges on the lines joining vertices and M
. (see the illustration in the examples).
See also (ceyhan:Phd-thesis,ceyhan:comp-geo-2010,ceyhan:mcap2012;textualpcds).
rv.tri.cent(p, tri, M)
A 2D point for which M
-vertex region it resides in is to be determined in the
triangle tri
.
Three 2D points, stacked row-wise, each row representing a vertex of the triangle.
A 2D point in Cartesian coordinates or a 3D point in barycentric coordinates
which serves as a center in the interior of the triangle tri
.
A list
with two elements
Index of the vertex whose region contains point, p
; index of the vertex is the same as the row
number in the triangle, tri
The vertices of the triangle, tri
, where row number corresponds to the vertex index rv
with rv=1
is row 1, rv=2
is row 2, and
rv.triCM
, rv.triCC
, rv.bastriCC
,
rv.bastriCM
, rv.bastri.cent
, and rvTeCM
# NOT RUN {
A<-c(1,1); B<-c(2,0); C<-c(1.5,2);
Tr<-rbind(A,B,C);
M<-c(1.6,1.0)
P<-c(.4,.2)
rv.tri.cent(P,Tr,M)
P<-c(1.8,.5)
rv.tri.cent(P,Tr,M)
P<-c(1.5,1.6)
rv.tri.cent(P,Tr,M)
#try also rv.tri.cent(P,Tr,M=c(2,2)) #center is not in the interior of the triangle
n<-10 #try also n<-20
set.seed(1)
dat<-runif.tri(n,Tr)$g
M<-as.numeric(runif.tri(1,Tr)$g) #try also M<-c(1.6,1.0)
Rv<-vector()
for (i in 1:n)
{Rv<-c(Rv,rv.tri.cent(dat[i,],Tr,M)$rv)}
Rv
Ds<-cp2e.tri(Tr,M)
Xlim<-range(Tr[,1],dat[,1])
Ylim<-range(Tr[,2],dat[,2])
xd<-Xlim[2]-Xlim[1]
yd<-Ylim[2]-Ylim[1]
if (dimension(M)==3) {M<-bary2cart(M,Tr)}
#need to run this when M is given in barycentric coordinates
plot(Tr,pch=".",xlab="",ylab="",axes=TRUE,
xlim=Xlim+xd*c(-.05,.05),ylim=Ylim+yd*c(-.05,.05))
polygon(Tr)
points(dat,pch=".",col=1)
L<-rbind(M,M,M); R<-Ds
segments(L[,1], L[,2], R[,1], R[,2], lty=2)
xc<-Tr[,1]
yc<-Tr[,2]
txt.str<-c("rv=1","rv=2","rv=3")
text(xc,yc,txt.str)
txt<-rbind(M,Ds)
xc<-txt[,1]+c(-.02,.04,-.04,0)
yc<-txt[,2]+c(-.02,.04,.05,-.08)
txt.str<-c("M","D1","D2","D3")
text(xc,yc,txt.str)
text(dat,labels=factor(Rv))
P<-c(1.8,.5)
rv.tri.cent(P,Tr,M)
dat.fr<-data.frame(a=Tr)
rv.tri.cent(P,dat.fr,M)
# }
Run the code above in your browser using DataLab