
A 回答 (3件)
- 最新から表示
- 回答順に表示

No.3
- 回答日時:
No.2です、前回の回答で、色濃度変換関数が変でしたね。
sin関数の範囲を勘違いしたものになっていました。あと、振幅の減衰も入ってなかった。まあ、物理学的な細かい計算は省いて、単純なsin関数で色を決めて、同心円を描くだけでも、雰囲気は出せそうです。
ということでJava Appletで作ってみました。
減衰を入れてないのと、drawOvalの精度の問題で水面と云うより、なんだか電波の発信のような感じになってしまったけど、絵を描くところだけ抜粋すると以下のようなプログラムです。
MATLABはやったことないので、Cも今使ってないので忘れたし、計算部分をコメントでなんとか理解して貰えれば、画像出力部分を使用言語に合わせて書き換えれば、なんとかなるかと思います。
あと、定数項を適宜変更すると、もうちょっと雰囲気が出るかもです。
// クラス内フィールドで保持変数
private int img_width = 200;// 画像横幅
private int img_height = 200;;// 画像縦幅
private int x0 = 100;// 中心位置x
private int y0 = 100;// 中心位置y
private double rmax= 100;// 最大半径
private double rf = 50;// 波の水平方向 1周期の距離 dot
private double tf = 2;// 中心での波の 1周期に要する時間 sec
/** @param t : 時刻tでの画像を得る */
Image calcImage( double t ){
Image off_img = createImage(img_width,img_height);
Graphics dt_img = off_img.getGraphics();
double tht,k;
int r,g,b,x,y,rr;
double pai_rad = 2* Math.PI ;// 1周期=2π
for ( int i = 2; i< rmax; i+=2 ){
tht = pai_rad * ( (t/tf) - ((double)i/rf) );
// t/tf で中心位置の位相、 i/rf で半径r位置の位相、離れたところは位相が遅れるので引き算
k = ( Math.sin( tht ) +1.0 ) * 0.5;
//sin関数を 0~1に変換
g = (int)( 255.0 * k);// green
if( g>255 ){ g=255; }else if( g<0 ){ g=0; }
r = 125;// red
b = 255;// blue
dt_img.setColor(new Color( r, g, b));
// ペン色設定 青紫~薄水色で変化
x = x0-i;
y = y0-i;
rr= i*2;
dt_img.drawOval( x,y, rr,rr);
// javaでは外接四角形を指定して内接円を描くので
}
return off_img;
}
この回答へのお礼
お礼日時:2006/11/24 20:53
重ね重ねご回答ありがとうございます。
Javaはよく知らないので理解するのに手間取ってしまいました。
ネット上にいくつかうまく作っているのを見ましたが、それらは波動方程式を差分法で解いているような感じなんでしょうか??
よくはわからないのですが。
いろいろ調べてみてうまくできるようにがんばってみます。
ありがとうございます。

No.2
- 回答日時:
プログラムする前に、波紋を現すための物理学的記述の方は、解ってるのでしょうか?
これが解っているとして、(私はそこまで調べる気はないので)
1.水面を真横から眺めるのか、上から眺めるのか、をまず決める。
1a。横から眺めるなら、 横軸を波紋伝搬方向x、縦軸を波の高さh、F(t、x)を時刻tでの波の位相を求める関数として
h = sin( F(t,x) );
でグラフを書いていけばよいかと。
1b。上から眺めるなら、画面は水面x,y、で波の位相を色の濃淡で現すのが多いかな。
F(t,x,y)を時刻tでの波の位相を求める関数として
色濃度(0~1.0) = sin( F(t,x,y) ) + 0.5;
でx、y平面をプロットしていけば、有る時刻の水面が書ける。
具体的なプログラムは、それぞれの言語のお作法によるから、まずは画像表示させるところはクリアする必要があります。
Fの記述については、以下あたりをみると結構面倒なプログラムになりそう
http://www.acs.i.kyoto-u.ac.jp/info/ndyn/article …
上記サイトで出てくる関数やフーリエ変換とかを計算させるアルゴリズムが知りたいのだったら、掲示板では無理です。
物理シミュレーションとか流体物理とかの解説本を探して下さい。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
リンクを知らせる手のマークが...
-
FC2ショッピングカートのカスタ...
-
画像サイズの変更の仕方を教え...
-
機種依存文字、m2(平方メート...
-
3つの画像を中央に寄せて表示さ...
-
ボタンをセル内一杯に表示させ...
-
htmlの文字が縦書きになる
-
CSSのクラス名・ID名の指定でワ...
-
含む含まないという概念自体の...
-
htmlのolやulなどlistにtitleや...
-
<h1>、<h2>と<p><div>の行間を...
-
【html&css】太さの違う2本線の...
-
「dt」「dd」の内容を一列で表...
-
CSSでクラスのエイリアス(include)
-
改行ほどは行かないけど、若干...
-
hタグの右横に画像を表示
-
H1タグを画像にしたい
-
CSSに同じclass名がいっぱい‥。...
-
<div>と<div>の間の10px程の...
-
【ヒトの神秘】美男美女から何...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ボタンをセル内一杯に表示させ...
-
リンクを知らせる手のマークが...
-
XML画像データををHTMLで簡単に...
-
inputタグでサーバにデータを送...
-
【HTML/CSS】ボタンの枠が伸び...
-
画像の横に文字をうまく配置で...
-
機種依存文字、m2(平方メート...
-
プルダウンの選択リストの中に...
-
htmlで画像を2個ずつ並べていき...
-
HTMLのIMAGEに。。
-
画像をクリックして元に戻すには
-
javaをつかってテキストと画像...
-
HTMLでボタンを横に2つ並べる方法
-
IE7だけに出る謎の空白(CSS)...
-
IEでの”a img”の枠線について
-
ワードプレス max-width100%が...
-
画像の一部を選択した時のみマ...
-
画像をクリックして同じページ...
-
cssヘッダー画像の下に配置した...
-
UDP通信を使うチャットプログラ...
おすすめ情報