距離

  • 距離とは次のように定義されている
    • 2つの何か(A,B)の間に定められ
    • 非負(0以上)の値をとり
    • その値は、AのBに対する値もBのAに対する値も同じであり
    • AとBとが同じときには0をとり
    • 3つの何か(A,B,C)があるときには、A−B,B−C,C−Aの間の距離は、A,B,Cの3つを平面に配置して三角形(つぶれてしまって直線になってもよい)が描けるような値をとるもの(三角不等式を満足する)
  • ここで出てくる三角不等式は「三角形ABCがあるときに、AからCへ行くのに、まっすぐ行くほうがBを経由していくよりも距離が短い。どの点からどの点へいく場合にも当てはまる」ということ。
  • 今、3つの何かA、B、Cがあり、BC,CA、AB間の距離がa,b,cとする。
  • AP+PB=c,BP+PC=a,CP+PA=bを満足するように、A,B,C,Pを平面に配置できるだろうか。
  • AP=x,BP=y,CP=zとすると
    • x+y=c,y+z=a,z+x=bである
    • この3式より、2(x+y+z)=a+b+c=Sumという関係が得られて
    • x=Sum/2-a,y=Sum/2-b,z=Sum/2-cが導ける
    • ここで、三角不等式が成り立つという条件は、x,y,zが0以上という条件と同じである
    • したがって、A,B,Cが3角形をなしているとき、Pを置き、そこから、x,y,zの距離の点としてA,B,Cを配置すればよいので、そのようなA,B,C,Pの配置は存在することがわかる
  • Rでプロットしてみるとこんな感じ
TriangleInequality<-function(A,B,C){
a=sqrt(sum((B-C)^2))
b=sqrt(sum((C-A)^2))
c=sqrt(sum((A-B)^2))

sum3=(a+b+c)/2
x=sum3-a
y=sum3-b
z=sum3-c

center=(A+B+C)/3
fA=x/sqrt(sum((A-center)^2))
fB=y/sqrt(sum((B-center)^2))
fC=z/sqrt(sum((C-center)^2))


A1=center+fA*(A-center)
B1=center+fB*(B-center)
C1=center+fC*(C-center)

xx=sqrt(sum((A1-center)^2))


X=c(A[1],B[1],C[1],center[1],A1[1],B1[1],C1[1])
Y=c(A[2],B[2],C[2],center[2],A1[2],B1[2],C1[2])

d=length(X)
#プロット図を正方形にする
par(pin=c(2,2))
#点を打つ
xylim=c(min(X,Y),max(X,Y))
plot(X,Y,xlim=xylim,ylim=xylim,pch=20,cex=1)
edgeMatrix1<-matrix(rep(FALSE,d^2),nrow=d)
edgeMatrix2<-matrix(rep(FALSE,d^2),nrow=d)
edgeMatrix1[1,2]=TRUE
edgeMatrix1[1,3]=TRUE
edgeMatrix1[2,3]=TRUE
edgeMatrix2[4,5]=TRUE
edgeMatrix2[4,6]=TRUE
edgeMatrix2[4,7]=TRUE
#TRUE成分の添え字を取り出す
Edges1<-which(edgeMatrix1,arr.ind=TRUE)
Edges2<-which(edgeMatrix2,arr.ind=TRUE)
#線分を描く
segments(X[Edges1[,1]],Y[Edges1[,1]],X[Edges1[,2]],Y[Edges1[,2]],col="blue")
segments(X[Edges2[,1]],Y[Edges2[,1]],X[Edges2[,2]],Y[Edges2[,2]])
return(list(edgeLength=c(a,b,c),distance=c(x,y,z),A1=A1,B1=B1,C1=C1))
}


#library(MCMCpack)
rs<-c(0,0.7,1.1)*2*pi
#rs<-rdirichlet(1,c(1,1,1))*2*pi
#rs<-c(0,2/3*pi,4/3*pi)
rs<-sort(rs)

Ar<-c(cos(rs[1]),sin(rs[1]))
Br<-c(cos(rs[2]),sin(rs[2]))
Cr<-c(cos(rs[3]),sin(rs[3]))

TriangleInequality(Ar,Br,Cr)