« 国勢調査データ【平成22年国勢調査(小地域) 2010/10/01】のDLなど | トップページ | 平面直角座標系 »

2012年12月26日 (水)

点Pが有向線分ABの左側,右側,線上かを判断する関数

■P点が有向線分ABの左側,右側,線上かを判断する関数(Side)

load("ketpic4_0_0c_ltd.Rdata")

Side<- function(A,B,P){
  UV_AB<- 1/Norm(B-A)*(B-A) #ベクトルABの単位ベクトル
  UV_AP<- 1/Norm(P-A)*(P-A) #ベクトルAPの単位ベクトル
  Gaiseki<- Crossprod(UV_AB,UV_AP) #外積
  if(Gaiseki>0){
    print("ABの左側")
  }else if(Gaiseki<0){
    print("ABの右側")
  }else{
    print("AB延長線上")
  }
  return(Gaiseki)
}

#実行例1
A<- c(1,1)
B<- c(5,-1)
P<- c(3,3)
print(Side(A,B,P))

[1] "左側"
[1] 0.9486833

#実行例2
A<- c(1,1)
B<- c(5,-1)
P<- c(3,-3)
print(Side(A,B,P))

[1] "右側"
[1] -0.6

#実行例3
A<- c(1,1)
B<- c(4,1)
P<- c(3,1)
print(Side(A,B,P))

[1] "AB延長線上"
[1] 0


UV_AB<- 1/Norm(B-A)*(B-A) #ベクトルABの単位ベクトル
UV_AP<- 1/Norm(P-A)*(P-A) #ベクトルAPの単位ベクトル
Gaiseki<- Crossprod(UV_AB,UV_AP) #外積

V_AB<- (B-A) #ベクトルAB
V_AP<- (P-A) #ベクトルAP
Gaiseki<- Crossprod(V_AB,V_AP) #外積
としてもよい.

【課題1】  AB延長線上をさらに区分する.
1) P点がAB方向の延長線上にある.  
    A=======>B--P-------
      A===P===>B----------
2) P点が反AB方向(BA方向でAより先)の延長線上にある
     ----P-----A=======>B------
1),2)の判断を加えたコードを作成してみよう.

【課題2】 P点の位置を(Ⅰ)~(Ⅳ)により判定する.

   (Ⅱ)   |
   (Ⅱ)   |   (Ⅰ)
   (Ⅱ)   |
------A======>B---
  (Ⅲ)    |
   (Ⅲ)   |  (Ⅳ)
  (Ⅲ)    |


« 国勢調査データ【平成22年国勢調査(小地域) 2010/10/01】のDLなど | トップページ | 平面直角座標系 »

R版KETpic2012」カテゴリの記事

無料ブログはココログ
2018年10月
  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31