Learn R Programming

pcds (version 0.1.8)

Idom.num1ASbasic.tri: The indicator for a point being a dominating point for Arc Slice Proximity Catch Digraphs (AS-PCDs) - standard basic triangle case

Description

Returns I(p is a dominating point of the AS-PCD) where the vertices of the AS-PCD are the 2D data set Xp, that is, returns 1 if p is a dominating point of AS-PCD, returns 0 otherwise. AS proximity regions are defined with respect to the standard basic triangle, \(T_b\), \(c_1\) is in \([0,1/2]\), \(c_2>0\) and \((1-c_1)^2+c_2^2 \le 1\).

Any given triangle can be mapped to the standard basic triangle by a combination of rigid body motions (i.e., translation, rotation and reflection) and scaling, preserving uniformity of the points in the original triangle. Hence standard basic triangle is useful for simulation studies under the uniformity hypothesis.

Vertex regions are based on the center, \(M=(m_1,m_2)\) in Cartesian coordinates or \(M=(\alpha,\beta,\gamma)\) in barycentric coordinates in the interior of the standard basic triangle \(T_b\) or based on circumcenter of \(T_b\); default is M="CC", i.e., circumcenter of \(T_b\). Point, p, is in the vertex region of vertex rv (default is NULL); vertices are labeled as \(1,2,3\) in the order they are stacked row-wise.

ch.data.pnt is for checking whether point p is a data point in Xp or not (default is FALSE), so by default this function checks whether the point p would be a dominating point if it actually were in the data set.

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

Usage

Idom.num1ASbasic.tri(p, Xp, c1, c2, M = "CC", rv = NULL, ch.data.pnt = FALSE)

Value

I(p is a dominating point of the AS-PCD) where the vertices of the AS-PCD are the 2D data set Xp, that is, returns 1 if p is a dominating point, returns 0 otherwise

Arguments

p

A 2D point that is to be tested for being a dominating point or not of the AS-PCD.

Xp

A set of 2D points which constitutes the vertices of the AS-PCD.

c1, c2

Positive real numbers which constitute the vertex of the standard basic triangle adjacent to the shorter edges; \(c_1\) must be in \([0,1/2]\), \(c_2>0\) and \((1-c_1)^2+c_2^2 \le 1\).

M

The center of the triangle. "CC" stands for circumcenter of the triangle \(T_b\) or a 2D point in Cartesian coordinates or a 3D point in barycentric coordinates which serves as a center in the interior of the triangle \(T_b\); default is M="CC" i.e., the circumcenter of \(T_b\).

rv

Index of the vertex whose region contains point p, rv takes the vertex labels as \(1,2,3\) as in the row order of the vertices in \(T_b\).

ch.data.pnt

A logical argument for checking whether point p is a data point in Xp or not (default is FALSE).

Author

Elvan Ceyhan

References

See Also

Idom.num1AStri and Idom.num1PEbasic.tri

Examples

Run this code
# \donttest{
c1<-.4; c2<-.6;
A<-c(0,0); B<-c(1,0); C<-c(c1,c2);
Tb<-rbind(A,B,C)
n<-10

set.seed(1)
Xp<-runif.basic.tri(n,c1,c2)$g

M<-as.numeric(runif.basic.tri(1,c1,c2)$g)  #try also M<-c(.6,.2)

Idom.num1ASbasic.tri(Xp[1,],Xp,c1,c2,M)

gam.vec<-vector()
for (i in 1:n)
{gam.vec<-c(gam.vec,Idom.num1ASbasic.tri(Xp[i,],Xp,c1,c2,M))}

ind.gam1<-which(gam.vec==1)
ind.gam1

#or try
Rv<-rel.vert.basic.triCC(Xp[1,],c1,c2)$rv
Idom.num1ASbasic.tri(Xp[1,],Xp,c1,c2,M,Rv)

Idom.num1ASbasic.tri(c(.2,.4),Xp,c1,c2,M)
Idom.num1ASbasic.tri(c(.2,.4),c(.2,.4),c1,c2,M)

Xp2<-rbind(Xp,c(.2,.4))
Idom.num1ASbasic.tri(Xp[1,],Xp2,c1,c2,M)

CC<-circumcenter.basic.tri(c1,c2)  #the circumcenter

if (dimension(M)==3) {M<-bary2cart(M,Tb)}
#need to run this when M is given in barycentric coordinates

if (isTRUE(all.equal(M,CC)) || identical(M,"CC"))
{cent<-CC
D1<-(B+C)/2; D2<-(A+C)/2; D3<-(A+B)/2;
Ds<-rbind(D1,D2,D3)
cent.name<-"CC"
} else
{cent<-M
cent.name<-"M"
Ds<-prj.cent2edges.basic.tri(c1,c2,M)
}

Xlim<-range(Tb[,1],Xp[,1])
Ylim<-range(Tb[,2],Xp[,2])
xd<-Xlim[2]-Xlim[1]
yd<-Ylim[2]-Ylim[1]

plot(A,pch=".",xlab="",ylab="",
xlim=Xlim+xd*c(-.05,.05),ylim=Ylim+yd*c(-.05,.05))
polygon(Tb)
L<-rbind(cent,cent,cent); R<-Ds
segments(L[,1], L[,2], R[,1], R[,2], lty=2)
points(Xp)
points(rbind(Xp[ind.gam1,]),pch=4,col=2)

txt<-rbind(Tb,cent,Ds)
xc<-txt[,1]+c(-.03,.03,.02,.06,.06,-0.05,.01)
yc<-txt[,2]+c(.02,.02,.03,.0,.03,.03,-.03)
txt.str<-c("A","B","C",cent.name,"D1","D2","D3")
text(xc,yc,txt.str)

Idom.num1ASbasic.tri(c(.4,.2),Xp,c1,c2,M)

Idom.num1ASbasic.tri(c(.5,.11),Xp,c1,c2,M)

Idom.num1ASbasic.tri(c(.5,.11),Xp,c1,c2,M,ch.data.pnt=FALSE)
#gives an error message if ch.data.pnt=TRUE since the point is not in the standard basic triangle
# }

Run the code above in your browser using DataLab