Accueil
Explorer
Soumettre la recherche
Mettre en ligne
S’identifier
S’inscrire
Publicité
Check these out next
The Student's Guide to LinkedIn
LinkedIn
Different Roles in Machine Learning Career
Intellipaat
Defining a Tech Project Vision in Eight Quick Steps pdf
TechSoup
The Hero's Journey (For movie fans, Lego fans, and presenters!)
Dan Roam
10 Inspirational Quotes for Graduation
Guy Kawasaki
The Health Benefits of Dogs
The Presentation Designer
The Benefits of Doing Nothing
INSEAD
A non-technical introduction to ChatGPT - SEDA.pptx
Sue Beckingham
1
sur
51
Top clipped slide
Comp geom20131107open
22 Nov 2013
•
0 j'aime
2 j'aime
×
Soyez le premier à aimer ceci
afficher plus
•
2,021 vues
vues
×
Nombre de vues
0
Sur Slideshare
0
À partir des intégrations
0
Nombre d'intégrations
0
Télécharger maintenant
Télécharger pour lire hors ligne
Signaler
Kensuke Onishi
Suivre
東海大学
Publicité
Publicité
Publicité
Recommandé
appengine ja night BT 近くを探す?
Suguru ARAKAWA
1.5K vues
•
20 diapositives
文字列曖昧検索によるマルウェアバイナリ解析
Preferred Networks
4.6K vues
•
27 diapositives
明日機械学習に役立つかもしれない数学
Yu(u)ki IWABUCHI
2.2K vues
•
35 diapositives
Bachelor Presentation
Dzul Fahmi
1.6K vues
•
24 diapositives
日曜数学会 Ofdm
和人 桐ケ谷
373 vues
•
37 diapositives
Rで方言のネットワーク分析
Ayaka Onohara
4K vues
•
30 diapositives
Contenu connexe
En vedette
(20)
The Student's Guide to LinkedIn
LinkedIn
•
78.4K vues
Different Roles in Machine Learning Career
Intellipaat
•
9.5K vues
Defining a Tech Project Vision in Eight Quick Steps pdf
TechSoup
•
7.6K vues
The Hero's Journey (For movie fans, Lego fans, and presenters!)
Dan Roam
•
27.4K vues
10 Inspirational Quotes for Graduation
Guy Kawasaki
•
300.7K vues
The Health Benefits of Dogs
The Presentation Designer
•
33.4K vues
The Benefits of Doing Nothing
INSEAD
•
50.1K vues
A non-technical introduction to ChatGPT - SEDA.pptx
Sue Beckingham
•
17.7K vues
The Dungeons & Dragons Guide to Marketing
Ian Lurie
•
15.6K vues
How You Can Change the World
24Slides
•
57.4K vues
signmesh snapshot - the best of sustainability
signmesh
•
9.4K vues
The Science of a Great Career in Data Science
Kate Matsudaira
•
38.1K vues
The ABC’s of Living a Healthy Life
Dr. Omer Hameed
•
1.1M vues
CAREER FORWARD - THE TOOLS YOU NEED TO START MOVING
Kelly Services
•
2.8K vues
Top 5 Skills for Project Managers
LinkedIn Learning Solutions
•
22.8K vues
Mind-Blowing Facts About National Parks
Ethos3
•
43.2K vues
8 Easy Ways to Relieve Stress At Work (Backed By Science)
True Stress Management
•
2.7K vues
ChatGPT What It Is and How Writers Can Use It.pdf
Adsy
•
31.6K vues
Pixar's 22 Rules to Phenomenal Storytelling
Gavin McMahon
•
4.7M vues
2022 Women in the Workplace Briefing
McKinsey & Company
•
22.8K vues
Publicité
Comp geom20131107open
計算幾何入門 Androidアプリでの応用 東海大学 大西建輔
自己紹介 大西建輔(おおにし けんすけ) 興味のある分野
データ構造とアルゴリズム(特に計算幾何) データベース(索引構造, データ工学) iPhoneアプリやAndroidアプリの作成(学生と) パズル・ゲーム関係 問題自動生成やクライアント作成(学生と)
目次 1. 右か左か? ⇒ 線分のどちら側に点があるかを判定 2.
どこで交わっている? ⇒ 多数の線分があるとき, 交差している組を発見 3. 中か外か? ⇒ 多角形の内部に点が含まれるかを判定 4. 近くのトイレは? ⇒ 平面上に多数の点がある. 問合せ点がどの点に近いかを判定
右か左か?(1) 学生作成アプリ 出発地点と到着地点を指定
Google乗換案内から経路 データを取得 曲がる場所とそれを結ぶ 線分を描画 曲がる場所に近づくと どちらに曲がるかを提示 曲がる場所⇒点, 経路 ⇒線分(辺) 計算幾何の対象!
右か左か?(2) a (a.x,a.y) [問題] 点は線分に対し どこにあるか c' c
(c.x, c.y) 入力: (向きあり)線分と点 出力: 右側か、左側か、 線分を含む直線上か b (b.x, b.y) c’’
符号付面積(三角形の面積) a (a.x,a.y) 3点 a,
b, cが 反時計周りに並ぶ ⇒正 時計回りに並ぶ ⇒負 同一直線上にある ⇒ 0 という値をとる. a.x a. y 1 - c(c.x,c.y) + c' b(b.x,b.y) 1 1 b.x b. y 1 (a.x - c.x)(b. y - c. y ) (b.x - c.x)(c. y - a. y ) 2 2 c.x c. y 1
どこで交わっている?(1) 画像管理アプリ(作成中) 斜めから取ったスクリーン を長方形に 画像から線分を抽出 線分から四角形になる ものを探す
線分のふるい落とし 真ん中にある線分 × 中心付近で交差してい る線分 × 線分の交差は? 計算幾何の対象!
どこで交わっている?(2) 交差とは a 2線分が交差 d ⇔ 一方の線分の点が 他方に含まれる. (線分に端点は含まれる) 例えば, 1. 線分を含む2直線から 交点を計算 c b a d b 2.
交点が線分に含まれる か判定 c
どこで交わっている?(3) 符号付き面積による交差判定 a 2線分が交差 ⇔ 線分abに対し, 点c,dが 線分abの異なる側 かつ 線分cdに対し,
点a,bが 線分cdの異なる側 d c b a 符号付き面積で計算可能 △cda, △cdb の積が負 d b [同一直線上の場合] x座標かy座標が2点間に 入っているか? c
どこで交わっている?(4) Point2G.Class Javaでの実装 public double
signedArea(Point2G second, Point2G third){ double x2=second.x; double y2 = second.y; double x3 = third.x; double y3 = third.y; return (x-x3)*(y2-y3)+(x2-x3)*(y3-y); Segment.Class } public boolean onSegment(Point2G point){ return point.between(top, bot); } public double isRight(Point2G point){ return top.signedArea(bot, point); } public boolean intersect(Segment seg){ if (onSegment(seg.top) || onSegment(seg.bot) || seg.onSegment(top) || seg.onSegment(bot)) return true; else if ((isRight(seg.top)*isRight(seg.bot)<0) && (seg.isRight(top)*seg.isRight(bot)<0)) return true; else return false; }
どこで交わっている?(5) n本の線分の交差判定(問題) [問題] n本の線分が与えられてい る場合に, 交差する線分 の組を全て計算する. 入力: n本の線分 出力:
交差する線分の組 全ての線分の組をチェック O(n2)時間
どこで交わってる?(6) n本の線分の交差判定(アイデア) 平面走査法 水平線(走査線)を上から下に移動し, 変化が 起こる場所を探す イベント ⇒ 連続である必要はない. 計画 ⇒
変化は, 交点でのみ発生. 走査線計画 走査線と線分の交差状況を表すデータ構造 ⇒ 線分の状態を保持. この中で, 隣り合う 線分の交差判定のみをおこなう.
どこで交わっている?(7) アルゴリズムの動作 ヒープ作成 S1 1 S5 ヒープ
H 5 1 1 S3 2 3 1 S2 2 5 2 4 S4 4 3 2 3
どこで交わっている?(7) アルゴリズムの動作 ヒープ作成 S1 1 S5 ヒープ
H 5 1 3 S3 2 3 1 S2 2 5 4 2 4 S4 4 3 2 1 5 3 4
どこで交わっている?(8) アルゴリズムの動作 ヒープ作成 S1 1 S5 ヒープ
H 5 1 S3 3 1 S2 2 5 2 3 5 3 2 1 4 2 5 4 S4 4 イベント 計画 3 4
どこで交わっている?(7) アルゴリズムの動作 (上端点の場合) S1 1 S5 ヒープ
H 5 5 S3 3 5 2 3 1 二分探索木 T 4 S4 4 3 2 3 4 2 5 1 S2 2 1 1 4
どこで交わっている?(7) アルゴリズムの動作 (上端点の場合) S1 1 S5 ヒープ
H 5 3 2 S3 3 4 1 S2 2 5 5 2 1 5 二分探索木 T 2 3 交差判定 1 5 4 S4 4 4 3 出力 (S1,S5)
どこで交わっている?(7) アルゴリズムの動作 (交点の追加) S1 1 S5 ヒープ
H 5 1 S3 15 3 5 2 2 5 二分探索木 T 2 3 1 5 4 S4 4 4 3 4 15 1 S2 2 3 出力 (S1,S5)
どこで交わっている?(7) アルゴリズムの動作 (交点の追加) S1 1 S5 ヒープ
H 5 3 S3 15 3 5 5 二分探索木 T 2 4 S4 4 1 2 3 4 3 4 2 1 S2 2 15 5 出力 (S1,S5) 1 5
どこで交わっている?(7) アルゴリズムの動作 (交点の追加) S1 1 S5 ヒープ
H 5 1 3 5 2 5 二分探索木 T 2 4 S4 3 4 3 4 1 4 2 S3 15 S2 2 3 5 出力 (S1,S5) 交差判定 1 3
どこで交わっている?(7) アルゴリズムの動作 (下端点の場合) S1 1 S5 ヒープ
H 5 5 S3 15 3 1 S2 2 5 1 2 2 4 二分探索木 T 2 3 交差判定 5 3 4 S4 4 4 3 出力 (S1,S5)
どこで交わっている?(7) アルゴリズムの動作 (上端点の場合) S1 1 S5 ヒープ
H 5 5 S3 15 3 S2 2 1 25 5 2 3 2 4 4 二分探索木 T 4 S4 4 2 交差判定 2 25 3 5 3 出力 (S1,S5) (S2,S5)
どこで交わっている?(7) アルゴリズムの動作 (終了) S1 1 S5 ヒープ
H 5 3 4 3 S3 15 3 S2 2 1 25 5 4 二分探索木 T 23 2 34 3 4 S4 3 4 3 出力 (S1,S5) (S2,S5) (S2,S3) (S3,S4)
どこで交わってる?(8) n本の線分の交差判定(アルゴリズム) 1. 線分の端点を y座標をキーとしてヒープHに挿入; 2. 二分探索木 T
を空にする; 3. While (Hが空でない) do 1. H から最大要素 pを取り出す; 2. p が線分 l の上端点 ⇒ l を T に挿入; T で lと隣接する2本の線分と l に交点があれば出力; 交点を新しい線分の上端点として, H に入力; 3. p が線分 l の下端点 ⇒ l を T から削除; l の削除で隣接する線分の間に交点があれば出力; 交点を新しい線分の下端点として, H に入力;
どこで交わっている?(9) アルゴリズムの性能 [定理] (Bently-Ottmann, 1979) n本の線分に対して,
全ての交差を O((n+k)log n)時間で計算可能. ただし, k は交点数. [証明] “隣り合った線分だけが交差”かつ“全ての隣接 関係を調査“⇒ 全ての交点を出力 イベント点の数は, O(n+k) 個 各イベント点で 二分探索木への挿入, からの削除, ヒープからの取り出し, 挿入が行われる. どの操作も O(log n) 時間必要.
交点数が k
Wn2) となる例 n/2本 n/2本
どこで交わっている?(10) さらに速いアルゴリズム [定理] (Chazelle-Edelsbrunner, 1992) n本の線分の集合に対して,
全ての交差を O(nlog n + k) 時間で計算可能. ただし, k は交点数.
中か外か?(1) 学生作成アプリ タブレットに自由に描画(軌跡を赤く表示) 傾けながら,
黒いボールをスタートからゴールへ ただし, 赤の外側にボールを出すと終了. 軌跡は多角形と見なせる ⇒ ボールの重心が多角形内部に入っているか?
中か外か?(2) 問題設定 [入力] Q: 多角形,
n頂点 p: 点 [出力] Q の内部にpが含 まれているかどうか? p 多角形Qは, 点の配列 (p0,p1, …, pn-1) と表現 p’
中か外か?(3) ジョルダンの閉曲線定理 自己交差のない 始点と終点が同じ曲線, [定理] (ジョルダンの閉曲線定理) c: 平面上の単純閉曲線 cにより, 平面は閉曲線の 内部と外部に分割される
中か外か?(4) アイデア 点 pをある方向に移動 ⇒ 内部から外部も 外部から内部も 必ず辺を通る ⇒
中ならば, 奇数回 外ならば, 偶数回 交差あり. p p’
中か外か?(5) アルゴリズム [入力] p: 点, Q
: 単純多角形, (p0,p1, …, pn-1) [出力] p が Qに含まれるかどうか? l : pからでる半直線(どの方向でもよい) 1. Qの全ての辺 pi pi+1 とl の交差の回数を計算 2. もし, 回数が奇数ならば, 内部の点 そうでなければ, 外部の点 …… 時間計算量 O(n)時間
多角形の 内部が 凸集合 中か外か?(6) 凸多角形の場合 p’ [入力] p: 点, Q:
凸多角形, (p0,p1,…, pn-1) 1. △gp0p1の符号付き面積を 計算. 符号をsign; 2. △gpi pi+1に対し, 符号付き 面積を計算. もし, signと符号が違う ⇒ 内点でない. 3. 全ての三角形が同符号 ⇒ 内点 計算時間 ……O(n)時間 4 3 5 p 6 2 1 7 0
中か外か?(5) 凸多角形の場合, 前準備あり 凸多角形を錐に分割 p’ 4
重心gを計算 gから各頂点への 偏角を計算 3 5 p 偏角をキーとし, 二分探索木で管理 構成時間…O(n log n)時間 g 6 2 6 4 3 1 0 5 7 7 1 2 0
中か外か?(6) 凸多角形の場合、検索 検索時 p’ 4 点pのgからの偏角を計算
偏角をキーにpが含まれ る錐を探索 3 5 p gと同じ側なら内点, そうでないなら外点 計算時間……O(log n)時間 g 6 2 6 4 3 5 p 1 0 7 7 1 2 0
近くのトイレは?(1) 多目的トイレマップ http://wc.m47.jp/ みんなで作るトイレ マップ(Androidアプリ)
〇〇トイレマップ …… 東海大のトイレマップ を作成中
近くのトイレは?(2) ボロノイ図 それぞれの点に最も 近い領域で分割 自然界に多く存在 人間の皮膚,蜂の巣, 砂浜の模様
様々な分野で応用 社会学, 数学, 生物学, 物理学, 考古学など
近くのトイレは?(3) 最近点の検索 1. 点を適当に選ぶ. この点と問 合せ点
qとの距離を計算; 2. 隣り合った領域の点とq との距離を計算; 3. If (最初の距離が最も小さい) then 最近点を発見 else もっとも距離の小さな 点に移動. Step 2へ q
近くのトイレは?(4) ボロノイ図の定義 P={p0,p1, ...,
pn-1} : 点集合 d(p,q): ユークリッド距離 ボロノイ領域 母点 V(pi) : 点piに関する ボロノイ領域 V ( pi ) x | d ( x, pi ) d ( x, p j ) j i V(pi) (i=1,.., n)をボロノイ 図と定義. V(P)と表現 ボロノイ辺 ボロノイ頂点
近くのトイレは?(5) ボロノイ図の性質 ボロノイ領域は凸 ボロノイ頂点は 3つのボロノイ辺の交点
ボロノイ頂点を中心とする円は, 対応する3頂点以外を含まない piがpjに最も近い母点 ⇒ V(pi)とV(pj)は隣接 n点に対するボロノイ図 高々2n-5個のボロノイ頂点 高々3n-6本のボロノイ辺
近くのトイレは?(6) ボロノイ図の構成法(分割統治法) 1. n点集合 Sを x座標の中央値でSl,
Srに分割; 2. V(Sl)とV(Sr)を再帰的に構成; 3. Sl と Srを分離する折れ線列sを構成; 4. sの左にあるV(Sr)の辺, sの右にあるV(Sl)の辺 を全て除去 ⇒ 残った構造が V(S) T(n) : このアルゴリズムの計算時間 もし, Step3, 4が O(n)時間で終了するならば, T(n) = 2T(n/2)+O(n) が成立. よって, T(n)=O(n log n)
[定理] pl pr :
sの左右側の平面 V(S)は, V(Sl)∩pl と V(Sr)∩pr の和集合 Sl Sr Sl Sr
近くのトイレは?(7) ボロノイ図の構成法(折れ線列) s(Sl,Sr) : V(S)の辺で,
V(pi), V(pj)に共有される辺. ただし, pi Sl, pj Sr 補題 s(Sl,Sr) は線分の列 となる. それをsと書く 補題 sは単調な折れ線列 y座標が必ず減少している) Sl Sr
近くのトイレは?(7) ボロノイ図の構成法(折れ線列) e t1 pl er el t2 pr
近くのトイレは?(7) ボロノイ図の構成法(折れ線列) e t1 pl er el t2 pr
近くのトイレは?(7) ボロノイ図の構成法(折れ線列) e t1 pl er el t2 pr
近くのトイレは?(7) ボロノイ図の構成法(折れ線列) e t1 pl er el t2 pr
近くのトイレは?(7) ボロノイ図の構成法(折れ線列) e t1 pl er el t2 pr
折れ線列sの構成 y(e,e') : 直線e,e'の交点のy座標 1.
上部外接線 t1と下部外接線 t2を計算 pl (pr) : Sl (Sr)の上部外接線に含まれる点 el , er : t1と交わるV(pl), V(pr)の辺 e に pl と prの垂直二等分線を代入 2. do 1. while (eとelが交わらない) elに時計回りで次の辺を代入 2. while (eとerが交わらない) erに反時計回りで次の辺を代入 3. if ( y(e, el) > y(e, er) ) plにelのもう一つの母点を代入 else prにerのもう一つの母点を代入 4. eに plと prの垂直二等分線を代入 while (plprの垂直二等分線 ≠ t2)
[補題] 折れ線列sはO(n)時間で構成できる. (証明) sのサイズ: O(n) Step
1. 縮小法で傾きの中央値 を計算…O(n)時間で計算可能 Step2. 二重のwhile文 ⇒全体で, どの辺も高々2回 しか交差判定されない. ⇒ O(n)時間で計算可能 Sl Sr
最後に 計算幾何(特に2次元)の対象は, 様々なところで利 用可能
線分, 交差, ボロノイ図(今日の話) 凸包, デローネ三角形分割, アレンジメント, 区分木, パラメトリック探索など ライブラリとして, CGAL, LEDA, Boost Geometry, OpenCVなどもあり. Androidアプリを作るのは結構面白い. (アルゴリズム+Androidアプリの本でも)
Publicité