2016-11-09 13 views
0

私は2次元表面を記述する行列を持っており、任意の線の表面に沿って値を計算できる必要があります。 R:任意の線に沿った2D関数の値を求める

この

は、最良の例で説明されて

#x and y axes 
x=c(1:100) 
y=c(1:100) 
# 2D Matrix function defined as 0 except for a middle box filled with 1 
M=matrix(0,nrow=100,ncol=100) 
M[40:60,40:60]=1 
# define two points 
x1=50 
y1=50 
x2=23 
y2=80 
# plot contour graph of M, add points (x1,y1) and (x2,y2) 
# and a line connecting the two 
contour(x,y,M) 
points(x1,y1,col=2) 
points(x2,y2,col=3) 
lines(c(x1,x2),c(y1,y2),lty=2) 

私は何をしたい値では、たとえば、(X2、Y2)に(X1、Y1)からのラインに沿ってMの値を取得することです(xvec、yvec)ここで、xvec = seq(x1、x2、length.out = N)、yvecについても同様です。

Rでこれを行う簡単な方法はありますか?

よろしくお願いいたし

+0

これまでにどのような方法を試しましたか? – dww

+0

長い道のりは、ラスタを作成し、線を描画し、すべてを空間的なコンテキストに変換し、前記線が交差するセルから値を抽出することです。 –

答えて

1

2つの列の行列(ここN <- 20を想定)を受け入れるために「[」機能の能力を使用して、実際に非常に簡単:

M[ cbind(xvec,yvec) ] 
[1] 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 

インデックスが切り捨てられるので、値はウォン引数が整数でないときは、最も近い点のものである必要があります。

+0

もちろん!ブリリアント! ありがとう – stuttungr

関連する問題