• 締切済み

水面の波紋

水面を伝わる波紋のプログラムを作りたいのですがどういう風に作っていけばいいでしょうか?? 何か参考になるものなど教えていただければうれしいです。 よろしくお願いします。

みんなの回答

  • hrm_mmm
  • ベストアンサー率63% (292/459)
回答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; }

the_koba
質問者

お礼

重ね重ねご回答ありがとうございます。 Javaはよく知らないので理解するのに手間取ってしまいました。 ネット上にいくつかうまく作っているのを見ましたが、それらは波動方程式を差分法で解いているような感じなんでしょうか?? よくはわからないのですが。 いろいろ調べてみてうまくできるようにがんばってみます。 ありがとうございます。

  • hrm_mmm
  • ベストアンサー率63% (292/459)
回答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/articles/ron34/ron34.html 上記サイトで出てくる関数やフーリエ変換とかを計算させるアルゴリズムが知りたいのだったら、掲示板では無理です。 物理シミュレーションとか流体物理とかの解説本を探して下さい。

the_koba
質問者

お礼

回答ありがとうございました。 上から眺めるようなのにしたいので1bを参考にさせていただきたいと思います。

  • Nigun
  • ベストアンサー率22% (200/893)
回答No.1

せめて使用したい言語くらいは書こうよ。

the_koba
質問者

補足

すいません。MATLABで作ろうと思うのですが、MATLABを使用されている方が少ないと思ったので。 C++でもある程度わかるます。 主にアルゴリズムの部分をアドバイス頂きたいと思います。 配慮に欠けまして申し訳ないです。 どうかよろしくお願いします。

