プロが教える店舗&オフィスのセキュリティ対策術

大きい円の内側にそって小さい円を転がした時の軌跡を作りたいのですが、
その時、小さい円と一緒に動く固定点を作りたいのです。
その固定点の軌跡がハイポサイクロイドになるのですが、
大きい円、小さい円をCircleを使って書いて、
小さい円に固定点を打つ方法はどうしたらいいのでしょうか?

ハイポサイクロイドのパラメータ表示があるのは知っているのですが
それは知らないものとして、
あくまで、円を転がしたらこういう軌跡になった
という感じのプログラムを作りたいのです。

A 回答 (4件)

> このようなものを作りたかったのですが、



実際にどういう方法で実現しているかは、作成した本人でなければ分かりませんが、

> 「小円上の固定点は実は固定点ではなくハイポサイクロイドのパラメータ表示で動かす。
> そして小円は小円で別の命令で動かす」
> ということになるのでしょうか?

少なくとも、この方法で実現可能ですね。

ハイポサイクロイドのパラメータとして必要な、
大円の半径、小円の半径、回転角度の内、
大円の半径、小円の半径はスクロールバーで指定。
回転角度はマウスポインタの位置と大円の中心との位置関係で計算。
とすれば、できますから・・・

#掲示されている式は、やはり私の式とちょっと違いますね・・・
    • good
    • 0
この回答へのお礼

なるほど、プログラムとはそういうものだったんですね。
大変ためになりました。
いろいろありがとうございました。

お礼日時:2007/06/14 21:47

> そして江戸時代の日本人はハイポサイクロイドのパラメータ表示を知


らなかったとします。

前にも書きましたが、
> 知っている、知らないは関係なく、結果として「ハイポサイクロイドの式」になる
のでは?

#ちなみに私は「ハイポサイクロイドの式」は知りません。
#先ほど「考え方」で作った式が「ハイポサイクロイドの式」と同じかどうかも確認していません。
#「円を転がすという動作をシミュレートするには、どういう式が必要か?」を考えてみただけです。

> そしてVBはあったと仮定します。

これも前に書きましたが、VBにできるのは、
> 「数学的に座標を計算して、その座標点に点を打つ」
だけです。
#点だけじゃなく、線や、円も描けますが、いずれにせよ描くだけです。
#描いた図形同士の関連性はありません。

プログラマ(つまり貴方が)数学的な計算を行って、
どこに点を打てばよいか(どこに点が打たれるはずか)を決めない限り、
VBは何もできません。
VBでできるのは、「現実を模式的(数学的)に表す」事だけですので。

要するにVB(の図形処理)でできるのは、
「(パソコン無しで)紙と鉛筆と消しゴム、おまけで、定規とコンパスと分度器と、電卓でできること」ぐらいです。(鋏で紙を切り抜いたりもできない前提で)



> そういうプログラムが作りたいのです。

「作る人(プログラマ)」としての立場と「使う人」としての立場は別だと考えたほうが良いですよ・・・

「使う人」にとって、
> そこで先生が「じゃあVBで実際やってみよう」と言って円を転がすわけです。

こういう風に見えているからといって、プログラムが「実際に円を転がしている」様に作られているわけじゃないですよ。
プログラムは、「円を転がしているのと同じ見栄えをする式を計算している」のが普通だと思います。

#まあ、もちろん、「実際に円を転がしている」ようなライブラリがどこかにあるかもしれません。(VBに付属はしていませんね)
#でも、それだって、そのライブラリの作者が数学的な計算式を書いているだけでしょうから・・・

・・・ひょっとして
> 「先生、円の中で円を転がしたらどういう軌跡になるんですか?」
の他に、
> 「先生、円の外で円を転がしたらどういう軌跡になるんですか?」
とか、そういうマクロな設定をパラメータ化したいんでしょうか・・・

だとすると・・・図形間の相互関係処理用のライブラリを自作するとかしないと・・・
うーん。年単位で頑張れば何とかなるかな・・・
    • good
    • 0
この回答へのお礼

詳しい解説ありがとうございます。
僕はまだVBというかプログラミング自体、始めたばかりです。
ところで
http://www.nakamura-sanyo.ed.jp/sanyo/yanase/mat …
このようなものを作りたかったのですが、
これは
「小円が動くことにより小円上の固定点が軌跡を作る」
のではなく
「小円上の固定点は実は固定点ではなくハイポサイクロイドのパラメータ表示で動かす。
そして小円は小円で別の命令で動かす」
ということになるのでしょうか?

お礼日時:2007/06/14 06:31

> 円をころがしたら面白い図形ができた的なプログラム



「的」??意味が分かりません・・・
パラメータを色々指定できる様にするとか???

#所詮「絵を描くだけ」(紙にコンパスで円を描くのと同じ)で、
#実体が作られるわけじゃないですから、
#「接している」とか「転がっている」とかは数学的に表すしかありませんので。

ちなみにご自分でも言っておられますが、提示された条件で円を転がしたら、
必ず「ハイポサイクロイド」になると思いますが・・・

つまり貴方の希望をかなえる方法は、貴方が否定した、
「ハイポサイクロイドのパラメータ表示」では?
    • good
    • 0
この回答へのお礼

例えば、江戸時代の塾で
「先生、円の中で円を転がしたらどういう軌跡になるんですか?」
とか質問がでたとします。
そして江戸時代の日本人はハイポサイクロイドのパラメータ表示を知らなかったとします。
そしてVBはあったと仮定します。
そこで先生が「じゃあVBで実際やってみよう」と言って円を転がすわけです。
そういうプログラムが作りたいのです。
なぜかといいますと、ハイポサイクロイドのパラメーター表示を使ってしまったら
Psetで書けますので、わざわざ円を転がすアニメーションを作る必要がなくなってしまうからです。
円を転がすアニメーションを作ってみたらこういう図形になったというようなプログラムが作りたいのです。

お礼日時:2007/06/13 19:06

> 小さい円に固定点を打つ方法はどうしたらいいのでしょうか?



「数学的に座標を計算して、その座標点に点を打つ」しかないですね。

> ハイポサイクロイドのパラメータ表示があるのは知っているのですが
> それは知らないものとして、

知っている、知らないは関係なく、結果として「ハイポサイクロイドの式」なるのでは?

考え方:
大きい円(大円)の半径R1、中心(0,0)、小さい円(小円)の半径R2
角度0で大円と小円が接しているとし、その点を「固定点」とする。

そうすると、角度A(ラジアン単位)の分だけ転がしたとき、
大円に注目すると、
接点は(R1*Cos(A),R1*Sin(A))になり、
小円の中心は((R1-R2)*Cos(A),(R1-R2)*Sin(A))になる。
また、円周上を転がった距離はR1*Aになる。

逆に、小円に注目すると、
小円の転がった角度-B(逆回転になるので)とすると、その転がった距離R2*Bは、大円上の転がった距離に等しいはずなので、
B=(R1/R2)*A
そうすると、固定点の座標は
((R1-R2)*Cos(A)+R2*Cos(-B),(R1-R2)*Sin(A)+R2*Sin(-B))
なので・・・
    • good
    • 0
この回答へのお礼

くわしい解説ありがとうございます。
その方法ですと確かに
Pset((R1-R2)*Cos(A)+R2*Cos(-B),(R1-R2)*Sin(A)+R2*Sin(-B))
のような方法で軌跡を作れるのですが、
そうではなくて、円をころがしたら面白い図形ができた的なプログラムを作りたいのですが、どうしたらいいのでしょうか

お礼日時:2007/06/12 22:59

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!