• ベストアンサー

gnuplotのベクトルの回転

現在、csvからデータを読み取り、gnuplotでベクトル場を表示させているのですが、そのベクトルの方向を自由に変えたいと考えています。  そこで質問なのですがgnuplotのコマンドで、ベクトルを回転させる方法はあるのでしょうか?正直、もとデータを毎回操作して角度を変えるのは手間が掛かるので、gnuplotでできたらいいなと思っています。最悪90度だけでもできれば幸いです。 回答お願いします

noname#244557
noname#244557

質問者が選んだベストアンサー

  • ベストアンサー
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.1

いま、どんな感じにCSVからデータを取り出しているのでしょうか? usingでは、$1,$2等とそのまま使う他に、それぞれを使った式を使うこともできます。 回転させるなら、回転行列を掛けた ($1*cos(theta)-$2*sin(theta)):($1*sin(theta)+$2*cos(theta)) のように計算させるのはどうでしょう http://takeno.iee.niit.ac.jp/~foo/gp-jman/data/20131016/gnuplot-ja-div/node165.html

noname#244557
質問者

お礼

回答ありがとうございます。返事遅くなってしまいすいません。  取り方は、4つのデータをcsvからseparator","してplot""with vectorでやってます。 gnuplotに関しては最近始めたばかりで、調べながらやっていたのですが、usingを利用してデータを取り出したときに計算させる方法があるとは知りませんでした。 この方法でやってみたいと思います。回答ありがとうございます。

