隣接する2つの座標間の距離を計算する方法は?

隣接する2つの座標間の距離を計算する方法は?

3つの列と任意の数の行(行)を持つファイルがあるとします。各行はxyz座標に対応します。

1  2  3 
4  5  6
7  8  9
10 11 12
...

最初と2番目の座標、2番目と3番目の座標、3番目と4番目の座標などの距離をどのように計算しますか?

これが私がすることです。しかし、私の考えはもっと簡単かもしれません。

a=`wc -l < oldfile`
for i in $(seq 2 $a); do
   j=$((i-1))
   sed -n "${j},${i} p" <oldfile
done > ala

split ala -l 2 ala.
for i in ala.??; do
   echo `cat $i`| awk '{printf  "%.10f \n", sqrt (($4-$1)^2 + ($5-$2)^2) + ($6-$3)^2}'
done > newfile

どんな答えでも大歓迎です。私はLinuxプログラミングに初めて触れたので、および/またはを使用する簡単なコマンドを使用して非常に感謝しsplitます:)。catechoawk

ありがとうございます。

ベストアンサー1

次のawkコマンドは、名前付きファイルの1行からスペースで区切られた(x、y、z)座標を読み取り、file各行間の距離を計算します。

awk '
NR > 1 { printf "%f\n", sqrt(($1-x)^2 + ($2-y)^2 + ($3-z)^2) }
       { x=$1; y=$2; z=$3 }' file

上記のコマンドは、awk最初の行を除くすべての行について、現在の行に与えられたポイントから前の行に与えられたポイントまでの距離を記録します。変数と には、x距離値を計算して出力した後に更新された前の行の座標が含まれます。yz

入力あり

7 4 3
17 6 2
-2 0 0

...結果は

10.246951
20.024984

おすすめ記事