Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

ABC2015 Summer LT

328 views

Published on

2015/7/20に開催されたABC2015SummerのLTのための資料です。

Published in: Engineering
  • Be the first to comment

  • Be the first to like this

ABC2015 Summer LT

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

×