三角関数で図形をまるく配置してみよう
円形に図形を配置することを考えてみよう。キャンプファイヤーを囲む人、ヒマワリの花びら、ホールケーキの苺…。ほかにもいろいろありそうです。
円形に図形を並べるのって、どうしたらいいんでしょう?
とりあえず、原点(0,0)を通る半径1の円を考えましょうか。x軸との交点は、(1,0)と(-1,0)ですね。同じように、y軸との交点は(0,1)と(0,-1)であることがわかります。
そのほかの点は…、ちょっと計算では難しそうですね。
中心角を決めた時に、x座標とy座標がわかればよさそうなのですが…。
昔の人は、ちゃんと答えを用意してくれています。それが、「三角関数」です。
中心角をθとしたときのx座標をcosθと表します。同じく中心角θのy座標はsinθです。
むずかしいですか?今は理解できなくても大丈夫。こんなふうに書くって、昔の人が決めたんだ、て思っておきましょう。
ところで、上の図、数学では一般的な表現なのですが、、縦のy軸は原点O(オー)を0として、上に行くほど大きくなります。エクセルでは、左上が0で下に行くほど大きくなるので、注意が必要です。
とりあえず3点ほど書いてみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
Sub 円形に配置() Dim pi As Double pi = 3.14159 Dim Ox As Double Dim Oy As Double Dim r As Double Dim x As Double Dim y As Double Dim th As Double Dim t As Long Ox = 200 Oy = 200 r = 100 For t = 0 To 2 th = (t * 30) * pi / 180 x = Ox + Cos(th) * r y = Oy + Sin(th) * r Shapes.AddShape msoShapeRectangle, x, y, 10, 10 Next t End Sub |
わぉ!一気に複雑になってきました。でも、ゆっくり読み解けば大丈夫です!
ほらね。y座標がさっきの説明図と違って、下へ伸びてますね。y座標が下が大なので、こうなっちゃうんです。が、今回は、特に問題ないのでよしとします。
さて、プログラムの説明です。
1 2 |
Dim pi As Double pi = 3.14159 |
とりあえず、円周率を定義しておきましょう。ギリシャ文字πを使いたいところですが、ちょっといろいろ面倒なので、アルファベットでpiとしておきます。double
というのは小数型の変数の宣言です。
1 |
Dim Ox As Double<br>Dim Oy As Double<br>Dim r As Double |
エクセルでは画面左上角が原点(0,0)になります。三角関数では、円の中心が原点になるので、円全体を表示するためには、円の中心を少し右下にずらしたいですよね。
なので、右にOx、下にOyだけ円の中心をずらします。
円の半径はrです。
プログラミングでは、角度はラジアンを使います。
度からラジアンに変換する公式は、
です。
1 2 3 4 5 6 |
For t = 0 To 2 th = (t * 30) * pi / 180 x = Ox + Cos(th) * r y = Oy + Sin(th) * r Shapes.AddShape msoShapeRectangle, x, y, 10, 10 Next t |
では、tが1増えるごとに、thが30度ずつふえてますね。これもほんとはθと書きたいんですが、thとアルファベットで書いています。
それぞれのθにおけるx座標とy座標を計算して、幅10,高さ10の長方形を描いてます。
なんとなくわかりますか?
最後に、For t = 0 To 2
のところをFor t = 0 To 11
にかえて、全部の点を描いてみましょう。
きれいに12個の四角形が円形に配置されました。