関連するQ&A

  • gnuplotで複数csvファイルからデータ取得

    http://t16web.lanl.gov/Kawano/gnuplot/datafile3.html を読んだところ、複数のファイルから読み込む場合は、UNIXのコマンドを使えばいいらしいことはわかったのですが、 #a1.csv 1.0,2.0 2.0,4.0 3.0,6.0 #a2.csv 1.0,1.0 2.0,4.0 3.0,9.0 というファイルに対し、とりあえずpasteを利用して複数行呼び出しを行おうとしたのですが、 gnuplot> set datafile separator "," gnuplot> plot "<paste -d',' a1.csv a2.csv" using 1:2 warning: Skipping unreadable file "<paste -d',' a1.csv a2.csv" No data in plot と表示されてしまいました。 一体どのようにすれば、複数のcsvファイルを結合したものを読み込めるのでしょうか? また、Cygwin上でpasteコマンドについてちょっと実験してみたのですが、 $paste -d"," a1.csv a2.csv >output.txt とすると、 #output.txt 1.0,2.0 ,1.0,1.0 2.0,4.0 ,2.0,4.0 3.0,6.0 ,3.0,9.0 と表示されるのですが、 $paste -d"," a1.csv a2.csv とすると、Cygwin上には、 ,1.0,1.0 ,2.0,4.0 ,3.0,9.0 と表示されます。 output.txtに出力した際は、メモ帳上では、結合している部位で改行されているようには見えないのですが、ブラウザにコピペしたところ改行されてしましました。 どうやら、結合した場所に\rが入っているくさいです。 このpasteを使う方法以外にもgnuplotで扱うのにもっといい方法があるという場合はその方法も教えていただけると幸いです。 よろしくお願いします。

  • 3Dデータをプロットしてマウスで任意の角度で回転させるソフト 

    3Dデータをプロットしてグラフを作成し、マウスで任意の角度で回転させるソフトを探しています。フリーウェアでそのようなものがないか教えてください。 gnuplotを使用していましたが、マウスで角度を変えて見ることができるソフトはないかという要望がでたため探しています。

  • 回転した座標軸と一致させるための回転軸と角度の算出

    こんにちは。お知恵をお借りしたく質問致します。 プログラミング中で出た話題なのですが、計算の問題ですので数学カテゴリが適しているだろうと思い、投稿いたします。 ちょっと説明しにくく図を添付致しましたので併せてご覧いただければと思います。(線がふるえていて申し訳ないです。) 図のように、xyz座標を回転してXYZ座標の向きに一致させたいと考えています。 また、「指定した軸(α,β,γ)を回転軸としてθ度回転する」という関数があるので、それを活用しようと考えています。α,β,γはコサイン値(方向余弦)です。回転方向は、ベクトルの向きに時計回り…右ネジの法則みたいな感じです。 x軸から見たXの角度(θxX), y軸からのX(θyX), z軸からのX(θzX) 同様にx軸から見たY(θxY),θyY,θzY、θxZ,θyZ,θzZ といったように、それらの角度(コサイン値)は分かっています。 (=xyz座標からみたXベクトルの方向余弦、Yベクトルの方向余弦、Zベクトルの方向余弦が分かっている。) z軸とZ軸の外積を取ったベクトルを回転軸として、θzZが分かっているのでその角度で回転することでZ軸は一致しますけど、XY軸は合いません。(当然ですが…) そのXY軸を合わせるためにまた回転するというのも遠回りで、任意の軸1本を中心に何度か回転するだけ(上記関数を1度使用するだけ)で、必ず向きが一致する解があると思うのですが、その任意軸と角度を算出する方法が分かりません。 一般にどういう計算をするのでしょうか。アドバイスいただければ幸いです。 なお、上記関数を用いない方法でも構いません。 「X軸(Y軸、Z軸)を回転軸としてφ度回転する」という関数もあるので、オイラー角を求める方法でも構いません。 その他、説明不足な点がありましたら随時追記致しますので、ご指摘願います。 どうかよろしくお願いいたします。

  • 3Dデータをプロットしてマウスで任意の角度で回転させるソフトを教えて

    3Dデータをプロットしてグラフを作成し、マウスで任意の角度で回転させるソフトを探しています。フリーウェアでそのようなものがないか教えてください。 gnuplotを使用していましたが、マウスで角度を変えて見ることができるソフトはないかという要望がでたため探しています。OSはwindows2000です。

  • ベクトルの定義について教えてください

     最近ベクトルの定義を見直しているのですが、「座標回転に際して座標変数と同じように変換される三つの量」や「直交座標の座標軸間の角度を直角に保ったまま、原点を変えないで方向だけを変える変換(直交変換)の規則に従って変換される量」という定義がよくわかりません。R^3に限って考えて、具体的にどうわからないのかというと 1.座標回転に際してR^3の要素(まだベクトルかわからない)の変換をどう施すか。または、ベクトルの定義以前に座標回転に対するR^3の要素の変換を定める必要があるのではないか。 2.R^3の要素でありながらベクトルとは認められないもがあるのか。あるとしたらどう示すか。  自分の誤解かもしれませんが、R^3の要素がベクトルかどうかを判断するには、R^3の座標回転による変換とR^3に回転行列の要素をそれぞれかけて足し合わせたものが一致するかを確かめるとすると、R^3が座標回転に際してどう変換されるかを定める必要があると思うのです。どなたかご教授お願いします。

  • 3次元以上の直交変換(回転)を、2つのベクトルから求める方法。

    3次元以上の直交変換(回転)を、2つのベクトルから求める方法。 ユークリッド空間上で、例えば、ある2つのベクトルa,bが、 a = [1,0,0]; b = [0,1,0]; のように与えられたとき、aベクトルをbベクトルへ「視覚的に」重ね合わせる直交変換を探しています。 つまり、 b = Xa を満たす直交変換(回転行列)Xの求め方を探しています。 私のイメージとしては、3Dのポリゴンで描かれた自動車をマウスでグリグリ回転させるときに、正面を向いた状態から真横に向ける回転になるでしょうか。 無論、求める直交変換が一意に定まらないことは承知しております(ベクトルと垂直な面方向の自由度など)。また、sinやcosを使う方法は存じ上げておりますが、現在研究中のテーマに不適であるため、あえて利用しません。 どうにか、a,bの成分のみで直交変換を求める(または、直交変換の条件を決定する)一般的な方法があればご教授願います。 また、3次元よりも大きな場合に、例えば、 a = [1,0,0,0]; b = [0,1,0,0]; としたときの、aからbへの回転行列は自由度が高いのですが、 b = Xa を満たす回転行列Xをa,bを用いてどのように求めることができるのでしょうか。 支離滅裂な説明になっているかもしれませんが、もしご存知であればその参考となるURL等をご教授下さい。

  • ベクトルの内積

    問題:二つのベクトルの内積を(a,b)と書くとしよう。つぎの三式は同等であることを示せ(困難ならa,b∈R^2(←二乗)のケースで証明せよ) 1)(a,b)=a’,b 2)(a,b)=||a|| ||b|| cosθ(θはベクトルa,bに挟まれた角度 3)(a,b)=1/2(||a||^2+||b||^2-||a-b||^2) データ添付うまくできなかったのでここに直接書きました。^2は二乗のこ とです。 実は一時間後にテスト…ダメもとで回答待ってます(;_;)

  • 線形変換を教えてください!!

    線形変換を教えてください!! 『原点を通り、ベクトル(sinα,0,cosα)に直交する平面についての折り返しを表す行列を求めよ』という問題があります。 その答えは 『y軸のまわりの角度-αの回転、xy平面についての折り返し、y軸の周りの角度αの回転を続けて行えばよい』となっています。 しかし、自分なりに考えてみて 『y軸のまわりの角度αの回転(z軸をベクトル(sinα,0,cosα)に重ねるため)、xy平面についての折り返し、y軸の周りの角度αの回転(z軸をもとに戻すため)』と考えたほうがしっくりきます。当然答えは違ってくるのですが… 考え方に間違いがあるでしょうか?

  • ばね力による回転運動

    初めまして、以下の質問についてご教授お願い致します。 図に示す通り、O点で回転自由な棒の先端を高さhの位置とばねで接続した構造があります。 棒の自重をM、重心は中心にあるとします。 この時、棒の先端に下方向の力Fを加えて静的に力が釣り合った状態での棒の角度がθであるとします。 ここで、Fを急除荷した場合棒の角度はFがない状態で静的に釣り合った時の角度より大きくなると思いますが、この角度の出し方を教えて下さい。 図 http://download5.getuploader.com/g/tk5/1/%E5%9B%B3.jpg

  • gnuplotをC言語で操作する方法

    C言語を用いてgnuplotを操作しデータファイルから自動的にグラフを作成するプログラムを作ろうとしています。 使用環境はWindows7、VisualStudio2010です。 ほとんどの部分はうまくいったのですが一部分が正しく表示されません。 軸の目盛ラベルの表示フォーマット設定のコマンドで set format x "%.1f" として小数点以下一桁を強制的に表示させるためC言語でパイプを用いて #define GNUPLOT_PATH "C:/gnuplot/binary/pgnuplot.exe" int plot(char *file_name){ FILE *gp; gp = _popen(GNUPLOT_PATH, "w"); fprintf(gp, "set title 'TEST PLOT'\n"); : (中略) : fprintf(gp, "set format x '%.1f' \n");//この部分が正しく反映されません。 : (中略) : fprintf(gp, "plot '%s' using 1:2 with linespoints lt 4 lw 5 pt 6 ps 2.0 lc rgb 'red'\n",file_name); fprintf(gp,"quit \n"); fflush(gp); _pclose(gp); return 0; } '%.2f' の部分をいろいろいじってみたのですがうまくいかず、なぜできないのか原因がわかりません。 fprintf()の数値代入の %f と混ざってしまっているのでしょうか?