ブログ「サイバー少年」

ブログ「サイバー少年」へようこそ!
小学六年生ごろからプログラミングを趣味にしている高校生のブログです。
勉強したことについての記事などを書いています。フリーソフトも制作、公開しています。
(当ブログについて詳しくは「ブログ概要紹介」を参照)

サイバー少年が作ったフリーソフトは「サイバー少年の作品展示場」へ

直交座標と極座標を変換!

前回に引き続き、今回も数学ネタでいきます。

最近、なんとなく数学にハマってまして…。

今回のテーマは直交座標と極座標の変換についてです。


直交座標は垂直に交差する線を作り、X軸、Y軸として、「Xにいくつ、Yにいくつ」と指定して座標を決定する座標系です。

直交座標はおなじみですね。


対して極座標とは、原点と、原点を通る始線という線を作り、「原点からr離れていて、始線からθの角度」と指定して座標を決定する座標系です。


それでは、いきなりですが、こちらの、なんかありがちな図をご覧ください。

今回、角度の単位はラジアンでやっていきますのでご注意ください。

ラジアンの説明はしません…。

(まぁ、ラジアンが分かる人にとってこの記事自体必要ないかも知れないですが…。)



なんかありがちな図
なんかありがちな図


こんなにシンプルではないかも知れませんが、なんか高校数学でありがちな図です。


話題が移る前に、訂正があります。

三角形の直角のところに「π rad」とありますが、正しくは「π/2 rad」です。

画像を直すのは面倒なので…。

「π/2 rad」というのは、直角「90°」と同じ角度です。


あと、図中に描くのを忘れましたが、図の直角三角形の斜辺はrです。

rは周りの半径と同じです。


さて、この図の円の半径、つまりr1 と設定してみましょう。

ちなみに、半径が1の円を単位円と言うらしいです。


半径が1なら直径は2ですね。

う~ん、なんだか目盛りを付けたくなってきました。

目盛りを付けた図がこちらです。
目盛り付きの図
目盛り付きの図


0~2でいいだろ!なんで-1 ~ 1なんだよ!

と思った方はいらっしゃいませんか?
…いませんか。そうですか。

もう直に出てくる三角関数の都合に合わせているのです。


さて、目盛りを付けたところで、円の中の三角形の、円周と隣接している点を点Pとしてみます。

点Pはすでに図中に書き込んでいます。


点Pは円の中心からr離れていて、横の線から角度が…

って、あれれれれ!

実は、いままでずっと極座標について話していたのです。


図中の三角形の、中心よりの角の角度をθとします。

θがそのまま極座標のθとなります。
(角度が反時計回り、東基準の場合に限り)



θを書いてみる
θを書いてみる


θとrさえあればPの座標が決まるというのは、この図から見て分りますね。


さて、では本題の直交座標への変換ですが、

「sin θ」と「cos θ」というのが図中に書いてあると思います。

sin θというのはsinという関数にθを与えたときの値です。

cos θというのはcosという関数にθを与えたときの値です。


の二つの関数はなんなのかというと、直角以外の部分の角を1つ与えると、直角三角形の各辺の比を出してくれて、

ただし与えた角が π/2 以上だったら、さらにもうひとつ直角がある三角形は、ありえないので、
負数など意味不明な比を出して困らせるという正義感に満ちた関数です。


まぁ、詳しい説明はしません。

そもそも、私自身が詳しい説明ができるような学習レベルに到達していませんし…。

それで、この二つの関数がどうかしたのかというと、要するにr = 1と限定した場合は、
cos θが三角形の下辺の長さで、sin θが右の辺の長さを表わしているわけです。



もう一度ご登場
もう一度ご登場


下辺と右の辺の長さ出ると何がいいかというのは、みなさん勘付きますでしょうか。


先ほど書いた目盛りを見てください。

たとえば円の中心点は、目盛りをみたら横の目盛りが0、縦も0となっています。

点Pは、中心点から横方向にcos θ、縦方向にsin θ動いているわけです。


さて、中心点の目盛り上の位置を(0, 0)、点Pの目盛り上の位置を(cos θ, sin θ)とします。

…そう、この目盛りは直交座標になっていたのです!

