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で質問しましょう!
似たような質問が見つかりました
- その他(占い・超常現象) 天珠の組み合わせについて 1 2022/06/29 00:03
- 物理学 【日本刀を作る刀鍛冶職人さんに質問です】日本刀の波紋は鋼と軟鉄の2枚重ねなので波紋が出る 6 2022/09/06 19:08
- 物理学 物理 7 2023/08/05 11:51
- 伝統文化・伝統行事 AIは伝統工芸に向いていますか? 例えば、AIがたたら吹きで玉鋼を作り、AIが刀鍛冶を行い、波紋を入 5 2023/06/01 20:48
- iPhone(アイフォーン) i phoneの指紋認証について 1 2023/03/21 10:07
- その他(住宅・住まい) 大家さんからの請求に対しての対応方法 10 2022/03/30 17:26
- マウス・キーボード GHUBの光らせ方について、です。詳しい方ご回答お願いします。。 G713のキーボードを使っています 1 2023/04/16 15:49
- Visual Basic(VBA) Vba UserFormを前面に出す方法を教えてください 1 2023/08/17 11:08
- 電気・ガス・水道 便器の水漏れを修理したい 5 2023/07/14 14:20
- DIY・エクステリア 段ボール板に「手早く」色を塗る方法 4 2022/07/26 04:46
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
画像の場合のみ、下線を消す方...
-
table で画像をピッタリとくっ...
-
HTMLは、シングルクォートかダ...
-
3つの画像を中央に寄せて表示さ...
-
リンクを知らせる手のマークが...
-
HTMLでボタンを横に2つ並べる方法
-
floatさせたdtの内容が多い場合...
-
cssヘッダー画像の下に配置した...
-
画像と背景色の幅が合わない
-
画像の横にテキスト
-
CSSの左横に隙間ができてしまい...
-
htmlで画像を2個ずつ並べていき...
-
Safariの場合HTMLの内容を変更
-
htmlの文字が縦書きになる
-
質問1.
-
タグは大文字と小文字どちらが...
-
Macで画像の切り抜きできないの?
-
CSSがなぜかfont-sizeだけ効か...
-
リストの並べ替え
-
ボタンを横に並べて表示させる方法
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ボタンをセル内一杯に表示させ...
-
リンクを知らせる手のマークが...
-
UDP通信を使うチャットプログラ...
-
ポップアップウィンドウのサイ...
-
プルダウンの選択リストの中に...
-
htmlで画像を2個ずつ並べていき...
-
ホームページビルダーの画像サ...
-
XML画像データををHTMLで簡単に...
-
画像のサイズが変わらない
-
画像の場合のみ、下線を消す方...
-
リンクを選択したときの青い枠...
-
レスポンシブ対応のHTML・CSS(...
-
footerの背景が切れて、背景画...
-
html+CSSのみで作るスライドショー
-
ホームページタグ打ち。サイズ...
-
画像の横に文字をうまく配置で...
-
水面の波紋
-
ホームページで画像を横に並べ...
-
【HTML/CSS】ボタンの枠が伸び...
-
HTMLのIMAGEに。。
おすすめ情報