R版KETpic2012

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---
  (Ⅲ)    |
   (Ⅲ)   |  (Ⅳ)
  (Ⅲ)    |


2012年12月 5日 (水)

R版KETpicで作図/「排水トンネル標準断面図」を描く

■R版KETpicで「排水トンネル標準断面図」を描く.
『土木製図,実教出版(平成22年2月) p.69の図の一部』

Tunnel_121205_b1

※縮尺を指定して,任意縮尺の正確な作図ができる.

■覚書
●構造物の輪郭点座標および寸法線の座標をリストアップする.
●対称図面の場合は,右半分を作図し左は対称移動で取得
Joingraphics
Reflectdata
Flattenlist
●円弧
Circledata
Partcrv  大変役立ちます
Ptstart
Ptend
●角度記号
Anglemark
●テキストの配置
Rのtext関数
引数:
文字の回転角:srt=90
文字サイズ:cex=0.7
文字位置の微調整:adj=c(0.5,-0.5) 大変役立ちます
文字位置にpos(1,2,3,4)を使った場合にはadjはきかないようです.
●準備する関数(ニーズに応じて作成する)
・任意点から任意の方向に線を引く
 引数:位置,方向,引く線の長さ
・線分の角度を取得する
・矢印を描く【方向が正しくなるように,しっかり作る】
 開きの角度は一般には30度です.開き角度も引数にするとよいでしょう.
 引数:位置,方向,サイズ,開きの角度
・寸法線,寸法補助線を一括に描く
 引数:座標ベクトル c("SR2","SR4","SR5","SR6","SR7","SR8")
  複数の鏃付寸法線を一括処理(ichi=1 2 3) 1:鏃両サイド 2:線分の向きに鏃 3:逆向きに鏃
・複数の線分(寸法線も含む)の中点を一括取得する
 中点に限らずn等分点の取得がよいかも.
・同方向の矢印群を一括配置する.
・鏃付角度記号
複数の鏃付角度記号を一括処理
(ichi=1 2 3) 1:鏃両サイド 2:線分の向きに鏃 3:逆向きに鏃
・線分,鏃,線分の中点の一括取得
・eval(parse(text=・・・]))の利用

●関数例
作業効率化のための,鏃付寸法線や鏃付角度記号の一括処理例
【複数の座標を引数とし,線分とその線分に対応した鏃を返す関数の作成事例】
寸法値の位置は,各線分や角度記号(円弧状のもの)の中点などを取得
しその値で概略の設定を行う.位置の調整は「Rのtext関数」のadj引数で行う.

Sunpo_sen_test_2

※KETpicをベースに自作の作図関数が作れると思います.
※寸法値などのテキストの配置に便利な関数を作るとよいでしょう.

■矢印の鏃を描く関数(Yajirihead)の例(参考.不具合があるかもしれませんが)
●参考サイト
矢印をプログラムで描く;単純ベクトル加算法
http://k-hiura.cocolog-nifty.com/blog/2010/11/post-2a62.html

#引数:位置,向き,サイズ(h鏃の高さ),鏃の開き角度(°)
デフォルト:size=1, angle=30

Yajirihead<- function(P,Vec,size=1,angle=30){
  h=size
  #指定した向きのベクトル(向きベクトル)
  Vx=Vec[1]
  Vy=Vec[2]
  #向きベクトルの長さ(大きさ)
  leng=sqrt(Vx*Vx+Vy*Vy)
  #向きベクトルの単位ベクトル
  UV=c(Vx,Vy)/leng
  angle=angle/2
  #2w鏃の底の長さ   #h鏃の高さ
  w=h*tan(angle*pi/180)
  #鏃の左方向単位ベクトル
  Lu=c(-UV[2],UV[1])
  #鏃の左羽のx,y座標
  PL=c(P[1]+Lu[1]*w-Lu[2]*h,P[2]+Lu[2]*w+Lu[1]*h)

  #鏃の右方向単位ベクトル
  Ru=c(UV[2],-UV[1])
  #鏃の右羽のx,y座標
  PR=c(P[1]+Ru[1]*w+Ru[2]*h,P[2]+Ru[2]*w-Ru[1]*h)
  Out=Listplot(PL,P,PR)
  return(Out)
}

●R版KETpicでの使い方
rm(list=ls(all=TRUE))
load("ketpic4_0_0c_ltd.Rdata")
load("tgpack121206.RData")
WindispT()
P=c(1,0.5) #位置
muki=c(1,2) #鏃の方向(向き)
Tmp=Yajirihead(P,muki,0.5,30) #Tmp=Yajirihead(P,muki,size=0.5,angle=30)
WindispT(Tmp,P)

