2017-03

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

包絡線で遊ぼう

包絡線というのは、ある形状がパラメータとともに変化していくとき、
これらの形状に接するような曲線のこと。

日常生活に不可欠な包絡線だけど、どうやって計算するか知らないことに気がついたので
ちょっと遊んでみた。

参考:
物理のかぎしっぽ 包絡線
http://hooktail.sub.jp/mathInPhys/envelope/

陰関数とパラメトリック曲線で解析的に解けるやつが書いてあるけど、
解析的に解くのはめんどくさいからいつもどおり数値計算で手抜きしてみた。

とりあえず求めたいもの:
歯車がぐるぐるまわったときの軌跡の包絡線

歯車の形を陰関数で書けだって?そんな無茶な。

そういうわけで、パラメトリック曲線をぐるぐるまわしながら平行移動したときの軌跡を求めることにするよ。
パラメトリック曲線のパラメータをt、ぐるぐるまわして平行移動するときのパラメータをcとするよ。


関数が y=y(t,c), x=x(t,c) のようにパラメータ表示されている場合,包絡線は次の式で表されます.

∂y/∂t・∂x/∂c - ∂y/∂c・∂x/∂t = 0


って書いてあったからとりあえずそのようにやってみる。

∂y/∂t・∂x/∂c - ∂y/∂c・∂x/∂t の部分を f としておくよ。

x(t), y(t) は歯車の形として、パラメータ t での座標と接線方向が分かっているとする。


とりあえずこんな形にしてみた。図の黒いほうの線。
どうみても歯車じゃねーというつっこみは大歓迎だよ。

座標と接線方向は連続じゃないとうまくいかないことが多いから
どうしても角っこができてしまいそうだったら半径のちっちゃな円弧とかで丸めてあげるといい感じだよ。

次に、x(c), y(c) を作っておこう。
c は歯車がぐるぐるまわるためのパラメータで、
歯車がぐるぐるまわる動きは外トロコイドという関数で表されるんだ。

参考:
wikipedia トロコイド
http://ja.wikipedia.org/wiki/%E3%83%88%E3%83%AD%E3%82%B3%E3%82%A4%E3%83%89

ただこのままだとx軸上の点しか扱えないから、もうちょっと任意の場所を表せるように容赦なく魔改造するよ。

cc = cos((rc+rm)/rm*c)
ss = sin((rc+rm)/rm*c)
x = (rc+rm)*cos(c) + px(t)*cc - py(t)*ss
y = (rc+rm)*sin(c) + px(t)*ss + py(t)*cc



px(t), py(t) の座標は c=0 のときの A を原点とした値ということに。
rc は定円の半径、rm は動円の半径らしいね。

これで歯車をぐるぐる動かすとこんな感じになるよ。


これを幾何学的で美しいとみるか、単にきもいとみるかで今後の人生が大きく変わるよ。

c での微分も求めておくね。

∂x/∂c = -(rc+rm)*sin(c) - x(t)*(rc+rm)/rm*ss - y(t)*(rc+rm)/rm*cc
∂y/∂c = (rc+rm)*cos(c) + x(t)*(rc+rm)/rm*cc - y(t)*(rc+rm)/rm*ss


さて、これで f が求まるようになったよ。あとは、f=0 となるようなt, c を探せばいい。
f は実数を返すからけっこう簡単に求まりそうな感じ。

実際テキトーな二分法で求めるだけで結構簡単に求まったよ。


じゃじゃーん。
包絡線じゃないところも出てるけど、まあ元々の式が必要条件ってだけだから仕方ないね。
そのへんは後処理でごまかせばいいような気がするよ。

解が見つかったパラメータt, cをプロットするとこんな感じになった。


わりとなめらかーにつながってるしこれ補間して使ってもよさげ。

ところで、f はパラメータ2つで実数返すってだけの関数なので
ハイトフィールドで雰囲気を確認することも簡単にできるよ。


f=0 のところがきれーに出てるね。

ハイトフィールドで全体を大まかに近似して
ゼロ交差するあたりを細かくサンプリングすればわりといい感じになりそう。

そういうわけで、包絡線で遊んでみたけどけっこう楽しかったのでした。

めでたしめでたし。


スポンサーサイト

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

http://rydot.blog107.fc2.com/tb.php/132-0f66ede0
この記事にトラックバックする(FC2ブログユーザー)

«  | HOME |  »

カテゴリー

ブログ内検索

プロフィール

rydot

Author:rydot
かりんととお茶が好物の情報心理学好きのへたれCAD屋さん且つなんちゃってクリスチャン。

twitter @rydotyosh
hatenablog http://rydot.hatenablog.com/

images下およびdropbox下のリソースはccのはず。プログラムはオープンソースのはず。たぶんリンクフリー。

最近の記事

リンク

このブログをリンクに追加する

最近のコメント

最近のトラックバック

月別アーカイブ

RSSフィード

ブロとも申請フォーム

この人とブロともになる

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。