実は自然と極座標から直交座標への変換をこなしていました!


ではまとめます。

説明不足な点も多いですが…。


極座標のr, θから、直交座標のx, yを求める式

x = cos θ
y = sin θ



上の式で…、ちょっとまってください。
実はこの式は間違いです。


今までの例では意図的にrを1に限定していましたが、実際はrは色んな値を取り得ます。

しかし、これを解決するのは難しそうに見えて、めちゃめちゃ簡単です。

三角形の斜辺の長さのrが2倍になっても、
θが同じ角度ならば、各辺の比は同じであるわけで、すべての辺が2倍になるわけです。

rが何倍になっても同じで、要するに二つの辺もr倍してやればいいのです。


極座標のθ, rから、直交座標のx, yを求める式

x = r cos θ
y = r sin θ



これでOKです。

極座標から直交座標に変換できます!



さて、逆に直交座標から極座標に変換する方法ですが、上の式を変形するだけです。


直交座標のx, yから、極座標のr, θを求める


両辺をrで割る
x/r = cos θ
y/r = sin θ

両辺を関数で囲む
cos-1 cos θ = cos-1 x/r
sin-1 sin θ = sin-1 y/r

θ = cos-1 x/r
θ = sin-1 y/r


sin-1とかについて何も言っていなかった…。

sinsin-1coscos-1は、加算と減算、乗算と除算のように対となる関係にあります。

さて、「θ = 」となっている式が2つありますが、どちらかを計算すれば、
これでθが求まります…って、オイ!


x/ry/rrが与えられていないので分からないのです。

が分からないとθが分からないのですが、両方とも分からないとなると、どうしようもありません。


しかし、実はどうしようもあるのです!


x
yからrを導くことができます。

「三平方の定理」を使います。

r = √(x2 + y2)

これでrが分かりますね。
三平方の定理があってよかった。

さて、この式を上の式に代入して、


直交座標のx, yから、極座標のr, θを求める式

r = √(x2 + y2)
θ = cos-1 x/√(x2 + y2)
θ = sin-1 y/√(x2 + y2)


となるわけです。

これで、直交座標から極座標への変換も出来ました!




説明が足りない部分はたくさんあると思います。


そして、「ラジアンを知っている人にこんな解説は必要ない」、という現実も分かっているんだ…。


間違っている箇所があれば遠慮なくご指摘ください。


いや~、今回は前回と比べて長文になりましたね…。

tag:

コメント

三角関数まできちゃうと、流石に
コメント書く人もへりますね。

図ですが、単位円なら
線が接していないと違和感を覚えます。

あとは、これをプログラムにすると
どうなるか。。。グラフィックで描画すると~
とか、考えると膨らみますね。
アセンブラで円をかいてみたり。
円描画の命令ではなくて、ドットでかいてみたりとか。。。

  • 2013/10/10(木) 01:31:37 |
  • URL |
  • 通りすがり #-
  • [ 編集 ]

まあ前回のコメントが色々と続いたのは、
n次方程式にはn個の~とかいう話を僕がしたからですしね。
記事のテーマによらず、誰かがネタを投下すれば
続くし、そうでなければ続かないというだけでしょう。
少なくとも
"三角関数まできちゃうと、流石に
コメント書く人もへりますね。 "
というのはおかしい気が。

  • 2013/10/10(木) 08:05:15 |
  • URL |
  • div9851 #-
  • [ 編集 ]

div9851さん
確かにその通りですね。
謝罪いたします。

  • 2013/10/10(木) 09:43:35 |
  • URL |
  • 通りすがり #-
  • [ 編集 ]

いや、ちょっと違和感があって意見しただけなので大丈夫です。

それとサイバー少年さん、関係のないコメントで汚してしまい申し訳ないです。

  • 2013/10/10(木) 13:01:32 |
  • URL |
  • div9851 #-
  • [ 編集 ]

Re: 通りすがり

三角関数は高校でやるので、
少なくともこのブログの読者の方々なら分かると思うんですけどね…。

単位円についてはありがとうございます。
線が接すると見づらくなるので余白を設けたのですが、
1, 0, -1の場所がアバウトになっちゃいましたね。

