abc2015 summer lt

12
Androidと計算幾何の 楽しい関係 この領域の⾯積計算できますか? ⼤⻄ 建輔 [email protected]

Upload: kensuke-onishi

Post on 12-Feb-2017

227 views

Category:

Engineering


1 download

TRANSCRIPT

Page 1: ABC2015 Summer LT

Androidと計算幾何の楽しい関係

この領域の⾯積計算できますか?

⼤⻄ 建輔[email protected]

Page 2: ABC2015 Summer LT

⾃⼰紹介• 某⼤学教員(情報系かつ数学系)

• 普段はプログラミングや数学教えてます。• Androidとの付き合いはGoogle Developer Day 2009でGDDPhoneを⼿に⼊れてから。

• ABC参加は, 2011Winterから。• 今回初LTで、ちょっと緊張気味

Page 3: ABC2015 Summer LT

今⽇のお題地図アプリの領域の⾯積はどう計算しますか?• こういう感じなら, 三⾓形に分ければよい?

Page 4: ABC2015 Summer LT

今⽇のお題地図アプリの領域の⾯積はどう計算しますか?• こういう感じなら, 三⾓形に分ければよい?

• でも、こうなると?⇒うまく三⾓形に分けるには計算⽅法が必要⇒三⾓形に分けなくても計算できます!

Page 5: ABC2015 Summer LT

必要なのは, 三⾓形の⾯積ちょっとだけ数学のお話A(x1, y1), B(x2, y2), C(x3, y3) : 平⾯上の3点三⾓形の⾯積 S は,

もしくは, 三⾓形の3辺の⻑さが, a, b, cのとき

ただし, s = (a+b+c)/2 (ヘロンの公式)

Page 6: ABC2015 Summer LT

java.awt.Polygon クラスは?

• 多⾓形を表すクラス• 頂点のx座標, y座標の配列, 頂点数で定義• 内外判定可能 containsメソッド• Rectangleオブジェクトとの交差判定メソッドなど

• ⾯積に関するメソッドなし⇒タップした緯度経度を座標値とすれば利⽤可能

https://docs.oracle.com/javase/jp/6/api/java/awt/Polygon.htmlより

Page 7: ABC2015 Summer LT

Android SDKでは?• LatLngクラスで, 経度緯度が利⽤できる• Locationクラスに, メソッドdistanceBetween

(経度1, 緯度1, 経度2, 緯度2, 返値配列)あり⇒三⾓形の⾯積は, distanceBetweenとヘロンの公式で計算できる

⇒へこみがない(凸)多⾓形ならば, 三⾓形の⾯積の和を計算すればよい. 

ただし, 多⾓形は, P=(P0, P1, … ,Pn-1)で表現

http://developer.android.com/reference/android/location/Location.htmlより

Page 8: ABC2015 Summer LT

今⽇のお題

Page 9: ABC2015 Summer LT

もう⼀度数学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)

Page 10: ABC2015 Summer LT

符号付き⾯積で• ⻘の三⾓形正の値• ⻩⾊の三⾓形負の値全て⾜すと領域の⾯積

もし, 負の値なら絶対値をとればよい

Page 11: ABC2015 Summer LT

もうちょっと問題が• 符号付き⾯積は, 頂点座標でのみ利⽤可能(緯度経度であればよい)

• 三⾓形の⾯積はヘロンの公式(+distanceBetween)で計算

⇒経度緯度からヘロンの公式で計算し、和を取るときに符号付き⾯積の符号だけ利⽤

Page 12: ABC2015 Summer LT

計算幾何って?

• 多⾓形や線分などを計算機で扱うための⼿法を研究する分野 (最近は難しい理論なども多い)

• 多⾓形の内外判定, 線分の交差判定や領域分割などの研究もあり (古典的)

• アルゴリズムとして、性能がよい物が多い

図形や地図関係で困っている⽅がありましたら、ご連絡を.