- ベストアンサー
円の中を通る点の軌跡を、パソコンで表現する方法は?
- みんなの回答 (32)
- 専門家の回答
質問者が選んだベストアンサー
VB.NETのプログラムコードを載せておきます。 フォームにButtonとPicureBoxを配置して、 Buttonのクリックイベントに下記のコードを記述してください。 PicureBoxのサイズは500×220にしてください。 VB.NETは、無料のVisula Studio Express 2013 for Desktop をダウンロードしてインストールすれば使えます。 VB.NETの使い方は、ここで簡単に説明することはできないので、入門用のサイトでも見て学習してください。 http://homepage1.nifty.com/rucio/VBNyumon/Index_beg.htm Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click Dim i As Integer, n As Integer Dim a As Single, b As Single, c As Single Dim p As Single, q As Single Dim x1 As Single, y1 As Single Dim x2 As Single, y2 As Single Dim objPen = New Pen(Color.Black, 2) Dim objGrp As Graphics = PictureBox1.CreateGraphics a = 100 b = 80 c = Math.Sqrt((2 * a - b) * b) For n = 0 To 10 objGrp.Clear(PictureBox1.BackColor) objGrp.DrawLine(objPen, 0, 10 + 2 * a, PictureBox1.Width, 10 + a * 2) objGrp.DrawEllipse(objPen, 10 + c * n / 5, 10, 2 * a, 2 * a) objGrp.FillEllipse(Brushes.Black, 7 + a + c, 7 + 2 * a - b, 6, 6) p = c / a * (n - 5) / 5 For i = 0 To n * 10 q = c / a * (50 - i) / 50 x1 = (b - a) * Math.Sin(p + q) + a * q * Math.Cos(p + q) + c * n / 5 y1 = (b - a) * Math.Cos(p + q) - a * q * Math.Sin(p + q) If i > 0 Then objGrp.DrawLine(objPen, 10 + a + x1, 10 + a - y1, 10 + a + x2, 10 + a - y2) x2 = x1 y2 = y1 Next Threading.Thread.Sleep(100) Next objPen.Dispose() objGrp.Dispose() End Sub
その他の回答 (31)
- nag0720
- ベストアンサー率58% (1093/1860)
失礼。 トコロイド曲線ではなく、トロコイド曲線でした。
- nag0720
- ベストアンサー率58% (1093/1860)
>円が回転移動している様子も描きたいのです。 それなら、 ((β-α)sinθ+αθcosθ, (β-α)cosθ-αθsinθ) の曲線をθだけ逆回転し、さらにαθだけ左に平行移動して本来の位置に戻してやればいいのでは。 No.3で説明されているようにβの位置にペンがあるとしたら、円内のペン跡の軌跡を知りたいのか、ペンでマークした個々の軌跡を知りたいのか? 前者なら上記の方法で求められますし、後者ならペンでマークした個々の軌跡はそれぞれ別々のトコロイド曲線になり1つの曲線にはなりません。
補足
nag0720さん、ありがとうございます。 毎度、説明不足ですみません。 欲しいのは、トロコイド曲線ではないです。 > No.3で説明されているようにβの位置にペンがあるとしたら、円内のペン跡の軌跡を知りたいのか これに加えて、円が回転移動している様子も欲しいのです。 「円がこの位置ならば点はここにある、そのコマ送りの連続によって、出来上がる図。」 と言えば伝わるでしょうか? 見れば一目瞭然に(No.3 178-tallさんの表現をおかりして) 「円板がまっすぐ転がっていき、点βの位置に固定されたペン先に触れながら通過していく。円板にはペン先の軌跡が残る」 ということが、分かる図。出来ればアニメーションも。 最終的に、上記のような物の完成を目指しています。 > ((β-α)sinθ+αθcosθ, (β-α)cosθ-αθsinθ) の曲線をθだけ逆回転し、さらにαθだけ左に平行移動して本来の位置に戻してやればいいのでは。 まことにすみません。恥ずかしながら、 私は数学からすっかり離れてかなりの期間があり、分からないです。
- nag0720
- ベストアンサー率58% (1093/1860)
No.5です。 軌跡の式の符号が間違ってました。 正しくは、 ((β-α)sinθ+αθcosθ, (β-α)cosθ-αθsinθ) 円の中の軌跡を求めるのだから、円を固定するのが自然です。 いわば、円の中に人が立って、βの動きを観察すると考えればいいでしょう。 添付図の左図を初期状態として、 点Pの座標は(0, -α) 点βの座標は(0, β-α) θ回転して右図になって、点Qと接しているとき、 点Qの座標は、(-αsinθ, -αcosθ) PQ=αθ だから、 点Pの座標は、(-αsinθ+αθcosθ, -αcosθ-αθsinθ) 点βの座標は、(-αsinθ+αθcosθ+βsinθ, -αcosθ-αθsinθ+βcosθ) 整理すると、 ((β-α)sinθ+αθcosθ, (β-α)cosθ-αθsinθ)
補足
ご丁寧な回答を頂き、ありがとうございます。 せっかくなのですが、私の最終的な目的とずれてきている気が致します。 円が回転しながら進むことによって、静止している点と接触。 円は止まらずに進み続け、その接触点の軌跡を描く。 円が回転移動している様子も描きたいのです。 よろしくお願い致します。
- ORUKA1951
- ベストアンサー率45% (5062/11036)
- shuu_01
- ベストアンサー率55% (759/1365)
> 円:x^2+y^2=α^2 > 直線:y=-α > 点β:(0, β-α) 発想、すばらしいと思います 地面の上をタイヤが転がるように進むとすると、 直線:y=-α と置くのはよいですが、 (スポーツジム の 地面が動くマシーンの上で ランニングしてるみたいなイメージです) すると、直線は実際、y=-α の上を動くので、 βも動きますよね
- shuu_01
- ベストアンサー率55% (759/1365)
まず、No.4 さんの図がとてもきれいで感動しました (*^o^*)/ でも、まだ完全には理解できず、追加質問させてください > 半径αの円は、直線の乗っている平面に対して、垂直な円です。 > 円はその直線上を回転しながら進むものとします。 > 高さβの点は、直線の乗っている平面に対して、垂直な位置、高さβの所にある動かない点です。 > 直線の真上に位置しているものとします。+側です。 > 半径αの円は、高さβの点と接触しながら進みます。 > その接触の軌跡を求めています。 まず、円は地面を転がるタイヤのように 直線とまったく滑らず、 回転するのですか? そして、高さ β の点と 円が接するというのは、辺縁だけでなく、 内部と接し、βの点には ペンとか鉛筆が付けられており、 タイヤに描く、線がどんな図形になるか、図示したい って理解でよいですか? 仮にそうだとして、僕はこの後、友達と飲み会で、夜中の0時過ぎ まで帰られず、問題を解くの明日以後です その前にだれか、解いちゃってそうです
補足
回答頂きありがとうございます! おっしゃる通りです。その理解で合っています。 返信が遅くなり、申し訳ないです。 飲み会楽しんできて下さいね!
- nag0720
- ベストアンサー率58% (1093/1860)
視点を変えて、 「円を固定して、その周りを直線と点βが回転しながら移動する」 と考えれば分かりやすいのでは。 円:x^2+y^2=α^2 直線:y=-α 点β:(0, β-α) として、直線と点βが円の周りを角度θだけ右回りで転すると、点βの軌跡は、 ((β-α)sinθ-αθcosθ, (β-α)cosθ+αθsinθ)
お礼
回答頂きありがとうございます! 式を答えて頂きどうもありがとうございます! 早速、試してみます! この式について質問なのですが、 >「円を固定して、その周りを直線と点βが回転しながら移動する」 この視点で作られた式は、式だけを見たとき、 「円が回転し、点と直線を固定する」という元の視点の意味も含まれるのでしょうか? 教えて頂けますでしょうか。 よろしくお願いします!
- ORUKA1951
- ベストアンサー率45% (5062/11036)
やっぱり分かりません。 βは動かないのですから、直線との距離が2a>β>0 なら、円はぶつかったら止まります。 たぶん、 >平面上の直線を回転しながら移動 とは、中心の座標のことじゃなくて、直線に接して移動している・・・ということだと思いますが、回転方向も書かれていません。円と滑りながら逆回転しながら移動しているかもしれません。 いずれにしても「動かない点」には軌跡はありません。
お礼
ORUKA1951さん、ありがとうございました。 無事に作成出来ました。
補足
図をつけての回答を頂き、どうもありがとうございます 至らぬ点だらけで、申し訳ないです。 >βは動かないのですから、直線との距離が2a>β>0 なら、円はぶつかったら止まります。 これで、止まらずに突き進んで欲しいのです。 上の方の図のように、円は直線に接して移動します。 回転方向は、前方に転がるイメージで、回転しながら進みます。 逆回転はしません。 回答3の方が書いて下さった再現状況通りです。 よろしくお願い致します。
- 178-tall
- ベストアンサー率43% (762/1732)
状況のリフレーズが難解? けっこうメンドイか。 平面上に直線 L あり。 半径αの円板が直線 L の上を平面に垂直なまま転がっていく (途中でコケない) 。 円板の転がっていく途上には、垂直面の高さβの点にペン先が固定されている。 転がってきた円板には、ペン先が触れたときの軌跡が残る。 と、こんな感じですかネ。 解き方は? 「状況再現」の当否次第…。
お礼
回答頂きありがとうございます。 正にその通りです! 分かりやすい状況再現をありがとうございます! 解き方をよろしくお願いします!
- ORUKA1951
- ベストアンサー率45% (5062/11036)
>直線から高さβの動かない点 [動かない]ですから、軌跡は点!!にしかなりませんよ。
補足
回答頂きありがとうございます。 説明不足で申し訳ないです。 点βは動きませんが、半径αの円が動きます。 この円は点βと接触しながら、回転移動します。 そのときに円の中に出来る軌跡が知りたいのです。 回答1へ補足させて頂いたので、そちらを参考にしていただければ幸いです。
お礼
nag0720さん、どうもありがとうございました! 連絡が遅くなりまして、失礼致しました。 VBを使い、教えて頂いたコードをコピペして 全くの素人な私でも簡単に、欲しいものが作れました。 本当に助かりました。ありがとうございます。 ベストアンサーに選ばさせて頂きます。 でもこの感謝の気持ちはそれでは足りない程です。 今、線を足したり、数値を表示させたり、色々自分で脚色することに格闘しております。 相談中にも申しましたが、私は数学やプログラム等と無縁な生活をしております。エクセルすら未経験で、プログラムも未経験です。 数学は学生以来で、行列って懐かしいなー。こんな公式あったなー。というレベルでして。 今回どうしても、この一枚の書類が必要に迫られ、途方に暮れていました。 最悪の場合、手描きでと考えていましたが、 手描きのものでは、信憑性がなかったので。 nag0720さんをはじめ、皆さんのおかげです。 ありがとうございました!