computer science семинар, осень 2011: Устойчивая реализация...

63
Устойчивая реализация алгоритмов вычислительной геометрии Антон Ковалев ЗАО Транзас, СПбГУ ИТМО октябрь 2011 А. Ковалев (Транзас, ИТМО) Exact geometric computation октябрь 2011 1 / 27

Upload: cs-center

Post on 12-Feb-2017

114 views

Category:

Documents


3 download

TRANSCRIPT

Page 1: Computer Science семинар, осень 2011: Устойчивая реализация алгоритмов вычислительной геометрии (Антон Ковалев,

Устойчивая реализация алгоритмов вычислительнойгеометрии

Антон Ковалев

ЗАО Транзас, СПбГУ ИТМО

октябрь 2011

А. Ковалев (Транзас, ИТМО) Exact geometric computation октябрь 2011 1 / 27

Page 2: Computer Science семинар, осень 2011: Устойчивая реализация алгоритмов вычислительной геометрии (Антон Ковалев,

Расчеты в вычислительной геометрии

Реализация алгоритмов вычислительной геометрии зачастую оченьсложна, так как:

сложен сам алгоритм (например, incremental segment Voronoidiagram);в описании алгоритма опущены вырожденные случаи (например,Bentley-Ottmann);вычисления с плавающей точкой дают погрешность, что приводитк нарушению инвариантов алгоритма.

Рассмотрим один из способов справиться с последней проблемой:фильтрованное вычисление предикатов.

А. Ковалев (Транзас, ИТМО) Exact geometric computation октябрь 2011 2 / 27

Page 3: Computer Science семинар, осень 2011: Устойчивая реализация алгоритмов вычислительной геометрии (Антон Ковалев,

Расчеты в вычислительной геометрии

Реализация алгоритмов вычислительной геометрии зачастую оченьсложна, так как:

сложен сам алгоритм (например, incremental segment Voronoidiagram);

в описании алгоритма опущены вырожденные случаи (например,Bentley-Ottmann);вычисления с плавающей точкой дают погрешность, что приводитк нарушению инвариантов алгоритма.

Рассмотрим один из способов справиться с последней проблемой:фильтрованное вычисление предикатов.

А. Ковалев (Транзас, ИТМО) Exact geometric computation октябрь 2011 2 / 27

Page 4: Computer Science семинар, осень 2011: Устойчивая реализация алгоритмов вычислительной геометрии (Антон Ковалев,

Расчеты в вычислительной геометрии

Реализация алгоритмов вычислительной геометрии зачастую оченьсложна, так как:

сложен сам алгоритм (например, incremental segment Voronoidiagram);в описании алгоритма опущены вырожденные случаи (например,Bentley-Ottmann);

вычисления с плавающей точкой дают погрешность, что приводитк нарушению инвариантов алгоритма.

Рассмотрим один из способов справиться с последней проблемой:фильтрованное вычисление предикатов.

А. Ковалев (Транзас, ИТМО) Exact geometric computation октябрь 2011 2 / 27

Page 5: Computer Science семинар, осень 2011: Устойчивая реализация алгоритмов вычислительной геометрии (Антон Ковалев,

Расчеты в вычислительной геометрии

Реализация алгоритмов вычислительной геометрии зачастую оченьсложна, так как:

сложен сам алгоритм (например, incremental segment Voronoidiagram);в описании алгоритма опущены вырожденные случаи (например,Bentley-Ottmann);вычисления с плавающей точкой дают погрешность, что приводитк нарушению инвариантов алгоритма.

Рассмотрим один из способов справиться с последней проблемой:фильтрованное вычисление предикатов.

А. Ковалев (Транзас, ИТМО) Exact geometric computation октябрь 2011 2 / 27

Page 6: Computer Science семинар, осень 2011: Устойчивая реализация алгоритмов вычислительной геометрии (Антон Ковалев,

Расчеты в вычислительной геометрии

Реализация алгоритмов вычислительной геометрии зачастую оченьсложна, так как:

сложен сам алгоритм (например, incremental segment Voronoidiagram);в описании алгоритма опущены вырожденные случаи (например,Bentley-Ottmann);вычисления с плавающей точкой дают погрешность, что приводитк нарушению инвариантов алгоритма.

Рассмотрим один из способов справиться с последней проблемой:фильтрованное вычисление предикатов.

А. Ковалев (Транзас, ИТМО) Exact geometric computation октябрь 2011 2 / 27

Page 7: Computer Science семинар, осень 2011: Устойчивая реализация алгоритмов вычислительной геометрии (Антон Ковалев,

Определение пересечения двух отрезков на плоскости

Определение

Отрезок s задается начальной и конечной точками a, b ∈ R2 иопределяется как множество точек s =

{(1− t)a + tb, t ∈ [0; 1]

}.

ОпределениеОтрезки s1 и s2 пересекаются, если существует непустое множествообщих точек.

А. Ковалев (Транзас, ИТМО) Exact geometric computation октябрь 2011 3 / 27

Page 8: Computer Science семинар, осень 2011: Устойчивая реализация алгоритмов вычислительной геометрии (Антон Ковалев,

Определение пересечения двух отрезков на плоскости

Определение

Отрезок s задается начальной и конечной точками a, b ∈ R2 иопределяется как множество точек s =

{(1− t)a + tb, t ∈ [0; 1]

}.

ОпределениеОтрезки s1 и s2 пересекаются, если существует непустое множествообщих точек.

А. Ковалев (Транзас, ИТМО) Exact geometric computation октябрь 2011 3 / 27

Page 9: Computer Science семинар, осень 2011: Устойчивая реализация алгоритмов вычислительной геометрии (Антон Ковалев,

Определение пересечения двух отрезков на плоскости

Определение

Turn(s, c) =

1 точка c лежит слева от направленного отрезка s,−1 точка c лежит справа от направленного отрезка s,0 s и c коллинеарны.

Утверждение

s1⋂

s2 ⇐⇒

Turn(s1, s2,a) · Turn(s1, s2,b) ≤ 0Turn(s2, s1,a) · Turn(s2, s1,b) ≤ 0 ,AABB(s1)

⋂AABB(s2) 6= ∅

где AABB — это axis-aligned bounding box.

А. Ковалев (Транзас, ИТМО) Exact geometric computation октябрь 2011 4 / 27

Page 10: Computer Science семинар, осень 2011: Устойчивая реализация алгоритмов вычислительной геометрии (Антон Ковалев,

Определение пересечения двух отрезков на плоскости

Определение

Turn(s, c) =

1 точка c лежит слева от направленного отрезка s,−1 точка c лежит справа от направленного отрезка s,0 s и c коллинеарны.

Утверждение

s1⋂

s2 ⇐⇒

Turn(s1, s2,a) · Turn(s1, s2,b) ≤ 0Turn(s2, s1,a) · Turn(s2, s1,b) ≤ 0 ,AABB(s1)

⋂AABB(s2) 6= ∅

где AABB — это axis-aligned bounding box.

А. Ковалев (Транзас, ИТМО) Exact geometric computation октябрь 2011 4 / 27

Page 11: Computer Science семинар, осень 2011: Устойчивая реализация алгоритмов вычислительной геометрии (Антон Ковалев,

Вычисление предиката Turn

Утверждение

Turn(s, c) = sign((sb − sa)× (c − sa)

)= sign

(∣∣∣∣sb,x − sa,x cx − sa,xsb,y − sa,y cy − sa,y

∣∣∣∣)

Проблема? Вычисления с плавающей точкой:

point_2 a ( 3 . 0 , 5 . 0 ) ;point_2 b = −a ;point_2 c = a ∗ (1LL << 52 ) ;

// Что вернет эта функция?Turn ( segment_2 ( a , b ) , c ) ;

А. Ковалев (Транзас, ИТМО) Exact geometric computation октябрь 2011 5 / 27

Page 12: Computer Science семинар, осень 2011: Устойчивая реализация алгоритмов вычислительной геометрии (Антон Ковалев,

Вычисление предиката Turn

Утверждение

Turn(s, c) = sign((sb − sa)× (c − sa)

)= sign

(∣∣∣∣sb,x − sa,x cx − sa,xsb,y − sa,y cy − sa,y

∣∣∣∣)Проблема?

Вычисления с плавающей точкой:

point_2 a ( 3 . 0 , 5 . 0 ) ;point_2 b = −a ;point_2 c = a ∗ (1LL << 52 ) ;

// Что вернет эта функция?Turn ( segment_2 ( a , b ) , c ) ;

А. Ковалев (Транзас, ИТМО) Exact geometric computation октябрь 2011 5 / 27

Page 13: Computer Science семинар, осень 2011: Устойчивая реализация алгоритмов вычислительной геометрии (Антон Ковалев,

Вычисление предиката Turn

Утверждение

Turn(s, c) = sign((sb − sa)× (c − sa)

)= sign

(∣∣∣∣sb,x − sa,x cx − sa,xsb,y − sa,y cy − sa,y

∣∣∣∣)Проблема? Вычисления с плавающей точкой:

point_2 a ( 3 . 0 , 5 . 0 ) ;point_2 b = −a ;point_2 c = a ∗ (1LL << 52 ) ;

// Что вернет эта функция?Turn ( segment_2 ( a , b ) , c ) ;

А. Ковалев (Транзас, ИТМО) Exact geometric computation октябрь 2011 5 / 27

Page 14: Computer Science семинар, осень 2011: Устойчивая реализация алгоритмов вычислительной геометрии (Антон Ковалев,

Вычисление предиката Turn

Вычисление поворота от отрезка и точки плоскости: красный цвет —левый поворот, синий — правый, зеленый — точка и отрезок

принадлежат одной прямой.

А. Ковалев (Транзас, ИТМО) Exact geometric computation октябрь 2011 6 / 27

Page 15: Computer Science семинар, осень 2011: Устойчивая реализация алгоритмов вычислительной геометрии (Антон Ковалев,

Вычисление предиката TurnЧисла с плавающей точкой

Двоичное число с плавающей точкой:a = ±1.a1a2a3 . . . ap−1 × 2γ , ai ∈ {0, 1}.

Определение

ulp(a) = 2−p+1+γ

D — множество всех чисел c плавающей точкой c операциями ⊕,,⊗.∀a, b ∈ D, ε = 2−p:

a ⊕ b = (a + b)(1+ δ), |δ| ≤ εa b = (a − b)(1+ δ), |δ| ≤ εa ⊗ b = ab(1+ δ), |δ| ≤ ε

Утверждение

∀a, b, c ∈ D2, v = (bx ax)⊗ (cy ay ) (by ay )⊗ (cx ax)

∃ε ∈ D :

{v > ε⇒ (b − a)× (c − a) > 0v < −ε⇒ (b − a)× (c − a) < 0

А. Ковалев (Транзас, ИТМО) Exact geometric computation октябрь 2011 7 / 27

Page 16: Computer Science семинар, осень 2011: Устойчивая реализация алгоритмов вычислительной геометрии (Антон Ковалев,

Вычисление предиката TurnЧисла с плавающей точкой

Двоичное число с плавающей точкой:a = ±1.a1a2a3 . . . ap−1 × 2γ , ai ∈ {0, 1}.

Определение

ulp(a) = 2−p+1+γ

D — множество всех чисел c плавающей точкой c операциями ⊕,,⊗.∀a, b ∈ D, ε = 2−p:

a ⊕ b = (a + b)(1+ δ), |δ| ≤ εa b = (a − b)(1+ δ), |δ| ≤ εa ⊗ b = ab(1+ δ), |δ| ≤ ε

Утверждение

∀a, b, c ∈ D2, v = (bx ax)⊗ (cy ay ) (by ay )⊗ (cx ax)

∃ε ∈ D :

{v > ε⇒ (b − a)× (c − a) > 0v < −ε⇒ (b − a)× (c − a) < 0

А. Ковалев (Транзас, ИТМО) Exact geometric computation октябрь 2011 7 / 27

Page 17: Computer Science семинар, осень 2011: Устойчивая реализация алгоритмов вычислительной геометрии (Антон Ковалев,

Вычисление предиката TurnЧисла с плавающей точкой

Двоичное число с плавающей точкой:a = ±1.a1a2a3 . . . ap−1 × 2γ , ai ∈ {0, 1}.

Определение

ulp(a) = 2−p+1+γ

D — множество всех чисел c плавающей точкой c операциями ⊕,,⊗.

∀a, b ∈ D, ε = 2−p:a ⊕ b = (a + b)(1+ δ), |δ| ≤ εa b = (a − b)(1+ δ), |δ| ≤ εa ⊗ b = ab(1+ δ), |δ| ≤ ε

Утверждение

∀a, b, c ∈ D2, v = (bx ax)⊗ (cy ay ) (by ay )⊗ (cx ax)

∃ε ∈ D :

{v > ε⇒ (b − a)× (c − a) > 0v < −ε⇒ (b − a)× (c − a) < 0

А. Ковалев (Транзас, ИТМО) Exact geometric computation октябрь 2011 7 / 27

Page 18: Computer Science семинар, осень 2011: Устойчивая реализация алгоритмов вычислительной геометрии (Антон Ковалев,

Вычисление предиката TurnЧисла с плавающей точкой

Двоичное число с плавающей точкой:a = ±1.a1a2a3 . . . ap−1 × 2γ , ai ∈ {0, 1}.

Определение

ulp(a) = 2−p+1+γ

D — множество всех чисел c плавающей точкой c операциями ⊕,,⊗.∀a, b ∈ D, ε = 2−p:

a ⊕ b = (a + b)(1+ δ), |δ| ≤ εa b = (a − b)(1+ δ), |δ| ≤ εa ⊗ b = ab(1+ δ), |δ| ≤ ε

Утверждение

∀a, b, c ∈ D2, v = (bx ax)⊗ (cy ay ) (by ay )⊗ (cx ax)

∃ε ∈ D :

{v > ε⇒ (b − a)× (c − a) > 0v < −ε⇒ (b − a)× (c − a) < 0

А. Ковалев (Транзас, ИТМО) Exact geometric computation октябрь 2011 7 / 27

Page 19: Computer Science семинар, осень 2011: Устойчивая реализация алгоритмов вычислительной геометрии (Антон Ковалев,

Вычисление предиката TurnЧисла с плавающей точкой

Двоичное число с плавающей точкой:a = ±1.a1a2a3 . . . ap−1 × 2γ , ai ∈ {0, 1}.

Определение

ulp(a) = 2−p+1+γ

D — множество всех чисел c плавающей точкой c операциями ⊕,,⊗.∀a, b ∈ D, ε = 2−p:

a ⊕ b = (a + b)(1+ δ), |δ| ≤ εa b = (a − b)(1+ δ), |δ| ≤ εa ⊗ b = ab(1+ δ), |δ| ≤ ε

Утверждение

∀a, b, c ∈ D2, v = (bx ax)⊗ (cy ay ) (by ay )⊗ (cx ax)

∃ε ∈ D :

{v > ε⇒ (b − a)× (c − a) > 0v < −ε⇒ (b − a)× (c − a) < 0

А. Ковалев (Транзас, ИТМО) Exact geometric computation октябрь 2011 7 / 27

Page 20: Computer Science семинар, осень 2011: Устойчивая реализация алгоритмов вычислительной геометрии (Антон Ковалев,

Вычисление предиката TurnРасчет ε

v︷ ︸︸ ︷(b − a)× (c − a) ≈

v︷ ︸︸ ︷(bx ax)⊗ (cy ay ) (by ay )⊗ (cx ax)

=[(bx − ax)(cy − ay )(1+ δ1)(1+ δ2)(1+ δ3)

− (by − ay )(cx − ax)(1+ δ4)(1+ δ5)(1+ δ6)](1+ δ7),

|δi | ≤ ε;

ε = |v − v | ≤

e︷ ︸︸ ︷(|(bx − ax)(cy − ay )|+ |(by − ay )(cx − ax)|

× (4ε+ 6ε2 + 4ε3 + ε4)

Вычислим выражение справа в модели floating-point.

А. Ковалев (Транзас, ИТМО) Exact geometric computation октябрь 2011 8 / 27

Page 21: Computer Science семинар, осень 2011: Устойчивая реализация алгоритмов вычислительной геометрии (Антон Ковалев,

Вычисление предиката TurnРасчет ε

v︷ ︸︸ ︷(b − a)× (c − a) ≈

v︷ ︸︸ ︷(bx ax)⊗ (cy ay ) (by ay )⊗ (cx ax)

=[(bx − ax)(cy − ay )(1+ δ1)(1+ δ2)(1+ δ3)

− (by − ay )(cx − ax)(1+ δ4)(1+ δ5)(1+ δ6)](1+ δ7),

|δi | ≤ ε;

ε = |v − v | ≤

e︷ ︸︸ ︷(|(bx − ax)(cy − ay )|+ |(by − ay )(cx − ax)|

× (4ε+ 6ε2 + 4ε3 + ε4)

Вычислим выражение справа в модели floating-point.

А. Ковалев (Транзас, ИТМО) Exact geometric computation октябрь 2011 8 / 27

Page 22: Computer Science семинар, осень 2011: Устойчивая реализация алгоритмов вычислительной геометрии (Антон Ковалев,

Вычисление предиката TurnРасчет ε

v︷ ︸︸ ︷(b − a)× (c − a) ≈

v︷ ︸︸ ︷(bx ax)⊗ (cy ay ) (by ay )⊗ (cx ax)

=[(bx − ax)(cy − ay )(1+ δ1)(1+ δ2)(1+ δ3)

− (by − ay )(cx − ax)(1+ δ4)(1+ δ5)(1+ δ6)](1+ δ7),

|δi | ≤ ε;

ε = |v − v | ≤

e︷ ︸︸ ︷(|(bx − ax)(cy − ay )|+ |(by − ay )(cx − ax)|

× (4ε+ 6ε2 + 4ε3 + ε4)

Вычислим выражение справа в модели floating-point.

А. Ковалев (Транзас, ИТМО) Exact geometric computation октябрь 2011 8 / 27

Page 23: Computer Science семинар, осень 2011: Устойчивая реализация алгоритмов вычислительной геометрии (Антон Ковалев,

Вычисление предиката TurnРасчет ε

v︷ ︸︸ ︷(b − a)× (c − a) ≈

v︷ ︸︸ ︷(bx ax)⊗ (cy ay ) (by ay )⊗ (cx ax)

=[(bx − ax)(cy − ay )(1+ δ1)(1+ δ2)(1+ δ3)

− (by − ay )(cx − ax)(1+ δ4)(1+ δ5)(1+ δ6)](1+ δ7),

|δi | ≤ ε;

ε = |v − v | ≤

e︷ ︸︸ ︷(|(bx − ax)(cy − ay )|+ |(by − ay )(cx − ax)|

× (4ε+ 6ε2 + 4ε3 + ε4)

Вычислим выражение справа в модели floating-point.

А. Ковалев (Транзас, ИТМО) Exact geometric computation октябрь 2011 8 / 27

Page 24: Computer Science семинар, осень 2011: Устойчивая реализация алгоритмов вычислительной геометрии (Антон Ковалев,

Вычисление предиката TurnРасчет ε

e︷ ︸︸ ︷(|(bx − ax)(cy − ay )|+ |(by − ay )(cx − ax)|

)(1− ε)4 ≤

≤e︷ ︸︸ ︷

|(bx ax)⊗ (cy ⊗ ay )| ⊕ |(by ay )⊗ (cx ax)|

e ≤ e1

(1− ε)4= e(1+ 4ε+ 10ε2 + 20ε3 + · · · )

ε ≤ ε ≤ e(1+ 4ε+ 10ε2 + 20ε3 + · · · )(4ε+ 6ε2 + 4ε3 + ε4)

ε < 8εe

А. Ковалев (Транзас, ИТМО) Exact geometric computation октябрь 2011 9 / 27

Page 25: Computer Science семинар, осень 2011: Устойчивая реализация алгоритмов вычислительной геометрии (Антон Ковалев,

Вычисление предиката TurnРасчет ε

e︷ ︸︸ ︷(|(bx − ax)(cy − ay )|+ |(by − ay )(cx − ax)|

)(1− ε)4 ≤

≤e︷ ︸︸ ︷

|(bx ax)⊗ (cy ⊗ ay )| ⊕ |(by ay )⊗ (cx ax)|

e ≤ e1

(1− ε)4= e(1+ 4ε+ 10ε2 + 20ε3 + · · · )

ε ≤ ε ≤ e(1+ 4ε+ 10ε2 + 20ε3 + · · · )(4ε+ 6ε2 + 4ε3 + ε4)

ε < 8εe

А. Ковалев (Транзас, ИТМО) Exact geometric computation октябрь 2011 9 / 27

Page 26: Computer Science семинар, осень 2011: Устойчивая реализация алгоритмов вычислительной геометрии (Антон Ковалев,

Вычисление предиката TurnРасчет ε

e︷ ︸︸ ︷(|(bx − ax)(cy − ay )|+ |(by − ay )(cx − ax)|

)(1− ε)4 ≤

≤e︷ ︸︸ ︷

|(bx ax)⊗ (cy ⊗ ay )| ⊕ |(by ay )⊗ (cx ax)|

e ≤ e1

(1− ε)4= e(1+ 4ε+ 10ε2 + 20ε3 + · · · )

ε ≤ ε ≤ e(1+ 4ε+ 10ε2 + 20ε3 + · · · )(4ε+ 6ε2 + 4ε3 + ε4)

ε < 8εe

А. Ковалев (Транзас, ИТМО) Exact geometric computation октябрь 2011 9 / 27

Page 27: Computer Science семинар, осень 2011: Устойчивая реализация алгоритмов вычислительной геометрии (Антон Ковалев,

Вычисление предиката TurnРасчет ε

e︷ ︸︸ ︷(|(bx − ax)(cy − ay )|+ |(by − ay )(cx − ax)|

)(1− ε)4 ≤

≤e︷ ︸︸ ︷

|(bx ax)⊗ (cy ⊗ ay )| ⊕ |(by ay )⊗ (cx ax)|

e ≤ e1

(1− ε)4= e(1+ 4ε+ 10ε2 + 20ε3 + · · · )

ε ≤ ε ≤ e(1+ 4ε+ 10ε2 + 20ε3 + · · · )(4ε+ 6ε2 + 4ε3 + ε4)

ε < 8εe

А. Ковалев (Транзас, ИТМО) Exact geometric computation октябрь 2011 9 / 27

Page 28: Computer Science семинар, осень 2011: Устойчивая реализация алгоритмов вычислительной геометрии (Антон Ковалев,

Вычисление предиката Turn

Утверждение {v > 8εe ⇒ v > 0v < −8εe ⇒ v < 0

Что делать, если v ∈ [−8εe; 8εe]?

А. Ковалев (Транзас, ИТМО) Exact geometric computation октябрь 2011 10 / 27

Page 29: Computer Science семинар, осень 2011: Устойчивая реализация алгоритмов вычислительной геометрии (Антон Ковалев,

Вычисление предиката Turn

Утверждение {v > 8εe ⇒ v > 0v < −8εe ⇒ v < 0

Что делать, если v ∈ [−8εe; 8εe]?

А. Ковалев (Транзас, ИТМО) Exact geometric computation октябрь 2011 10 / 27

Page 30: Computer Science семинар, осень 2011: Устойчивая реализация алгоритмов вычислительной геометрии (Антон Ковалев,

Вычисление предиката TurnИнтервальная арифметика

ОпределениеИнтервальная арифметика:

a ∈ [alo , ahi ];

a · b ∈

mina′∈[alo ;ahi ]b′∈[blo ;bhi ]

{a′�b′

}; maxa′∈[alo ;ahi ]b′∈[blo ;bhi ]

{a′�b′

} ,· ∈ [+,−,×],� ∈ [⊕,,⊗] с округлением, соответственно, к −∞ и +∞.

Замечаниеsqr([alo , ahi ]) =?

А. Ковалев (Транзас, ИТМО) Exact geometric computation октябрь 2011 11 / 27

Page 31: Computer Science семинар, осень 2011: Устойчивая реализация алгоритмов вычислительной геометрии (Антон Ковалев,

Вычисление предиката TurnИнтервальная арифметика

ОпределениеИнтервальная арифметика:

a ∈ [alo , ahi ];

a · b ∈

mina′∈[alo ;ahi ]b′∈[blo ;bhi ]

{a′�b′

}; maxa′∈[alo ;ahi ]b′∈[blo ;bhi ]

{a′�b′

} ,· ∈ [+,−,×],� ∈ [⊕,,⊗] с округлением, соответственно, к −∞ и +∞.

Замечаниеsqr([alo , ahi ]) =?

А. Ковалев (Транзас, ИТМО) Exact geometric computation октябрь 2011 11 / 27

Page 32: Computer Science семинар, осень 2011: Устойчивая реализация алгоритмов вычислительной геометрии (Антон Ковалев,

Вычисление предиката TurnИнтервальная арифметика

Утверждение

Если интервал v = (b − a)× (c − a) не содержит 0, знак v вычисленточно.

ЗамечаниеПереключать режим округления процессора дорого.[alo ; ahi ] = −[−ahi ;−alo ].

Эффективная реализация есть, например, в boost/interval.Что делать, если интервал v содержит 0?

А. Ковалев (Транзас, ИТМО) Exact geometric computation октябрь 2011 12 / 27

Page 33: Computer Science семинар, осень 2011: Устойчивая реализация алгоритмов вычислительной геометрии (Антон Ковалев,

Вычисление предиката TurnИнтервальная арифметика

Утверждение

Если интервал v = (b − a)× (c − a) не содержит 0, знак v вычисленточно.

ЗамечаниеПереключать режим округления процессора дорого.

[alo ; ahi ] = −[−ahi ;−alo ].

Эффективная реализация есть, например, в boost/interval.Что делать, если интервал v содержит 0?

А. Ковалев (Транзас, ИТМО) Exact geometric computation октябрь 2011 12 / 27

Page 34: Computer Science семинар, осень 2011: Устойчивая реализация алгоритмов вычислительной геометрии (Антон Ковалев,

Вычисление предиката TurnИнтервальная арифметика

Утверждение

Если интервал v = (b − a)× (c − a) не содержит 0, знак v вычисленточно.

ЗамечаниеПереключать режим округления процессора дорого.[alo ; ahi ] = −[−ahi ;−alo ].

Эффективная реализация есть, например, в boost/interval.Что делать, если интервал v содержит 0?

А. Ковалев (Транзас, ИТМО) Exact geometric computation октябрь 2011 12 / 27

Page 35: Computer Science семинар, осень 2011: Устойчивая реализация алгоритмов вычислительной геометрии (Антон Ковалев,

Вычисление предиката TurnИнтервальная арифметика

Утверждение

Если интервал v = (b − a)× (c − a) не содержит 0, знак v вычисленточно.

ЗамечаниеПереключать режим округления процессора дорого.[alo ; ahi ] = −[−ahi ;−alo ].

Эффективная реализация есть, например, в boost/interval.

Что делать, если интервал v содержит 0?

А. Ковалев (Транзас, ИТМО) Exact geometric computation октябрь 2011 12 / 27

Page 36: Computer Science семинар, осень 2011: Устойчивая реализация алгоритмов вычислительной геометрии (Антон Ковалев,

Вычисление предиката TurnИнтервальная арифметика

Утверждение

Если интервал v = (b − a)× (c − a) не содержит 0, знак v вычисленточно.

ЗамечаниеПереключать режим округления процессора дорого.[alo ; ahi ] = −[−ahi ;−alo ].

Эффективная реализация есть, например, в boost/interval.Что делать, если интервал v содержит 0?

А. Ковалев (Транзас, ИТМО) Exact geometric computation октябрь 2011 12 / 27

Page 37: Computer Science семинар, осень 2011: Устойчивая реализация алгоритмов вычислительной геометрии (Антон Ковалев,

Вычисление предиката TurnРациональная арифметика

ОпределениеРациональная арифметика: число представляется в видерациональной дроби с длинным числителем и длинным знаменателем.

ЗамечаниеНедостатки:

даже эффективные реализации сложны и медленны;требует или сложной разработки, или добавления еще однойзависимости (gmp, например).

А. Ковалев (Транзас, ИТМО) Exact geometric computation октябрь 2011 13 / 27

Page 38: Computer Science семинар, осень 2011: Устойчивая реализация алгоритмов вычислительной геометрии (Антон Ковалев,

Вычисление предиката TurnРациональная арифметика

ОпределениеРациональная арифметика: число представляется в видерациональной дроби с длинным числителем и длинным знаменателем.

ЗамечаниеНедостатки:

даже эффективные реализации сложны и медленны;требует или сложной разработки, или добавления еще однойзависимости (gmp, например).

А. Ковалев (Транзас, ИТМО) Exact geometric computation октябрь 2011 13 / 27

Page 39: Computer Science семинар, осень 2011: Устойчивая реализация алгоритмов вычислительной геометрии (Антон Ковалев,

Вычисление предиката TurnAdaptive precision floating-point arithmetic

Идея∀a, b ∈ D ∃c ∈ D :

a + b = a ⊕ b + c , |c | ≤ 12ulp (a ⊕ b)

ab = a ⊗ b + c , |c | ≤ 12ulp (a ⊗ b)

∀b = f (a1, a2, . . . , an)ai∈D ∃{cj} :

cj ∈ D|cj | ≤ 1

2ulp(cj+1) ,

b =∑

cj

где f — это арифметическое выражение с операциями +, − и ×.

А. Ковалев (Транзас, ИТМО) Exact geometric computation октябрь 2011 14 / 27

Page 40: Computer Science семинар, осень 2011: Устойчивая реализация алгоритмов вычислительной геометрии (Антон Ковалев,

Вычисление предиката TurnAdaptive precision floating-point arithmetic

Идея∀a, b ∈ D ∃c ∈ D :

a + b = a ⊕ b + c , |c | ≤ 12ulp (a ⊕ b)

ab = a ⊗ b + c , |c | ≤ 12ulp (a ⊗ b)

∀b = f (a1, a2, . . . , an)ai∈D ∃{cj} :

cj ∈ D|cj | ≤ 1

2ulp(cj+1) ,

b =∑

cj

где f — это арифметическое выражение с операциями +, − и ×.

А. Ковалев (Транзас, ИТМО) Exact geometric computation октябрь 2011 14 / 27

Page 41: Computer Science семинар, осень 2011: Устойчивая реализация алгоритмов вычислительной геометрии (Антон Ковалев,

Вычисление предиката TurnAdaptive precision floating-point arithmetic

Идея∀a, b ∈ D ∃c ∈ D :

a + b = a ⊕ b + c , |c | ≤ 12ulp (a ⊕ b)

ab = a ⊗ b + c , |c | ≤ 12ulp (a ⊗ b)

∀b = f (a1, a2, . . . , an)ai∈D ∃{cj} :

cj ∈ D|cj | ≤ 1

2ulp(cj+1) ,

b =∑

cj

где f — это арифметическое выражение с операциями +, − и ×.

А. Ковалев (Транзас, ИТМО) Exact geometric computation октябрь 2011 14 / 27

Page 42: Computer Science семинар, осень 2011: Устойчивая реализация алгоритмов вычислительной геометрии (Антон Ковалев,

Вычисление предиката TurnAdaptive precision floating-point arithmetic

double sum( double a , double b, double & roundo f f )

{double r e s = a + b ;double bv = r e s − a ;double av = r e s − bv ;double br = b − bv ;double a r = a − av ;r o undo f f = ar + br ;return r e s ;

}

А. Ковалев (Транзас, ИТМО) Exact geometric computation октябрь 2011 15 / 27

Page 43: Computer Science семинар, осень 2011: Устойчивая реализация алгоритмов вычислительной геометрии (Антон Ковалев,

Вычисление предиката TurnAdaptive precision floating-point arithmetic

double mul ( double a , double b , double & roundo f f ){

double r e s = a ∗ b ;s i z e_t s = s td : : numer i c_ l im i t s <double >:: d i g i t s / 2

+ s td : : numer i c_ l im i t s <double >:: d i g i t s % 2 ;

double a_hi , a_lo , b_hi , b_lo ;imp l : : s p l i t ( a , s , a_hi , a_lo ) ;imp l : : s p l i t ( b , s , b_hi , b_lo ) ;

double e1 = r e s − ( a_hi ∗ b_hi ) ;double e2 = e1 − ( a_lo ∗ b_hi ) ;double e3 = e2 − ( b_lo ∗ a_hi ) ;

r o undo f f = ( a_lo ∗ b_lo ) − e3 ;return r e s ;

}

А. Ковалев (Транзас, ИТМО) Exact geometric computation октябрь 2011 16 / 27

Page 44: Computer Science семинар, осень 2011: Устойчивая реализация алгоритмов вычислительной геометрии (Антон Ковалев,

Вычисление предиката TurnAdaptive precision floating-point arithmetic

void s p l i t ( double a , s i z e_t s, double & hi , double & l o )

{double c = ((1 LL << s ) + 1LL ) ∗ a ;double ab = c − a ;h i = c − ab ;l o = a − h i ;

}

А. Ковалев (Транзас, ИТМО) Exact geometric computation октябрь 2011 17 / 27

Page 45: Computer Science семинар, осень 2011: Устойчивая реализация алгоритмов вычислительной геометрии (Антон Ковалев,

Вычисление предиката TurnAdaptive precision floating-point arithmetic

template <s i z e_t N> s t ruc t grow_expansion_f{

s t a t i c void c a l c ( double const ∗ e , double b, double ∗ r )

{b = sum(∗ e , b , ∗ r ) ;grow_expansion_f<N − 1 >:: c a l c ( e + 1 , b , r + 1 ) ;

}} ;

template <> s t ruc t grow_expansion_f<0>{

s t a t i c void c a l c ( double const ∗ e , double b, double ∗ r )

{ ∗ r = b ; }} ;

А. Ковалев (Транзас, ИТМО) Exact geometric computation октябрь 2011 18 / 27

Page 46: Computer Science семинар, осень 2011: Устойчивая реализация алгоритмов вычислительной геометрии (Антон Ковалев,

Вычисление предиката TurnAdaptive precision floating-point arithmetic

template <s i z e_t N1 , s i z e_t N2> s t ruc t expand_sum_f{

s t a t i c void c a l c ( double const ∗ e , double const ∗ f, double ∗ r )

{grow_expansion<N1>(e , ∗ f , r ) ;expand_sum_f<N1 , N2 − 1 >:: c a l c ( r + 1

, f + 1 , r + 1 ) ;}

} ;

template <s i z e_t N1> s t ruc t expand_sum_f<N1 , 0>{

s t a t i c void c a l c ( double const ∗ e , double const ∗ f, double ∗ r ) {}

} ;

А. Ковалев (Транзас, ИТМО) Exact geometric computation октябрь 2011 19 / 27

Page 47: Computer Science семинар, осень 2011: Устойчивая реализация алгоритмов вычислительной геометрии (Антон Ковалев,

Вычисление предиката TurnAdaptive precision floating-point arithmetic

double sa [ 1 2 ] ;sa [ 1 ] = mul ( b . x , c . y , sa [ 0 ] ) ;. . .sa [ 1 1 ] = mul ( b . y , a . x , sa [ 1 0 ] ) ;

double sb [ 1 2 ] ;expand_sum<2, 2>( sa + 0 , sa + 2 , sb ) ;expand_sum<2, 2>( sa + 4 , sa + 6 , sb + 4 ) ;expand_sum<2, 2>( sa + 8 , sa + 10 , sb + 8 ) ;

double sc [ 8 ] ;expand_sum<4, 4>(sb , sb + 4 , sc ) ;

double sd [ 1 2 ] ;expand_sum<8, 4>(sc , sb + 8 , sd ) ;

return s i gn <12>(sd ) ;

А. Ковалев (Транзас, ИТМО) Exact geometric computation октябрь 2011 20 / 27

Page 48: Computer Science семинар, осень 2011: Устойчивая реализация алгоритмов вычислительной геометрии (Антон Ковалев,

Фильтрованное вычисление предиката

Эффективное и точное решение:числа с плавающей точкой;

интервальная арифметика;рациональная или адаптивная арифметика, ESSA, etc.

ЗамечаниеБольшинство предикатов в вычислительной геометрии сводятся к signот элементарного арифметического выражения.

А. Ковалев (Транзас, ИТМО) Exact geometric computation октябрь 2011 21 / 27

Page 49: Computer Science семинар, осень 2011: Устойчивая реализация алгоритмов вычислительной геометрии (Антон Ковалев,

Фильтрованное вычисление предиката

Эффективное и точное решение:числа с плавающей точкой;интервальная арифметика;

рациональная или адаптивная арифметика, ESSA, etc.

ЗамечаниеБольшинство предикатов в вычислительной геометрии сводятся к signот элементарного арифметического выражения.

А. Ковалев (Транзас, ИТМО) Exact geometric computation октябрь 2011 21 / 27

Page 50: Computer Science семинар, осень 2011: Устойчивая реализация алгоритмов вычислительной геометрии (Антон Ковалев,

Фильтрованное вычисление предиката

Эффективное и точное решение:числа с плавающей точкой;интервальная арифметика;рациональная или адаптивная арифметика, ESSA, etc.

ЗамечаниеБольшинство предикатов в вычислительной геометрии сводятся к signот элементарного арифметического выражения.

А. Ковалев (Транзас, ИТМО) Exact geometric computation октябрь 2011 21 / 27

Page 51: Computer Science семинар, осень 2011: Устойчивая реализация алгоритмов вычислительной геометрии (Антон Ковалев,

Фильтрованное вычисление предиката

Эффективное и точное решение:числа с плавающей точкой;интервальная арифметика;рациональная или адаптивная арифметика, ESSA, etc.

ЗамечаниеБольшинство предикатов в вычислительной геометрии сводятся к signот элементарного арифметического выражения.

А. Ковалев (Транзас, ИТМО) Exact geometric computation октябрь 2011 21 / 27

Page 52: Computer Science семинар, осень 2011: Устойчивая реализация алгоритмов вычислительной геометрии (Антон Ковалев,

Алгоритм Бентли-Оттмана

S = {s} – множество отрезков, n = ‖S‖. Требуется найти множествоR = {ri}, где ri = {si ,k} множество всех отрезков, проходящих черезнекоторую точку qi .

Идея: заметающая прямая, O((n + k) log n) (k – число пересечений).

s1

s2

s3

s1 s1s3 s1s2s3 s2s1s3 s2s3s1 s3s2s1 s3s1 s3

А. Ковалев (Транзас, ИТМО) Exact geometric computation октябрь 2011 22 / 27

Page 53: Computer Science семинар, осень 2011: Устойчивая реализация алгоритмов вычислительной геометрии (Антон Ковалев,

Алгоритм Бентли-Оттмана

S = {s} – множество отрезков, n = ‖S‖. Требуется найти множествоR = {ri}, где ri = {si ,k} множество всех отрезков, проходящих черезнекоторую точку qi .Идея: заметающая прямая, O((n + k) log n) (k – число пересечений).

s1

s2

s3

s1 s1s3 s1s2s3 s2s1s3 s2s3s1 s3s2s1 s3s1 s3

А. Ковалев (Транзас, ИТМО) Exact geometric computation октябрь 2011 22 / 27

Page 54: Computer Science семинар, осень 2011: Устойчивая реализация алгоритмов вычислительной геометрии (Антон Ковалев,

Алгоритм Бентли-Оттмана

Все хорошо?

Вот, что будет, если добавлять в очередь событийкоординаты точек пересечений отрезков:

s1

s2

s3

А. Ковалев (Транзас, ИТМО) Exact geometric computation октябрь 2011 23 / 27

Page 55: Computer Science семинар, осень 2011: Устойчивая реализация алгоритмов вычислительной геометрии (Антон Ковалев,

Алгоритм Бентли-Оттмана

Все хорошо? Вот, что будет, если добавлять в очередь событийкоординаты точек пересечений отрезков:

s1

s2

s3

А. Ковалев (Транзас, ИТМО) Exact geometric computation октябрь 2011 23 / 27

Page 56: Computer Science семинар, осень 2011: Устойчивая реализация алгоритмов вычислительной геометрии (Антон Ковалев,

Алгоритм Бентли-Оттмана

А нужны ли сами точки пересечений?

Необходимо поддерживатькорректный порядок событий:

e1 < e2 ⇔

[e1,x < e2,x

e1,x = e2,x ∧ e1,y < e2,y

Найдем точку пересечения q двух непараллельных отрезков a1b1 иa2b2:(a1,y − b1,y b1,x − a1,xa2,y − b2,y b2,x − a2,x

)(xy

)=

((a1,y − b1,y )a1,x + (b1,x − a1,x)a1,y(a2,y − b2,y )a2,x + (b2,x − a2,x)a2,y

)

(xy

)=

(b2,x − a2,x a1,x − b1,xb2,y − a2,y a1,y − b1,y

)(b1,xa1,y − b1,ya1,xb2,xa2,y − b2,ya2,x

)∣∣∣∣a1,y − b1,y b1,x − a1,xa2,y − b2,y b2,x − a2,x

∣∣∣∣

А. Ковалев (Транзас, ИТМО) Exact geometric computation октябрь 2011 24 / 27

Page 57: Computer Science семинар, осень 2011: Устойчивая реализация алгоритмов вычислительной геометрии (Антон Ковалев,

Алгоритм Бентли-Оттмана

А нужны ли сами точки пересечений? Необходимо поддерживатькорректный порядок событий:

e1 < e2 ⇔

[e1,x < e2,x

e1,x = e2,x ∧ e1,y < e2,y

Найдем точку пересечения q двух непараллельных отрезков a1b1 иa2b2:(a1,y − b1,y b1,x − a1,xa2,y − b2,y b2,x − a2,x

)(xy

)=

((a1,y − b1,y )a1,x + (b1,x − a1,x)a1,y(a2,y − b2,y )a2,x + (b2,x − a2,x)a2,y

)

(xy

)=

(b2,x − a2,x a1,x − b1,xb2,y − a2,y a1,y − b1,y

)(b1,xa1,y − b1,ya1,xb2,xa2,y − b2,ya2,x

)∣∣∣∣a1,y − b1,y b1,x − a1,xa2,y − b2,y b2,x − a2,x

∣∣∣∣

А. Ковалев (Транзас, ИТМО) Exact geometric computation октябрь 2011 24 / 27

Page 58: Computer Science семинар, осень 2011: Устойчивая реализация алгоритмов вычислительной геометрии (Антон Ковалев,

Алгоритм Бентли-Оттмана

А нужны ли сами точки пересечений? Необходимо поддерживатькорректный порядок событий:

e1 < e2 ⇔

[e1,x < e2,x

e1,x = e2,x ∧ e1,y < e2,y

Найдем точку пересечения q двух непараллельных отрезков a1b1 иa2b2:(a1,y − b1,y b1,x − a1,xa2,y − b2,y b2,x − a2,x

)(xy

)=

((a1,y − b1,y )a1,x + (b1,x − a1,x)a1,y(a2,y − b2,y )a2,x + (b2,x − a2,x)a2,y

)

(xy

)=

(b2,x − a2,x a1,x − b1,xb2,y − a2,y a1,y − b1,y

)(b1,xa1,y − b1,ya1,xb2,xa2,y − b2,ya2,x

)∣∣∣∣a1,y − b1,y b1,x − a1,xa2,y − b2,y b2,x − a2,x

∣∣∣∣

А. Ковалев (Транзас, ИТМО) Exact geometric computation октябрь 2011 24 / 27

Page 59: Computer Science семинар, осень 2011: Устойчивая реализация алгоритмов вычислительной геометрии (Антон Ковалев,

Алгоритм Бентли-Оттмана

А нужны ли сами точки пересечений? Необходимо поддерживатькорректный порядок событий:

e1 < e2 ⇔

[e1,x < e2,x

e1,x = e2,x ∧ e1,y < e2,y

Найдем точку пересечения q двух непараллельных отрезков a1b1 иa2b2:(a1,y − b1,y b1,x − a1,xa2,y − b2,y b2,x − a2,x

)(xy

)=

((a1,y − b1,y )a1,x + (b1,x − a1,x)a1,y(a2,y − b2,y )a2,x + (b2,x − a2,x)a2,y

)

(xy

)=

(b2,x − a2,x a1,x − b1,xb2,y − a2,y a1,y − b1,y

)(b1,xa1,y − b1,ya1,xb2,xa2,y − b2,ya2,x

)∣∣∣∣a1,y − b1,y b1,x − a1,xa2,y − b2,y b2,x − a2,x

∣∣∣∣А. Ковалев (Транзас, ИТМО) Exact geometric computation октябрь 2011 24 / 27

Page 60: Computer Science семинар, осень 2011: Устойчивая реализация алгоритмов вычислительной геометрии (Антон Ковалев,

Алгоритм Бентли-Оттмана

Таким образом:можно тем же способом эффективно сравнивать все возможныесобытия (начала и концы отрезков и точки пересечений отрезков);

с помощью Turn можно эффективно локализовать точку придобавлении начала отрезка в статус.

А. Ковалев (Транзас, ИТМО) Exact geometric computation октябрь 2011 25 / 27

Page 61: Computer Science семинар, осень 2011: Устойчивая реализация алгоритмов вычислительной геометрии (Антон Ковалев,

Алгоритм Бентли-Оттмана

Таким образом:можно тем же способом эффективно сравнивать все возможныесобытия (начала и концы отрезков и точки пересечений отрезков);с помощью Turn можно эффективно локализовать точку придобавлении начала отрезка в статус.

А. Ковалев (Транзас, ИТМО) Exact geometric computation октябрь 2011 25 / 27

Page 62: Computer Science семинар, осень 2011: Устойчивая реализация алгоритмов вычислительной геометрии (Антон Ковалев,

Ссылки

D. Goldberg.What every computer scientist should know about floating-pointarithmetic.ACM Comput. Surv., March, 1991.

J. Shewchuk.Adaptive precision floating-point arithmetic and fast robust geometricpredicates.Discrete & Computational Geometry, 1996

Chee K. Yap.Robust Geometric Computation.Handbook of Discrete and Computational Geometry, 2004

А. Ковалев (Транзас, ИТМО) Exact geometric computation октябрь 2011 26 / 27

Page 63: Computer Science семинар, осень 2011: Устойчивая реализация алгоритмов вычислительной геометрии (Антон Ковалев,

Спасибо за внимание!

А. Ковалев (Транзас, ИТМО) Exact geometric computation октябрь 2011 27 / 27