Learn R Programming

pcds (version 0.1.2)

re.triCM: The index of the \(CM\)-edge region in a triangle that contains the point

Description

Returns the index of the edge whose region contains point, pt, in the triangle tri\(=T(A,B,C)\) with edge regions based on center of mass \(CM=(A+B+C)/3\).

Edges are labeled as 3 for edge \(AB\), 1 for edge \(BC\), and 2 for edge \(AC\). If the point, pt, is not inside tri, then the function yields NA as output. Edge region 1 is the triangle \(T(B,C,CM)\), edge region 2 is \(T(A,C,CM)\), and edge region 3 is \(T(A,B,CM)\).

See also (ceyhan:Phd-thesis,ceyhan:comp-geo-2010,ceyhan:mcap2012,ceyhan:arc-density-CS;textualpcds).

Usage

re.triCM(pt, tri)

Arguments

pt

A 2D point for which \(CM\)-edge region it resides in is to be determined in the triangle tri.

tri

Three 2D points, stacked row-wise, each row representing a vertex of the triangle.

Value

A list with three elements

re

Index of the \(CM\)-edge region that contains point, pt in the triangle tri.

tri

The vertices of the triangle, where row labels are \(A\), \(B\), and \(C\) with edges are labeled as 3 for edge \(AB\), 1 for edge \(BC\), and 2 for edge \(AC\).

desc

Description of the edge labels

References

See Also

re.tri.cent, re.bastriCM, re.bastri.cent, reTeCM, and redge.triCM

Examples

Run this code
# NOT RUN {
A<-c(1,1); B<-c(2,0); C<-c(1.5,2);
Tr<-rbind(A,B,C);
P<-c(1.4,1.2)
re.triCM(P,Tr)

P<-c(.8,.2)
re.triCM(P,Tr)

P<-c(1.5,1.61)
re.triCM(P,Tr)

CM<-(A+B+C)/3

re.triCM(A,Tr)
re.triCM(B,Tr)
re.triCM(C,Tr)
re.triCM(CM,Tr)

n<-10  #try also n<-20
dat<-runif.tri(n,Tr)$g

re<-vector()
for (i in 1:n)
  re<-c(re,re.triCM(dat[i,],Tr)$re)
re

Xlim<-range(Tr[,1],dat[,1])
Ylim<-range(Tr[,2],dat[,2])
xd<-Xlim[2]-Xlim[1]
yd<-Ylim[2]-Ylim[1]

plot(Tr,xlab="",ylab="",axes=TRUE,pch=".",xlim=Xlim+xd*c(-.05,.05),ylim=Ylim+yd*c(-.05,.05))
points(dat,pch=".")
polygon(Tr)
L<-Tr; R<-matrix(rep(CM,3),ncol=2,byrow=TRUE)
segments(L[,1], L[,2], R[,1], R[,2], lty=2)
text(dat,labels=factor(re))

txt<-rbind(Tr,CM)
xc<-txt[,1]
yc<-txt[,2]
txt.str<-c("A","B","C","CM")
text(xc,yc,txt.str)

p1<-(A+B+CM)/3
p2<-(B+C+CM)/3
p3<-(A+C+CM)/3

plot(Tr,xlab="",ylab="",axes=TRUE,pch=".",xlim=Xlim+xd*c(-.05,.05),ylim=Ylim+yd*c(-.05,.05))
polygon(Tr)
L<-Tr; R<-matrix(rep(CM,3),ncol=2,byrow=TRUE)
segments(L[,1], L[,2], R[,1], R[,2], lty=2)

txt<-rbind(Tr,CM,p1,p2,p3)
xc<-txt[,1]+c(-.02,.02,.02,.02)
yc<-txt[,2]+c(.02,.02,.04,.05)
txt.str<-c("A","B","C","CM","re=3","re=1","re=2")
text(xc,yc,txt.str)

A<-c(0,0); B<-c(1,0); C<-c(0.5,.8);
Tr<-rbind(A,B,C);
P<-c(.4,.2)
re.triCM(P,Tr)

dat.fr<-data.frame(a=Tr)
re.triCM(P,dat.fr)

# }

Run the code above in your browser using DataLab