●必要なR版KETpicパッケージは以下からDL
「ketpic4_0_0c_ltd.zip」
「tgpack121206.zip」

■簡単な作図例
R版KETpicで作図してみましょう.
描き方が分かれば作図は容易と思います.
『土木製図,実教出版(平成22年2月) p.21に説明があります.
※図はLatexに簡単に入ります.

1) 二つの円弧を他の円弧でつなぐ作図(1)
2enko_enko_a

2) 二つの円弧を他の円弧でつなぐ作図(2)
2enko_enk_2_web


■柄つき鏃関数 HandtukiYajiri
HandtukiYajiri<- function(P,Vec,yajisize=1,angle=30,handsize=1,Yajipos="t",Handpos="t") 
引数:Yajipos
 Pに対する鏃位置の選択("t","c","b")
引数:Handpos
 Pに対する柄先端(鏃部)位置の選択("t","c","b")
「tgpack121212.zip」をダウンロード

●HandtukiYajiriの使用例(1)
rm(list=ls(all=TRUE))
load("ketpic4_0_0c_ltd.Rdata")
load("tgpack121212.RData")
WindispT()
P<- c(1,2)
Vec<- c(1,-1)     #鏃の向き
yajisize<- 0.5      #鏃の高さ
angle<- 30          #鏃の開き角度
handsize<- 2       #柄の長さ
Yajipos<- "t"      #鏃の先端がPに一致. P座標に対する鏃の配置選択("t","c","b")
Handpos<- "c"    #Pに対する柄先端(鏃部)位置の選択("t","c","b"),柄先端がPより鏃の高さの1/2手前に一致
Tmp<- HandtukiYajiri(P,Vec,yajisize=yajisize,angle=angle,
handsize=handsize,Yajipos=Yajipos,Handpos=Handpos)
WindispT(Tmp,P)

Etuki_yajiri

●HandtukiYajiriの使用例(2)

En_yajiri


●HandtukiYajiriの使用例(3) 鏃のアニメーション
・参考サイト
Package ‘animation’June 20, 2012
http://cran.r-project.org/web/packages/animation/animation.pdf  の11-12ページ

######
rm(list=ls(all=TRUE))  #ワークスペース上の全てのオブジェクトを消去する
library(animation)
load("ketpic4_0_0c_ltd.Rdata")
load("tgpack121212.RData")

WindispT()
yajisize=0.5
angle=45
handsize=1
Yajipos="t"
Handpos="b"
r=4.5
x0=4.5
y0=0
par(bg = "white")   # ensure  he background color is white
ani.options(outdir="C:/rwork/****") #出力先フォルダの指定
ani.record(reset = TRUE) # clear history before recording
for(i in 1:3600){
  i=i/10
  theta=i*pi/180
  x=r*cos(theta)
  y=r*sin(theta)
  P=c(x,y);
  Vec=c(x-x0,y-y0)
  x0=x
  y0=y
  if(i%%5==0){
    Tmp<- HandtukiYajiri(P,Vec,yajisize=yajisize,angle=angle,handsize=handsize,Yajipos=Yajipos,Handpos=Handpos)
    WindispT(Tmp[[1]],new=TRUE,width=3,color="blue") #鏃の描画
    WindispT(Tmp[[2]],new=TRUE,width=5,color="red")  #柄の描画
    ani.record()
    WindispT()  #描画の消去
  }
}
  oopts = ani.options(interval = 0.1) #interval = 0.5 適宜変更 単位sec  参考サイトp.6参照
  ani.replay()

##  or  export  the  animation  to  an  HTML  page
saveHTML(ani.replay(), img.name = "Yajiri")    #Yajiri:画像ファイル名

######

※R実行後,ブラウザーが立ち上がりアニメーションが表示される.

※以下に作成されたファイルをおきました(参考)
「animeyajiri.zip」をダウンロード (107KB.20121214修正) にある
index.htmlをブラウザで開く.


2012年4月 8日 (日)