プログラムと言えば、少し昔の私はアナログ時計デザインの時計プログラムがどうなっているのか
全く分からなくて、どうやって時計の針の先端の点が円の起動を描いているのか不思議でした。

しかし、極座標変換を知ったときにピンときました。
「アナログ時計のプログラムは極座標変換を使っているんだ!」と。
いや~、こういうのが出来る高校数学ってめっちゃ便利ですよね。

最後にこの場を借りて。div9851さんがしたコメントは通りすがりさんへのコメントっぽいので、返信しないでおきます。

いつものようにコメントが高度になってますね…かなしいかな私はプログラム側の人間ではないので、ちょっと理系っぽい尺度から(その中でも古典力学側ですが…)

極座標は複素解析や解析力学で鬼のような性能を発揮するので非常に大切ですね

複素解析ではオイラーの公式の理解に極形式が必要になるでしょう

解析力学ではいわゆる二重振り子(時計の針の先でさらに時計の針が回転しているときの先端など)の複雑な座標を得たいときはデカルト座標(直行系座標)ではかなりしんどいので極座標(この場合は一般化座標と呼ぶべきかも)が好まれますね

  • 2013/10/10(木) 22:38:35 |
  • URL |
  • かぼちゃ #S4pvVTuM
  • [ 編集 ]

Re: かぼちゃ

何を言っているのか全く分かりません…(笑)
まぁ、極座標は物理学、力学においても重要な位置を占めるということでしょうか。

にしても、物理学って、とにかく三角関数と微積分が登場するイメージですね…。

なるほど、アナログ時計が発端だったんですね。
昔、似たようなプログラムをした時に、
針の管理がうまく出来なかった事を思い出します。
消して書くだけなのに、うまく消えないとか。
重なった時に~とか、、なんか、苦労した思い出がふつふつと。。。
今はレイヤーもあるし、ラクチンになりましたね。

  • 2013/10/11(金) 02:32:57 |
  • URL |
  • 通りすがり #-
  • [ 編集 ]

Re: 通りすがり

私なら背景で全て塗りつぶして消したいところですが、
昔のマシンではそうもいかなかったんですかね…。

FlashやWPFの特徴を聞いていると、今の流行りは
ベクタ画像サポートまでいっているのかな、と思います。

あと、再描画なんて概念もブラックボックス化されて、なくなってますもんね。
object.Location.X = xx; みたいに場所をプロパティで設定できますから。

そうなんですよ。
描画範囲を全部クリアして、再描画が
一番楽ですね。
結論はそうなるんだけど、うまい人は、
うまくやってて、まあ、くやしい~って、なるんです。

javaスクリプトでさえ最近はできちゃうんです。
http://www.onside.com/web_design/2992.html
リンク先は、僕とは無関係なので、あしからず。
ググって出てきただけです。

技術の進歩ってすばらしいなあ。。。

  • 2013/10/13(日) 01:47:09 |
  • URL |
  • 通りすがり #EBUSheBA
  • [ 編集 ]

Re: 通りすがり

上手い人は再描画をすごい工夫してますよね~。
特にゲームプログラマーが上手いと思います。

最近はFlashよりもHTML5、CSS3、JavaScriptの組み合わせが主流みたいですね。
「HTMLとはこんなファイルフォーマットだったのか…」と、唖然とします。

このブログのデザインは汚いですからね…。
「汚い」って、デザインテンプレートを作った人に失礼かもしれませんが…。

5日間PCから逃げてました、そろそろいいかなと・・・復帰しました。

Plugin-Load Library の解説書が新しくできているようなので作業に移ります。

  • 2013/10/14(月) 20:43:49 |
  • URL |
  • funcHM #-
  • [ 編集 ]

Re: funcHM

早ぁ…、
いや、まあ良かったです。

これからもよろしくお願いします!

新ブログのURLが書いてあったので、近いうちにリンク一覧にも載せておきますね。

コメントの投稿

トラックバック

トラックバック URL
http://cyberboy6.blog.fc2.com/tb.php/302-f9b5d30e
この記事にトラックバックする(FC2ブログユーザー)

当ブログをご利用(閲覧等)になる場合は必ず「当ブログの利用規定」をお守りください。