関連するQ&A

  • 水面に大きな波紋を作りたい

    屋外の潟で、水面に大きな波紋を作ろうと考えています。 市販の造波機などは使わずに、自作できないかと考えています。 波のサイズは 波高:震源から20m離れたところで100mm程度を考えています。 ---------------------------------------------------------------- 一つのアイデアとしては、水中(屋外の潟)に鉄もしくはアクリルの円盤を設置して、この円盤を上下に動かすことで、水面に大きな波紋を作ろうと考えています。円盤を動かす動力は見当がつきませんが。。。 ex)『1秒間で1度ずつ上昇と下降→1分間停止→再度、1秒間で1度ずつ上昇と下降→1分間停止.....』 を繰り返す。 円盤 直径:1000mm 厚さ:5mm 重さ最大:40kg 設置位置:水深1000mm 動かしたい水 直径:1000mm 厚さ:1000mm 重さ:785kg 動力は完全に水中隠す。 水深はいまのところ不明だが、基礎としてコンクリートを打設予定のため、動力設置の都合による。 動力は電線を水中埋設をすることは可能。 ---------------------------------------------------------------- 上記の方法で、うまくいくかも不明ですし、何か他のアイデアがあれば、と思い、質問させていただきます。 どなたか、ご回答よろしくお願いいたします。

  • 波紋が出る画像

    サイトのトップページに、カーソルでなぞると水面のように波紋が広がる画像をよく見かけます。 幻想的で気持ちがなごみ、気に入ってしまいました。 そこで自分が作ったサイトにも取り入れたいと思ったのですが、まったく無知なため、どうすればいいのか全く分かりません。 必要なプログラムや、関連のあるサイトを教えてください。

  • 付いて来る波紋

    今でも謎現象でどう調べてもわからないので質問させて頂きます。 昔、某水上公園に連れていってもらった時、池に沿って歩いていたら自分のいる場所から一直線に、岸に垂直に波紋が付いて来たことがありました。 こんな感じです。 ◯→自分 |→岸際 ・→波紋 岸 | ◯ | ・・・・・・・ 岸 | 池 波紋はアメンボが動いた時にできる波紋とよく似ていたと思います。 だいたい3メートルくらいの長さでした。 天気はたしか曇りでした。 水面に近づいてよく見ようとすると消えてしまいました。また、離れすぎても消えてしまいました。 走っても付いて来ます。立ち止まっても消えることは無いです。 石を投げてみましたが、一瞬消えてすぐ復活します。 ただアメンボではなかったです。小魚でもなかったです。その程度のことは確認できる位の距離でした。 近くにいた母に尋ねてみたところまともに取り合ってくれませんでした・・。 小雨じゃないの?と言われましたが雨は降っていませんでした。 一緒に立ってみてみようとしたのですが、二人で立つと波紋は起きませんでした。 再び一人になると発生しました。 母一人では発生しませんでした。 これは一体何なのでしょうか。 今思い返してみれば、母にはしゃがんでもらったりして一定の背の高さに反応するのか、餌をまいて反応するかなどいろいろ試してみればよかったと思います・・。 なにかそういう微生物でしょうか。 それとも河童のしわざ的なものなのでしょうか。質問すべきカテゴリもよくわかりません。 同じような体験をした方、原因が分かる方、聞いたことがある方、いらっしゃいましたらよろしくお願い致します。思い返すたびもやもやします・・。

  • 波紋

    波紋があることを説明するときに、何と言うのが適切でしょうか。 「波紋が立っている」?「波紋が広がっている」? それとも他に適切な表現があるんでしょうか… 回答お願いします。

  • 波紋をFlashで表現

    Flashの勉強を始めて間もない者です。 皆様の意見をどうぞお聞かせください。 現在、Flashでバケツに張った水の上に、一滴水を垂らした時の波紋の広がり方を評伝しようと取組中です。 それらしいものはできているのですが、どうにも波紋の広がるスピードに違和感があり、納得できません。 今回、波紋は水面を真上から見た状態で、楕円ではなく円で広がるようにして作っています。 その場合なのですが、波紋が放射線状に広がっていくスピードというのは、 ずっと同じままでしょうか? 試しに、今は始めはスピードを上げて広げ、後半でスピードを落として広がりながら消えていく、というつくりになっています。 皆さんのご意見などありましたら、どうぞお聞かせください。 宜しくお願い致します。

  • 波紋のぼやけ

    刀で波紋を切っ先から下へ見ていくと途中で薄らいではっきりしてないところがあると言うのは波紋出し・焼入れの失敗の刀ということですか?

  • 波紋を呼ぶ、波紋が広がる・広げるは悪い意味で使う?

    こんばんは。 波紋を呼ぶとか波紋が広がるといった言葉は、 悪い影響や動揺、混乱が広がる様子を表す場合のみに使われるのでしょうか。 実際、そういった用例を多く見かけますが、よい意味に使うことはできるでしょうか。 教えてください。

  • 波紋 エフェクト

    ming+phpでflash作成をしているのですが、タイトル通り画像に波紋の エフェクトを施したいのですが、flashlite1.1でactionscriptだけで 波紋を作成する事は可能でしょうか? ご教授よろしくお願い致します。

    • ベストアンサー
    • Flash
  • ペンタブの波紋について

    windows7にするとペンタブでクリックする度、波紋が出て 邪魔なのでネットで調べて「Tablet PC Input Service」を無効化すると 波紋は消えたけどペンのポインタの速度が遅くなって 非常に動かしにくいです。これはなんとかならないのでしょうか? ほかにも波紋消す方法があったら教えてください>< ちなみに使っているペンタブはintous4です! ※ほかにローカルポリシーエディタから設定する方法もあるらしいのですが、 自分のPCには搭載されてなかったため無理でした・・。

  • リアルな波紋

    アドブフォトショップエレメンツを使ってリアルな波紋を作ろうと試みたんですけれども・・・・・上手く出来ません・・・・ ・・・途中でつまずいています・・・。 junicsというサイトの、リアルな波紋を作ろうという所を見ながらやっているんですけれども・・・・。 フィルタ→変形→極座標と、指示通りにやってもうまくいきません・・・渦巻きにできない・・・・。 ほとんど、フォトショップ使った事ないんで・・・さっぱりです・・・。 初心者にも分かるような、もっとわかりやすい作り方を教えてくれる所はありませんか? 本や、自力で地道にコツコツ使い方を覚えていくしか方法はないんですか?

専門家に質問してみよう