- ベストアンサー
複素数を使った四角形の面積計算
四角形ABCDの面積を計算する方法として複素数を使用するやり方があるみたいなのですが、その式についての質問です。 例えば各点の座標を点A(10.00,10.00) 点B(20.00,15.00) 点C(18.00,20.00) 点D(12.00,25.00)としこの四角形の面積を計算したいのですが、複素数を使用して下記のような算出方法がありました。 (C-A)×conjg(B-D)→160.0000i(虚部が四角形ABCDの倍面積) 対角線の座標値を引き算し、片方に共役複素数を作用させて掛け算をすると倍面積が求められるようです。 しかしどうして倍面積の数値として虚部に出てくるのかわかりません。 よろしく御教授ください。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
まず,三角形 ABC の面積について. (Im) Y ↑ │ C │ / │ /θ │ A───B │ └──────→X (Re) AB が X 軸となす角をθ1,AC が X 軸となす角をθ2 とすると, オイラーの公式を使って次のように書ける. B - A = |AB| * e^(i * θ1), C - A = |AC| * e^(i * θ2). すると,conjg(B - A) = |AB| * e^(-i * θ1) だから, (C - A) * conjg(B - A) = |AB| * |AC| * e^(i * (θ2 - θ1)) = |AB| * |AC| * e^(i * θ) = |AB| * |AC| * (cosθ + i * sinθ). この虚数部の絶対値は,AB,AC を二辺とする平行四辺形の面積 (△ABC の面積の倍) になる. 絶対値がつくと,後の計算が厄介になるので,sinθ>0 となるようにしておく. つまりベクトル A→B から A→C への回転方向 (A → B → C の回転方向) が 左回りになるように,必要ならば事前に B と C を入れ替えておけばよい. 次に,四角形 ABCD の面積を求める. > 点A(10.00,10.00) 点B(20.00,15.00) 点C(18.00,20.00) 点D(12.00,25.00) これらの座標だと,A → B → C → D は左回り. 四角形 ABCD を △ABC (左回り) と △CDA (左回り) に分けて考える. △ABC については,上の計算がそのまま使えるので, Z1 ≡ (C - A) * conjg(B - A) の虚数部の半分が面積になる. △CDA についても同様に,Z2 ≡ (A - C) * conjg(D - C). Z3 ≡ Z1 + Z2 = (C - A) * conjg(B - A) + (A - C) * conjg(D - C) = (C - A) * conjg((C - A) + (B - D)) = (C - A) * conjg(C - A) + (C - A) * conjg(B - D) = |C - A|^2 + (C - A) * conjg(B - D). この第1項は実数なので, Im(Z3) = Im((C - A) * conjg(B - D)). これが四角形 ABCD の2倍となる.
その他の回答 (3)
- noocyte
- ベストアンサー率58% (171/291)
#3 です.すいません,眠いので間違えました.(^^;) > いえ,そうなるのは虚数部だけです. > 最後の式の両辺に Im() があるのに注意してください. これは間違いです.m(_ _)m > Im(Z3) = Im((C - A) + conjg(B - D)). これは次式が正解. Im(Z3) = Im((C - A) * conjg(B - D)).
- noocyte
- ベストアンサー率58% (171/291)
> またZ3 ≡ Z1 + Z2以下の計算式がよくわかりません。 > = (C - A) * conjg(B - A) + (A - C) * conjg(D - C) > から= (C - A) * conjg((C - A) + (B - D))になるのでしょうか? > すいませんがよろしくお願い致します。 いえ,そうなるのは虚数部だけです. 最後の式の両辺に Im() があるのに注意してください. Z3 ≡ Z1 + Z2 = (C - A) * conjg(B - A) + (A - C) * conjg(D - C) = (C - A) * conjg(B - A) - (C - A) * conjg(D - C) = (C - A) * { conjg(B - A) - conjg(D - C) } = (C - A) * { conjg(B - A) + conjg(C - D) } = (C - A) * conjg(B - A + C - D) = (C - A) * conjg((C - A) + (B - D)) = (C - A) * { conjg(C - A) + conjg(B - D) } = (C - A) * conjg(C - A) + (C - A) * conjg(B - D) = |C - A|^2 + (C - A) * conjg(B - D). |C - A|^2 は実数なので,両辺の虚数部を取れば |C - A|^2 はなくなり, Im(Z3) = Im((C - A) + conjg(B - D)). > オイラーの公式がわかりやすく解説しているサイトないですか? 図入りで解説しているサイトがいいかなと思って探したのですが, すぐには見つからなかったので,とりあえず↓こんなもんでどうでしょう? オイラーの公式 (Wikipedia) http://ja.wikipedia.org/wiki/%E3%82%AA%E3%82%A4%E3%83%A9%E3%83%BC%E3%81%AE%E7%AD%89%E5%BC%8F 極形式とド・モアブルの定理 http://aozoragakuen.sakura.ne.jp/taiwa2/euler-f/node2.html なんでオイラーの公式なのか? http://csx.jp/~imakov/euler/index.html オイラーの公式 (物理のかぎしっぽ) http://www12.plala.or.jp/ksp/mathInPhys/euler/
お礼
詳しくありがとうございます。 なるほど。 なかなか奥深いですねえ。 教えて頂いたサイトを見て勉強してみます。 わからないところがでてきたらまたよろしくお願い致します。
- rom_exe
- ベストアンサー率44% (13/29)
こんばんは ^^ 面白いですねー,初めて知りました・・・ 回答ではないですが,これをちょっといじると行けそうですね ^^ http://aozoragakuen.sakura.ne.jp/mondai/node19.html
補足
ありがとうございます。 三角形の面積はちょっと前にわかるようになりました。 今考えていたのですが(視覚的にですが)、 各頂点で対角線に平行な線を引いてみました。 頂点を平行線上に動かしても面積は変わらないんで、動かすと三角形になりました。 そのうちに2辺は対角線と同じなのでこのあたりのことを使ってやってるように思えるのですが・・・ 直感的なものですいません。
補足
ありがとうございます。 すいません。 オイラーの公式って知らないんです。(10年くらい前に文系数学しかやってなくって) 指数関数と関係が深いくらいとしかわかってません。すいません。 オイラーの公式がわかりやすく解説しているサイトないですか? またZ3 ≡ Z1 + Z2以下の計算式がよくわかりません。 = (C - A) * conjg(B - A) + (A - C) * conjg(D - C) から= (C - A) * conjg((C - A) + (B - D))になるのでしょうか? すいませんがよろしくお願い致します。