『データからの知識発見('12) 』 放送大学講義TV

■『データからの知識発見('12)』   放送大学講義TV
第1回:4/7 土曜日 20:00-20:45
Rを使用しているようです.

参考サイト
データからの知識発見('12) シラバス
http://www.ouj.ac.jp/hp/kamoku/H24/kyouyou/B/ningen/s_1554522.html
Introduction to Data Mining Top page
RjpWiki http://www.okada.jp.org/RWiki/

=======================
R参考サイト
R (大変参考になりました)
http://www.geocities.jp/ancientfishtree/R_JI.html 井上 潤氏
R でのパッケージのインストール
http://www.kkaneko.com/rinkou/r/rpackage.html
Installing R and Packages
http://www.r-phylo.org/wiki/HowTo/GettingStarted

●Cygwin Terminalでのinstall.packageの利用例
install.packages("ape")
install.packages("geiger")  など
=====
$ R   ← Cygwin TerminalからRを起動

R version 2.14.2 (2012-02-29)
Copyright (C) 2012 The R Foundation for Statistical Computing
ISBN 3-900051-07-0
Platform: i686-pc-cygwin (32-bit)

Rは、自由なソフトウェアであり、「完全に無保証」です。
一定の条件に従えば、自由にこれを再配布することができます。
配布条件の詳細に関しては、'license()'あるいは'licence()'と入力してください。

Rは多くの貢献者による共同プロジェクトです。
詳しくは'contributors()'と入力してください。
また、RやRのパッケージを出版物で引用する際の形式については
'citation()'と入力してください。

'demo()'と入力すればデモをみることができます。
'help()'とすればオンラインヘルプが出ます。
'help.start()'でHTMLブラウザによるヘルプがみられます。
'q()'と入力すればRを終了します。

> install.packages("ape")
パッケージを ‘/usr/lib/R/site-library’ 中にインストールします
(‘lib’ が指定されていないので)
--- このセッションで使うために、CRANのミラーサイトを選んでください ---
CRAN mirror

1: Argentina (La Plata)      2: Argentina (Mendoza)
3: Australia (Canberra)      4: Australia (Melbourne)
5: Austria                   6: Belgium
7: Brazil (PR)               8: Brazil (RJ)
9: Brazil (SP 1)            10: Brazil (SP 2)
11: Canada (BC)              12: Canada (NS)

39: Italy (Padua)            40: Italy (Palermo)
41: Japan (Hyogo)            42: Japan (Tsukuba)
43: Japan (Tokyo)            44: Korea

79: USA (PA 2)               80: USA (TN)
81: USA (TX 1)               82: USA (TX 2)
83: USA (WA 1)               84: USA (WA 2)

選択: 43
以下にインストール中:  /usr/lib/R/site-library/ape/libs

* DONE (ape)
ダウンロードされたパッケージは、以下にあります
        ‘/tmp/RtmpuNd0PG/downloaded_packages’
> library(ape)

====
●Rプロンプトのディレクトリ指定例
> setwd("c:/cygwin/home/ctakaha/rwork")
> setwd("batchR")
> getwd()
[1] "/home/ctakaha/rwork/batchR"
> setwd("/home/ctakaha/rwork")
> source("drawTree.R")
> source('drawTree.R')
> source('/drawTree.R')

●Cygwin Terminalプロンプトでの作業メモ
R (http://www.geocities.jp/ancientfishtree/R_JI.html) の学習メモ

$ rscript scatterTime.R PosMean.txt
inputFile: PosMean.txt
null device
          1

$ R --vanilla --quiet --args in.tre < script.R > log

●DOS窓からRを利用した例(R版KETpicの利用)
DOS窓からRを起動する例 Macターミナルなどでも同じようにできると思います.
・コード例

#R版KETpicの利用
#DOS窓からRを起動する例 Macターミナルなどでも同じようにできると思います
#DOSコマンドプロンプトに
#Rscript Batch_ex4.R
#または
#R --vanilla --quiet --args in.tre < Batch_ex4.R > log
#と入力する
#===
rm(list=ls())
load("ketpic4_0_0b_ltd.Rdata")  #KETpic
load("tgpack111220.RData")  #KETpic
pdf("zu_ex1.pdf") #図ファイルの設定
a <- 10
cat(a,"\n") #logファイルに出力されている
x <- 1:10
y <- 1:10
plot(x,y)   #plot(1:10)と同じ
P1 <- Paramplot("c(cos(t)^3, sin(t)^3)", "t=c(0,2*pi)")
F1 <- Plotdata("1/(x^2-3*x-1)", "x", "N=200", "E=x^2-3*x-1", "D=10")
Setwindow(c(-2, 4), c(-2, 4))
WindispT()
WindispT(P1, new=TRUE)
WindispT(F1, color="RED", new=TRUE)
dev.off()   #デバイスを閉じる

を閉じる
#===

・DOS窓からRを利用した画面


・作図例
pdfファイル2ページに描画された.
画像ファイルの種類は適宜変更可能のようです.



注意:
pdfファイルが開いていると実行がとまります.
閉じてから実行するとよいと思います.
または,
図の出力ファイル名を実行時にパラメータとして与えることもよいと思います.
たとえば,


C:\mywork>Rscript Batch_ex5.R 10  ←この10をファイル名の一部に利用
修正コード例
#===
rm(list=ls())
load("ketpic4_0_0b_ltd.Rdata")  #KETpic
load("tgpack111220.RData")  #KETpic
args <- commandArgs() 
fNo <- args[6]             # パラメータ10の取得
fileName <- paste("zu_", as.character(fNo), ".pdf", sep="")  #zu_10.pfdと設定
pdf(fileName)              #図ファイルの設定
a <- 10
cat(a, "\n")                #logファイルに出力されている
x <- 1:10
y <- 1:10
plot(x,y)                     #plot(1:10)と同じ
P1 <- Paramplot("c(cos(t)^3, sin(t)^3)","t=c(0, 2*pi)")
F1 <- Plotdata("1/(x^2-3*x-1)", "x", "N=200", "E=x^2-3*x-1", "D=10")
Setwindow(c(-2, 4), c(-2, 4))
WindispT()
WindispT(P1, new=TRUE)
WindispT(F1, color="RED", new=TRUE)
dev.off()                     #デバイスを閉じる
#===

●階段関数を含むた作図例
#===
rm(list=ls())
load("ketpic4_0_0b_ltd.Rdata")  #KETpic
load("tgpack111220.RData")  #KETpic

MyFunc <- function(x) { # 階段関数(step function)
  if (x > 1) {
    Out <- 1
  }else{
    Out <- -1
  }
  return(Out)
}

args <- commandArgs()
fNo <- args[6]
fileName <- paste("zu_", as.character(fNo), ".pdf", sep="")
pdf(fileName) #図ファイルの指定
a <- 10
cat(a, "\n") #logファイルに出力されている
x <- 1:10
y <- 1:10
plot(x, y)   #plot(1:10)と同じ
P1 <- Paramplot("c(cos(t)^3, sin(t)^3)", "t = c(0,2*pi)")
F1 <- Plotdata("1/(x^2-3*x-1)", "x", "N=200", "E=x^2-3*x-1", "D=10")
F2 <- Plotdata("MyFunc(x)", "x", "N=200", "D=1") # 階段関数
Setwindow(c(-2, 4), c(-2, 4))
WindispT()
WindispT(P1, new=TRUE)
WindispT(F1, color="RED" ,new=TRUE)
WindispT(F2, color="blue", new=TRUE) # 階段関数
dev.off()   #デバイスを閉じる


青色:階段関数

【補足】
args <- commandArgs()  を
args = commandArgs(TRUE)
または
args
<- commandArgs(trailingOnly = TRUE)
とすると,パラメータ以下を取得するようです.

【確認例1】arg_test.R     のコードは次の2行
args = commandArgs()
print(args)

C:\mywork>Rscript arg_test2.R 66
[1] "/usr/lib/R/bin/exec/R" "--slave"               "--no-restore"
[4] "--file=arg_test.R"     "--args"                "66"


【確認例2】arg_test2.R     のコードは次の2行
args = commandArgs(TRUE)
print(args)

C:\mywork>Rscript arg_test.R 66
[1] "66"


 ●参考サイト
Rscript
http://www.okada.jp.org/RWiki/?Rscript
バッチモード
http://www.okada.jp.org/RWiki/?%A5%D0%A5%C3%A5%C1%A5%E2%A1%BC%A5%C9#u4254182
バッチモードでRを動かす
http://d.hatena.ne.jp/KABIRA/20110805/1312522236
Cookbook for R
http://wiki.stdout.org/rcookbook/Graphs/Output%20to%20a%20file/
An Introduction to R
http://cran.r-project.org/doc/manuals/R-intro.html#Scripting-with-R
wiki:CommandLineProcessing
https://projects.uabgrid.uab.edu/r-group/wiki/CommandLineProcessing
How can I read command line parameters from an R script?
http://stackoverflow.com/questions/2151212/how-can-i-read-command-line-parameters-from-an-r-script
Awk script in R
http://stackoverflow.com/questions/9075208/awk-script-in-r


2012年2月25日 (土)

RStudioをインストールしてみました

RStudioをインストールしてみました
http://www.rstudio.org/
図はクロソイド曲線(緩和曲線として道路,鉄道,ジェットコースターなどで活用)の作成例です.

Download and Install R
http://cran.r-project.org/
R自身の環境で学習をはじめるとよいと思います.




無料ブログはココログ
2017年8月
    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