abc2015 summer lt
TRANSCRIPT
⾃⼰紹介• 某⼤学教員(情報系かつ数学系)
• 普段はプログラミングや数学教えてます。• Androidとの付き合いはGoogle Developer Day 2009でGDDPhoneを⼿に⼊れてから。
• ABC参加は, 2011Winterから。• 今回初LTで、ちょっと緊張気味
今⽇のお題地図アプリの領域の⾯積はどう計算しますか?• こういう感じなら, 三⾓形に分ければよい?
今⽇のお題地図アプリの領域の⾯積はどう計算しますか?• こういう感じなら, 三⾓形に分ければよい?
• でも、こうなると?⇒うまく三⾓形に分けるには計算⽅法が必要⇒三⾓形に分けなくても計算できます!
必要なのは, 三⾓形の⾯積ちょっとだけ数学のお話A(x1, y1), B(x2, y2), C(x3, y3) : 平⾯上の3点三⾓形の⾯積 S は,
もしくは, 三⾓形の3辺の⻑さが, a, b, cのとき
ただし, s = (a+b+c)/2 (ヘロンの公式)
java.awt.Polygon クラスは?
• 多⾓形を表すクラス• 頂点のx座標, y座標の配列, 頂点数で定義• 内外判定可能 containsメソッド• Rectangleオブジェクトとの交差判定メソッドなど
• ⾯積に関するメソッドなし⇒タップした緯度経度を座標値とすれば利⽤可能
https://docs.oracle.com/javase/jp/6/api/java/awt/Polygon.htmlより
Android SDKでは?• LatLngクラスで, 経度緯度が利⽤できる• Locationクラスに, メソッドdistanceBetween
(経度1, 緯度1, 経度2, 緯度2, 返値配列)あり⇒三⾓形の⾯積は, distanceBetweenとヘロンの公式で計算できる
⇒へこみがない(凸)多⾓形ならば, 三⾓形の⾯積の和を計算すればよい.
ただし, 多⾓形は, P=(P0, P1, … ,Pn-1)で表現
http://developer.android.com/reference/android/location/Location.htmlより
今⽇のお題
もう⼀度数学A(x1, y1), B(x2, y2), C(x3, y3) : 平⾯上の3点三⾓形の符号付き⾯積 S* を次で定義
∗
違いは絶対値がないこと
A(x1,y1)
+
B(x2,y2)C(x3,y3)
A(x1,y1)
B(x2,y2)C(x3,y3)
符号付き⾯積で• ⻘の三⾓形正の値• ⻩⾊の三⾓形負の値全て⾜すと領域の⾯積
もし, 負の値なら絶対値をとればよい
∗
もうちょっと問題が• 符号付き⾯積は, 頂点座標でのみ利⽤可能(緯度経度であればよい)
• 三⾓形の⾯積はヘロンの公式(+distanceBetween)で計算
⇒経度緯度からヘロンの公式で計算し、和を取るときに符号付き⾯積の符号だけ利⽤
計算幾何って?
• 多⾓形や線分などを計算機で扱うための⼿法を研究する分野 (最近は難しい理論なども多い)
• 多⾓形の内外判定, 線分の交差判定や領域分割などの研究もあり (古典的)
• アルゴリズムとして、性能がよい物が多い
図形や地図関係で困っている⽅がありましたら、ご連絡を.