- ベストアンサー
円の中を通る点の軌跡を、パソコンで表現する方法は?
- みんなの回答 (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)
- 178-tall
- ベストアンサー率43% (762/1732)
>…どの様にすれば、図形が描けるか… EXCEL 使用の場合なら…。 (1) [r, θ] 表 - 算式を作成。 r = √{α^2(cosθo -φ)^2 + d^2 } θ= arccos{α(cosθo -φ)/r } ± φ :φ∈ [0, 2*cosθo ] … この区間を所望ステップで分割指定 θo = arcsin(d/α) d = |α-β| > 0 ± 上半 / 下半分 (2) [r, θ] 表 → [x, y] 表へ変換。 [x, y] = [r*cosθ, r*sinθ] (3) [x, y] 表を「散布図」グラフに描かせる。 (円板は、[α, θ] 表 (θは 0 から 2π まで所望ステップで分割指定) → [x, y] 表へ変換) → 「散布図」グラフに描かせておく) …てな調子です。
お礼
178-tallさん、どうもありがとうございました! とてもご丁寧に教えて頂きありがとうございました! 式も分からない、その式の使い方も分からない状態の私に親切にお付き合い頂き、 感謝の気持ちでいっぱいです。 エクセルは使えるようになりたいので、 今回はVBを使用しましたが、教えて頂いた通りにチャレンジしてみます。 お世話になりました。 ありがとうございました!
- 178-tall
- ベストアンサー率43% (762/1732)
>ANo.30 まとめ損ねの訂正です。 r = √{α^2(cosθo -φ)^2 + d^2 } θ= arccos{α(cosθo -φ)/r } ± φ :φ∈ [0, 2*cos(θo) ] θo = arcsin(d/α) d = |α-β| > 0 ± 上半 / 下半分
- 178-tall
- ベストアンサー率43% (762/1732)
>ANo.28 算式まとめ。 「逆三角関数」は EXCEL にて通用する (象限を識別できる) =ACOS( ) を使用。 r = √{α^2(cosθo -φ)^2 + d^2 } θ= arccos{α(cosθo -φ)/r } ± φ :φ∈ [0, 2*cos(θo) ] θo = arcsin(d/α) d = α-β > 0 ± 上半 / 下半分
- 178-tall
- ベストアンサー率43% (762/1732)
>実は、私の欲しいαとβは 0<β<α なのです。 実は、α < β < 2α で手こずってました。 一段楽したので、0 < β<α 用の [r, θ] 表 - 算式を試作してみましょう。 「逆三角関数」は EXCEL にて通用する (象限を正しく認識してくれる) =ACOS( ) を使用。 r = √{α^2(cosθo -φ)^2 + d^2 } θ= φ- arccos{α(cosθo -φ)/r } : φ∈ [0, 2*cos(θo) ], θo = arcsin(d/α), d = α-β > 0 α < β < 2α では「間延びしたカーヴ」でしたが、0 < β<α だと「押しちぢめたカーヴ」ですネ。 ペン先に対する円板の回転方向がたがいに真逆だから、なのでしょう…。
- 178-tall
- ベストアンサー率43% (762/1732)
度重なる訂正で、蒙御免。 >[r, θ] 表 > r = √{ {α(cos(θo) -φ}^2 + p^2 } > θ = ρ + φ > : ρ = arcsin(p/r), p = |α-β| ↓ θ の訂正 [r, θ] 表 r = √{ {α(cos(θo) - φ}^2 + p^2 } θ = θo + φ : φ∈ [0, 2*cos(θo) ], θo = arcsin(p/α), p = |α-β| EXCEL シートにθ-列を乱立させており、錯誤の引用をしてました。 もっともらしいプロットのθが、このθ。 >「八の字ひげ」状のカーヴになりました。
お礼
178-tallさん、どうもありがとうございます! 八の字ひげ状のカーブだと、違うと思うのです。 私の欲しいカーブは質問欄に追加した、手書きの図のようなイメージのものです。 円とβが触れる始点と終点の先をそれぞれ伸ばすと八の字ひげ状になるのかなー?とも思うのですが。私には定かではないです。。 教えて頂いたものを、さっと確かめることが出来たらいいのですが、 出来ていません。 色々やってみているのですが。。 どの様にすれば、図形が描けるか、 具体的に教えて頂けますでしょうか。 よろしくお願い致します。
- 178-tall
- ベストアンサー率43% (762/1732)
>ANo.25 >更なる錯誤あり。 >[r, θ] 表 > r = √{ {α(cos(θo) -φ}^2 + p^2 } > θ = ρ + φ > : ρ = arcsin(p/r), p = |α-β| 算式の最終版らしいが、EXCEL では cos(θo) -φ が負になる領域にて通用しない。 負領域にて、ρ = (π/2) + arccos(p/r) と切り替えれば凌げる…。
- 178-tall
- ベストアンサー率43% (762/1732)
>ANo.23 >(算式には、まだ錯誤があるかも知れません。略図を描き追跡しながら吟味してみて…) 更なる錯誤あり。 >α < β <2α の場合。 >初期タッチしたあとの円板の回転角をφとして、下式により [r, θ] 表を作成しておく。 > r = √{ {α(cos(θo) -φ}^2 + p^2 } > θ = θo + φ ↑ θ = θo + φ はカウント不足でした。 更に r の角振れを加算せねばならない。 [r, θ] 表 r = √{ {α(cos(θo) -φ}^2 + p^2 } θ = ρ + φ : ρ = arcsin(p/r), p = |α-β| ……
- nag0720
- ベストアンサー率58% (1093/1860)
>βの動きが違う気がします。 >円が回転して、円の軌跡がいくつもできたとしても、 >βは定点で、動いてはいけないので、1本になると思うのです。 βの位置は、図の中央部分の曲線が密集している1点で、動いてはいません。 質問欄の1~6の図を1つに重ね合わせれば、No.22と同じような図になってますね。
お礼
nag0720さん、ありがとうございます。 失礼致しました。 No22の下側の図で正解だと思います! >βは定点で、動いてはいけないので、1本になると思うのです。 よくよく考えると、そんなはずないです。大変失礼いたしました。 図を見ると、円の移動距離に応じた長さの、βとの接触軌跡が描かれていますので、 私の描きたいものは、この図です。 ですが、この図を私が描ければ良いのですが、 どうにも、描けれません。 VBをダウンロードしてみましたが、使い方が分かりませんでした。 使い方を載せているサイトをいくつか見たのですが、 プログラム言語を見るのが初めてで、わかりません。 もしよろしければ、具体的に教えていただけませんでしょうか。 よろしくお願い致します。
- 178-tall
- ベストアンサー率43% (762/1732)
>回答No.19 >(算式には、まだ錯誤があるかも知れません。略図を描き追跡しながら吟味してみて…) 案の定、錯誤あり。 円板上の座標 [r, θ] のθと、「初期タッチから円板がθだけ回転」のθとは区別せねばなりませんネ。 α < β <2α の場合。 初期タッチしたあとの円板の回転角をφとして、下式により [r, θ] 表を作成しておく。 r = √{ {α(cos(θo) -φ}^2 + p^2 } θ = θo + φ : θo = arccos(p/α), p = |α-β| EXCEL で強引に作図させてみると? [0] まず 半径αの円。[α, θ] 表を [x, y] に変換して「散布図」表示。 [1] α < β <2α の場合、[r, θ] 表を [x, y] に変換して「散布図」表示。 [2] 0 < β < α の場合、[1] から [x, -y] にして「散布図」表示。 「八の字ひげ」状のカーヴになりました。 それにしても EXCEL って商売勘定専用の道具だなア、とつくづく実感…。
- nag0720
- ベストアンサー率58% (1093/1860)
こんな図でいいのかな。 VBで描いています。 計算式は、No.10の式を回転・平行移動したものです。
お礼
nag0720さんありがとうございます! 下側のα=100、β=80の図が私の欲しい図と似ていました。 βの動きが違う気がします。 円が回転して、円の軌跡がいくつもできたとしても、 βは定点で、動いてはいけないので、1本になると思うのです。 私の欲しい図のイメージを6コマにわけて、ペイントで作りました。軌跡は手書きです。 実際に円板を転がして、その先にペン先を固定させておいて軌跡を描くと、このようになりました。 このイメージのものを、手書きではなく作りたいです。 よろしくお願い致します。
お礼
nag0720さん、どうもありがとうございました! 連絡が遅くなりまして、失礼致しました。 VBを使い、教えて頂いたコードをコピペして 全くの素人な私でも簡単に、欲しいものが作れました。 本当に助かりました。ありがとうございます。 ベストアンサーに選ばさせて頂きます。 でもこの感謝の気持ちはそれでは足りない程です。 今、線を足したり、数値を表示させたり、色々自分で脚色することに格闘しております。 相談中にも申しましたが、私は数学やプログラム等と無縁な生活をしております。エクセルすら未経験で、プログラムも未経験です。 数学は学生以来で、行列って懐かしいなー。こんな公式あったなー。というレベルでして。 今回どうしても、この一枚の書類が必要に迫られ、途方に暮れていました。 最悪の場合、手描きでと考えていましたが、 手描きのものでは、信憑性がなかったので。 nag0720さんをはじめ、皆さんのおかげです。 ありがとうございました!