SlideShare a Scribd company logo
1 of 63
Download to read offline
Устойчивая реализация алгоритмов вычислительной
                     геометрии

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

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


                                  октябрь 2011




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


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




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


Реализация алгоритмов вычислительной геометрии зачастую очень
сложна, так как:
     сложен сам алгоритм (например, incremental segment Voronoi
     diagram);




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


Реализация алгоритмов вычислительной геометрии зачастую очень
сложна, так как:
     сложен сам алгоритм (например, incremental segment Voronoi
     diagram);
     в описании алгоритма опущены вырожденные случаи (например,
     Bentley-Ottmann);




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


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




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


Реализация алгоритмов вычислительной геометрии зачастую очень
сложна, так как:
     сложен сам алгоритм (например, incremental segment Voronoi
     diagram);
     в описании алгоритма опущены вырожденные случаи (например,
     Bentley-Ottmann);
     вычисления с плавающей точкой дают погрешность, что приводит
     к нарушению инвариантов алгоритма.
Рассмотрим один из способов справиться с последней проблемой:
фильтрованное вычисление предикатов.




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




Определение
Отрезок s задается начальной и конечной точками a, b ∈ R2 и
определяется как множество точек s = (1 − t)a + tb, t ∈ [0; 1] .




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




Определение
Отрезок s задается начальной и конечной точками a, b ∈ R2 и
определяется как множество точек s = (1 − t)a + tb, t ∈ [0; 1] .

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




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


Определение
            
            1
               точка c лежит слева от направленного отрезка s,
Turn(s, c) = −1 точка c лежит справа от направленного отрезка s,
            
             0  s и c коллинеарны.
            




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


Определение
            
            1
               точка c лежит слева от направленного отрезка s,
Turn(s, c) = −1 точка c лежит справа от направленного отрезка s,
            
             0  s и c коллинеарны.
            


Утверждение
         
         Turn(s1 , s2,a ) · Turn(s1 , s2,b ) ≤ 0
         
s1 s2 ⇐⇒ Turn(s2 , s1,a ) · Turn(s2 , s1,b ) ≤ 0 ,
         
           AABB(s1 ) AABB(s2 ) = ∅
         
где AABB это axis-aligned bounding box.



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


Утверждение

                                                           sb,x − sa,x   cx − sa,x
 Turn(s, c) = sign (sb − sa ) × (c − sa ) = sign
                                                           sb,y − sa,y   cy − sa,y




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


Утверждение

                                                           sb,x − sa,x   cx − sa,x
 Turn(s, c) = sign (sb − sa ) × (c − sa ) = sign
                                                           sb,y − sa,y   cy − sa,y

Проблема?




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


Утверждение

                                                           sb,x − sa,x   cx − sa,x
 Turn(s, c) = sign (sb − sa ) × (c − sa ) = sign
                                                           sb,y − sa,y   cy − sa,y

Проблема? Вычисления с плавающей точкой:
    point_2 a ( 3 . 0 , 5 . 0 ) ;
    point_2 b = −a ;
    point_2 c = a ∗ ( 1 LL << 5 2 ) ;

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




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




 Вычисление поворота от отрезка и точки плоскости: красный цвет
    левый поворот, синий правый, зеленый точка и отрезок
                    принадлежат одной прямой.

А. Ковалев (Транзас, ИТМО)   Exact geometric computation   октябрь 2011   6 / 27
Вычисление предиката Turn
Числа с плавающей точкой

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




А. Ковалев (Транзас, ИТМО)     Exact geometric computation   октябрь 2011   7 / 27
Вычисление предиката Turn
Числа с плавающей точкой

Двоичное число с плавающей точкой:
a = ±1.a1 a2 a3 . . . ap−1 × 2γ , ai ∈ {0, 1}.
Определение
ulp(a) = 2−p+1+γ




А. Ковалев (Транзас, ИТМО)     Exact geometric computation   октябрь 2011   7 / 27
Вычисление предиката Turn
Числа с плавающей точкой

Двоичное число с плавающей точкой:
a = ±1.a1 a2 a3 . . . ap−1 × 2γ , ai ∈ {0, 1}.
Определение
ulp(a) = 2−p+1+γ

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




А. Ковалев (Транзас, ИТМО)     Exact geometric computation   октябрь 2011   7 / 27
Вычисление предиката Turn
Числа с плавающей точкой

Двоичное число с плавающей точкой:
a = ±1.a1 a2 a3 . . . 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 + δ), |δ| ≤ ε




А. Ковалев (Транзас, ИТМО)     Exact geometric computation   октябрь 2011   7 / 27
Вычисление предиката Turn
Числа с плавающей точкой

Двоичное число с плавающей точкой:
a = ±1.a1 a2 a3 . . . 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 ∈ D 2 , v = (bx ax ) ⊗ (cy ay ) (by
                 ˜                                           ay ) ⊗ (cx      ax )
            v > ˜ ⇒ (b − a) × (c − a) > 0
            ˜
∃˜ ∈ D :
            v < −˜ ⇒ (b − a) × (c − a) < 0
            ˜
А. Ковалев (Транзас, ИТМО)     Exact geometric computation                октябрь 2011   7 / 27
Вычисление предиката Turn
Расчет ˜




           v                                             v
                                                         ˜

 (b − a) × (c − a) ≈ (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 ),




 А. Ковалев (Транзас, ИТМО)      Exact geometric computation              октябрь 2011   8 / 27
Вычисление предиката Turn
Расчет ˜




             v                                           v
                                                         ˜

 (b − a) × (c − a) ≈ (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 | ≤ ε;




 А. Ковалев (Транзас, ИТМО)      Exact geometric computation              октябрь 2011   8 / 27
Вычисление предиката Turn
Расчет ˜




             v                                            v
                                                          ˜

 (b − a) × (c − a) ≈ (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 | ≤ ε;

                                                      e

             = |v − v | ≤ |(bx − ax )(cy − ay )| + |(by − ay )(cx − ax )| ×
                    ˜
                       × (4ε + 6ε2 + 4ε3 + ε4 )



 А. Ковалев (Транзас, ИТМО)      Exact geometric computation               октябрь 2011   8 / 27
Вычисление предиката Turn
Расчет ˜




             v                                            v
                                                          ˜

 (b − a) × (c − a) ≈ (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 | ≤ ε;

                                                      e

             = |v − v | ≤ |(bx − ax )(cy − ay )| + |(by − ay )(cx − ax )| ×
                    ˜
                       × (4ε + 6ε2 + 4ε3 + ε4 )

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

 А. Ковалев (Транзас, ИТМО)      Exact geometric computation               октябрь 2011   8 / 27
Вычисление предиката Turn
Расчет ˜




                                 e

           |(bx − ax )(cy − ay )| + |(by − ay )(cx − ax )| (1 − ε)4 ≤
                                                      e
                                                      ˜

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




 А. Ковалев (Транзас, ИТМО)     Exact geometric computation           октябрь 2011   9 / 27
Вычисление предиката Turn
Расчет ˜




                                 e

           |(bx − ax )(cy − ay )| + |(by − ay )(cx − ax )| (1 − ε)4 ≤
                                                       e
                                                       ˜

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

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




 А. Ковалев (Транзас, ИТМО)      Exact geometric computation           октябрь 2011   9 / 27
Вычисление предиката Turn
Расчет ˜




                                 e

           |(bx − ax )(cy − ay )| + |(by − ay )(cx − ax )| (1 − ε)4 ≤
                                                       e
                                                       ˜

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

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

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




 А. Ковалев (Транзас, ИТМО)      Exact geometric computation           октябрь 2011   9 / 27
Вычисление предиката Turn
Расчет ˜




                                 e

           |(bx − ax )(cy − ay )| + |(by − ay )(cx − ax )| (1 − ε)4 ≤
                                                       e
                                                       ˜

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

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

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


                                         ˜ < 8ε˜
                                               e

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




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




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




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

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




А. Ковалев (Транзас, ИТМО)   Exact geometric computation   октябрь 2011   10 / 27
Вычисление предиката Turn
Интервальная арифметика


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

        a ∈ [alo , ahi ];
                                                                   

     a·b ∈         min          a   b   ;      max           a   b ,
                                                                   
                a ∈[alo ;ahi ]               a ∈[alo ;ahi ]
                b ∈[blo ;bhi ]               b ∈[blo ;bhi ]

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

Замечание
sqr ([alo , ahi ]) =?
Вычисление предиката Turn
Интервальная арифметика


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

        a ∈ [alo , ahi ];
                                                                   

     a·b ∈         min          a   b   ;      max           a   b ,
                                                                   
                a ∈[alo ;ahi ]               a ∈[alo ;ahi ]
                b ∈[blo ;bhi ]               b ∈[blo ;bhi ]

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

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

А. Ковалев (Транзас, ИТМО)           Exact geometric computation         октябрь 2011   11 / 27
Вычисление предиката Turn
Интервальная арифметика




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




А. Ковалев (Транзас, ИТМО)   Exact geometric computation   октябрь 2011   12 / 27
Вычисление предиката Turn
Интервальная арифметика




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

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




А. Ковалев (Транзас, ИТМО)   Exact geometric computation   октябрь 2011   12 / 27
Вычисление предиката Turn
Интервальная арифметика




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

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




А. Ковалев (Транзас, ИТМО)   Exact geometric computation   октябрь 2011   12 / 27
Вычисление предиката Turn
Интервальная арифметика




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

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

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




А. Ковалев (Транзас, ИТМО)   Exact geometric computation   октябрь 2011   12 / 27
Вычисление предиката Turn
Интервальная арифметика




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

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

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




А. Ковалев (Транзас, ИТМО)   Exact geometric computation   октябрь 2011   12 / 27
Вычисление предиката Turn
Рациональная арифметика




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




А. Ковалев (Транзас, ИТМО)   Exact geometric computation   октябрь 2011   13 / 27
Вычисление предиката Turn
Рациональная арифметика




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

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




А. Ковалев (Транзас, ИТМО)   Exact geometric computation   октябрь 2011   13 / 27
Вычисление предиката Turn
Adaptive precision floating-point arithmetic




Идея
∀a, b ∈ D ∃c ∈ D :
                               1
      a + b = a ⊕ b + c, |c| ≤ 2 ulp (a ⊕ b)




 А. Ковалев (Транзас, ИТМО)      Exact geometric computation   октябрь 2011   14 / 27
Вычисление предиката Turn
Adaptive precision floating-point arithmetic




Идея
∀a, b ∈ D ∃c ∈ D :
                               1
      a + b = a ⊕ b + c, |c| ≤ 2 ulp (a ⊕ b)
                            1
      ab = a ⊗ b + c, |c| ≤ 2 ulp (a ⊗ b)




 А. Ковалев (Транзас, ИТМО)      Exact geometric computation   октябрь 2011   14 / 27
Вычисление предиката Turn
Adaptive precision floating-point arithmetic




Идея
∀a, b ∈ D ∃c ∈ D :
                                 1
        a + b = a ⊕ b + c, |c| ≤ 2 ulp (a ⊕ b)
                              1
        ab = a ⊗ b + c, |c| ≤ 2 ulp (a ⊗ b)
                                                          
                                                          cj ∈ D
                                                          
            ∀b = f (a1 , a2 , . . . , an )ai ∈D                    1
                                                  ∃{cj } : |cj | ≤ 2 ulp(cj+1 ) ,
                                                          
                                                           b = cj
                                                          

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




 А. Ковалев (Транзас, ИТМО)          Exact geometric computation           октябрь 2011   14 / 27
Вычисление предиката Turn
Adaptive precision floating-point arithmetic




     double sum ( double a , double b
               , double & r o u n d o f f )
     {
        double r e s = a + b ;
        double bv = r e s − a ;
        double av = r e s − bv ;
        double b r = b − bv ;
        double a r = a − av ;
        roundoff       = ar + br ;
        return r e s ;
     }




 А. Ковалев (Транзас, ИТМО)      Exact geometric computation   октябрь 2011   15 / 27
Вычисление предиката Turn
Adaptive precision floating-point arithmetic

     double mul ( double a , double b , double & r o u n d o f f )
     {
        double r e s = a ∗ b ;
        s i z e _ t s = s t d : : n u m e r i c _ l i m i t s <double > : : d i g i t s / 2
                      + s t d : : n u m e r i c _ l i m i t s <double > : : d i g i t s % 2 ;

          double a_hi , a_lo , b_hi , b_lo ;
          i m p l : : s p l i t ( a , s , a_hi , a_lo ) ;
          i m p 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 u n d o f f = ( a_lo ∗ b_lo ) − e3 ;
          return r e s ;
     }

 А. Ковалев (Транзас, ИТМО)       Exact geometric computation            октябрь 2011   16 / 27
Вычисление предиката Turn
Adaptive precision floating-point arithmetic




     v o i d s p l i t ( double a , s i z e _ t s
                      , double & h i , double & l o )
     {
           double c = ( ( 1 LL << s ) + 1LL ) ∗ a ;
           double ab = c − a ;
           h i = c − ab ;
           lo = a − hi ;
     }




 А. Ковалев (Транзас, ИТМО)      Exact geometric computation   октябрь 2011   17 / 27
Вычисление предиката Turn
Adaptive precision floating-point arithmetic


     template <s i z e _ t N> s t r u c t        grow_expansion_f
     {
        s t a t i c v o i d 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 r u c t grow_expansion_f <0>
     {
        s t a t i c v o i d c a l c ( double const ∗ e , double b
                                  , double ∗ r )
        { ∗r = b; }
     };

 А. Ковалев (Транзас, ИТМО)      Exact geometric computation          октябрь 2011   18 / 27
Вычисление предиката Turn
Adaptive precision floating-point arithmetic


     template <s i z e _ t N1 , s i z e _ t N2> s t r u c t expand_sum_f
     {
        s t a t i c v o i d 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 r u c t expand_sum_f<N1 , 0>
     {
        s t a t i c v o i d c a l c ( double const ∗ e , double const ∗ f
                                  , double ∗ r ) {}
     };

 А. Ковалев (Транзас, ИТМО)      Exact geometric computation   октябрь 2011   19 / 27
Вычисление предиката Turn
Adaptive precision floating-point arithmetic

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

     double s b [ 1 2 ] ;
     expand_sum <2, 2>( s a + 0 , s a + 2 , s b ) ;
     expand_sum <2, 2>( s a + 4 , s a + 6 , s b + 4 ) ;
     expand_sum <2, 2>( s a + 8 , s a + 1 0 , s b + 8 ) ;

     double s c [ 8 ] ;
     expand_sum <4, 4>( sb , s b + 4 , s c ) ;

     double s d [ 1 2 ] ;
     expand_sum <8, 4>( sc , s b + 8 , s d ) ;

     r e t u r n s i g n <12>( s d ) ;

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



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




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



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




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



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




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



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

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




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

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




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

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


        s3

               s2
s1



  s1     s1 s3 s1 s2 s3      s2 s1 s3       s2 s3 s1                  s3 s2 s1         s3 s1 s3


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


Все хорошо?




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


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


        s3

               s2
s1




А. Ковалев (Транзас, ИТМО)   Exact geometric computation   октябрь 2011   23 / 27
Алгоритм Бентли-Оттмана
А нужны ли сами точки пересечений?




А. Ковалев (Транзас, ИТМО)   Exact geometric computation   октябрь 2011   24 / 27
Алгоритм Бентли-Оттмана
А нужны ли сами точки пересечений? Необходимо поддерживать
корректный порядок событий:

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




А. Ковалев (Транзас, ИТМО)    Exact geometric computation            октябрь 2011   24 / 27
Алгоритм Бентли-Оттмана
А нужны ли сами точки пересечений? Необходимо поддерживать
корректный порядок событий:

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

Найдем точку пересечения q двух непараллельных отрезков a1 b1 и
a2 b2 :

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




А. Ковалев (Транзас, ИТМО)      Exact geometric computation            октябрь 2011   24 / 27
Алгоритм Бентли-Оттмана
А нужны ли сами точки пересечений? Необходимо поддерживать
корректный порядок событий:

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

Найдем точку пересечения q двух непараллельных отрезков a1 b1 и
a2 b2 :

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

                       b2,x − a2,x       a1,x − b1,x      b1,x a1,y − b1,y a1,x
            x          b2,y − a2,y       a1,y − b1,y      b2,x a2,y − b2,y a2,x
                 =
            y                        a1,y − b1,y       b1,x − a1,x
                                     a2,y − b2,y       b2,x − a2,x
А. Ковалев (Транзас, ИТМО)      Exact geometric computation              октябрь 2011   24 / 27
Алгоритм Бентли-Оттмана




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




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




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




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


    D. Goldberg.
    What every computer scientist should know about floating-point
    arithmetic.
    ACM Comput. Surv., March, 1991.
    J. Shewchuk.
    Adaptive precision floating-point arithmetic and fast robust geometric
    predicates.
    Discrete & Computational Geometry, 1996
    Chee K. Yap.
    Robust Geometric Computation.
    Handbook of Discrete and Computational Geometry, 2004



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




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

More Related Content

What's hot

Динамика твёрдого тела: случай Лагранжа
Динамика твёрдого тела: случай ЛагранжаДинамика твёрдого тела: случай Лагранжа
Динамика твёрдого тела: случай ЛагранжаTheoretical mechanics department
 
20130915 lecture1 2-tarski_matiyasevich
20130915 lecture1 2-tarski_matiyasevich20130915 lecture1 2-tarski_matiyasevich
20130915 lecture1 2-tarski_matiyasevichComputer Science Club
 
20110522 systems of typed lambda_calculi_moskvin_lecture11
20110522 systems of typed lambda_calculi_moskvin_lecture1120110522 systems of typed lambda_calculi_moskvin_lecture11
20110522 systems of typed lambda_calculi_moskvin_lecture11Computer Science Club
 
Основные принципы динамики твёрдого тела
Основные принципы динамики твёрдого телаОсновные принципы динамики твёрдого тела
Основные принципы динамики твёрдого телаTheoretical mechanics department
 
Уравнение прямой на плоскости
Уравнение прямой на плоскостиУравнение прямой на плоскости
Уравнение прямой на плоскостиNickEliot
 
20080323 efficientalgorithms kulikov_lecture19
20080323 efficientalgorithms kulikov_lecture1920080323 efficientalgorithms kulikov_lecture19
20080323 efficientalgorithms kulikov_lecture19Computer Science Club
 
Защита информации семинар №7
Защита информации семинар №7Защита информации семинар №7
Защита информации семинар №7Alexander Kolybelnikov
 
задания государственного экзамена по математике 15
задания государственного экзамена по математике 15задания государственного экзамена по математике 15
задания государственного экзамена по математике 15svetlana
 
Matemaatikaeksam
MatemaatikaeksamMatemaatikaeksam
Matemaatikaeksammarinmets
 
задания государственного экзамена по математике 15
задания государственного экзамена по математике 15задания государственного экзамена по математике 15
задания государственного экзамена по математике 15svetlana
 
Относительное орбитальное движение
Относительное орбитальное движениеОтносительное орбитальное движение
Относительное орбитальное движениеTheoretical mechanics department
 
скалярное произведение векторов
скалярное произведение векторовскалярное произведение векторов
скалярное произведение векторовgrin1964
 
лекция№27
лекция№27лекция№27
лекция№27student_kai
 
Fractal Geometry
Fractal GeometryFractal Geometry
Fractal GeometrySSA KPI
 
Перемещение при прямолинейном равноускоренном движении
Перемещение при прямолинейном равноускоренном движенииПеремещение при прямолинейном равноускоренном движении
Перемещение при прямолинейном равноускоренном движенииZinaida Alexandrova
 
Площадь криволинейной трапециии
Площадь криволинейной трапециииПлощадь криволинейной трапециии
Площадь криволинейной трапециииВлад Дегтярев
 

What's hot (20)

Динамика твёрдого тела: случай Лагранжа
Динамика твёрдого тела: случай ЛагранжаДинамика твёрдого тела: случай Лагранжа
Динамика твёрдого тела: случай Лагранжа
 
20130915 lecture1 2-tarski_matiyasevich
20130915 lecture1 2-tarski_matiyasevich20130915 lecture1 2-tarski_matiyasevich
20130915 lecture1 2-tarski_matiyasevich
 
Случай Эйлера
Случай ЭйлераСлучай Эйлера
Случай Эйлера
 
Метод Кейна
Метод КейнаМетод Кейна
Метод Кейна
 
20110522 systems of typed lambda_calculi_moskvin_lecture11
20110522 systems of typed lambda_calculi_moskvin_lecture1120110522 systems of typed lambda_calculi_moskvin_lecture11
20110522 systems of typed lambda_calculi_moskvin_lecture11
 
Основные принципы динамики твёрдого тела
Основные принципы динамики твёрдого телаОсновные принципы динамики твёрдого тела
Основные принципы динамики твёрдого тела
 
Уравнение прямой на плоскости
Уравнение прямой на плоскостиУравнение прямой на плоскости
Уравнение прямой на плоскости
 
20080323 efficientalgorithms kulikov_lecture19
20080323 efficientalgorithms kulikov_lecture1920080323 efficientalgorithms kulikov_lecture19
20080323 efficientalgorithms kulikov_lecture19
 
Защита информации семинар №7
Защита информации семинар №7Защита информации семинар №7
Защита информации семинар №7
 
задания государственного экзамена по математике 15
задания государственного экзамена по математике 15задания государственного экзамена по математике 15
задания государственного экзамена по математике 15
 
Matemaatikaeksam
MatemaatikaeksamMatemaatikaeksam
Matemaatikaeksam
 
Dejstviya s vektorami
Dejstviya s vektoramiDejstviya s vektorami
Dejstviya s vektorami
 
задания государственного экзамена по математике 15
задания государственного экзамена по математике 15задания государственного экзамена по математике 15
задания государственного экзамена по математике 15
 
Относительное орбитальное движение
Относительное орбитальное движениеОтносительное орбитальное движение
Относительное орбитальное движение
 
скалярное произведение векторов
скалярное произведение векторовскалярное произведение векторов
скалярное произведение векторов
 
лекция№27
лекция№27лекция№27
лекция№27
 
Fractal Geometry
Fractal GeometryFractal Geometry
Fractal Geometry
 
Перемещение при прямолинейном равноускоренном движении
Перемещение при прямолинейном равноускоренном движенииПеремещение при прямолинейном равноускоренном движении
Перемещение при прямолинейном равноускоренном движении
 
Площадь криволинейной трапециии
Площадь криволинейной трапециииПлощадь криволинейной трапециии
Площадь криволинейной трапециии
 
20131013 h10 lecture4_matiyasevich
20131013 h10 lecture4_matiyasevich20131013 h10 lecture4_matiyasevich
20131013 h10 lecture4_matiyasevich
 

Viewers also liked

20111202 machine learning_nikolenko_lecture02
20111202 machine learning_nikolenko_lecture0220111202 machine learning_nikolenko_lecture02
20111202 machine learning_nikolenko_lecture02Computer Science Club
 
20111030 computer graphics_galinsky_lecture07_3_dvisualization
20111030 computer graphics_galinsky_lecture07_3_dvisualization20111030 computer graphics_galinsky_lecture07_3_dvisualization
20111030 computer graphics_galinsky_lecture07_3_dvisualizationComputer Science Club
 
20111002 circuit complexity_seminar_lecture03_kulikov
20111002 circuit complexity_seminar_lecture03_kulikov20111002 circuit complexity_seminar_lecture03_kulikov
20111002 circuit complexity_seminar_lecture03_kulikovComputer Science Club
 
20111204 intro malware_livshits_lecture02
20111204 intro malware_livshits_lecture0220111204 intro malware_livshits_lecture02
20111204 intro malware_livshits_lecture02Computer Science Club
 
20110925 csseminar formal_grammars_complexity
20110925 csseminar formal_grammars_complexity20110925 csseminar formal_grammars_complexity
20110925 csseminar formal_grammars_complexityComputer Science Club
 
20111204 web security_livshits_lecture01
20111204 web security_livshits_lecture0120111204 web security_livshits_lecture01
20111204 web security_livshits_lecture01Computer Science Club
 
20111120 csseminar expert_forum_chabanovski
20111120 csseminar expert_forum_chabanovski20111120 csseminar expert_forum_chabanovski
20111120 csseminar expert_forum_chabanovskiComputer Science Club
 
20111202 machine learning_nikolenko_lecture07
20111202 machine learning_nikolenko_lecture0720111202 machine learning_nikolenko_lecture07
20111202 machine learning_nikolenko_lecture07Computer Science Club
 
20111030 csseminar machine_learning_kuralenok
20111030 csseminar machine_learning_kuralenok20111030 csseminar machine_learning_kuralenok
20111030 csseminar machine_learning_kuralenokComputer Science Club
 
20120413 videorecognition konushin_lecture02
20120413 videorecognition konushin_lecture0220120413 videorecognition konushin_lecture02
20120413 videorecognition konushin_lecture02Computer Science Club
 
20120218 model cheсking_karpov_lecture01
20120218 model cheсking_karpov_lecture0120120218 model cheсking_karpov_lecture01
20120218 model cheсking_karpov_lecture01Computer Science Club
 
20120218 model checking_karpov_lecture02
20120218 model checking_karpov_lecture0220120218 model checking_karpov_lecture02
20120218 model checking_karpov_lecture02Computer Science Club
 
20121006 algorithmsinbioinformatics vyahhi_lecture02
20121006 algorithmsinbioinformatics vyahhi_lecture0220121006 algorithmsinbioinformatics vyahhi_lecture02
20121006 algorithmsinbioinformatics vyahhi_lecture02Computer Science Club
 
20110925 circuit complexity_seminar_lecture01_kulikov
20110925 circuit complexity_seminar_lecture01_kulikov20110925 circuit complexity_seminar_lecture01_kulikov
20110925 circuit complexity_seminar_lecture01_kulikovComputer Science Club
 
20110925 computer graphics_galinsky_lecture03_color
20110925 computer graphics_galinsky_lecture03_color20110925 computer graphics_galinsky_lecture03_color
20110925 computer graphics_galinsky_lecture03_colorComputer Science Club
 
20110919 computer graphics_galinsky_lecture01_intro
20110919 computer graphics_galinsky_lecture01_intro20110919 computer graphics_galinsky_lecture01_intro
20110919 computer graphics_galinsky_lecture01_introComputer Science Club
 

Viewers also liked (19)

20110918 csseminar smal_privacy
20110918 csseminar smal_privacy20110918 csseminar smal_privacy
20110918 csseminar smal_privacy
 
20111202 machine learning_nikolenko_lecture02
20111202 machine learning_nikolenko_lecture0220111202 machine learning_nikolenko_lecture02
20111202 machine learning_nikolenko_lecture02
 
20111030 computer graphics_galinsky_lecture07_3_dvisualization
20111030 computer graphics_galinsky_lecture07_3_dvisualization20111030 computer graphics_galinsky_lecture07_3_dvisualization
20111030 computer graphics_galinsky_lecture07_3_dvisualization
 
20111002 circuit complexity_seminar_lecture03_kulikov
20111002 circuit complexity_seminar_lecture03_kulikov20111002 circuit complexity_seminar_lecture03_kulikov
20111002 circuit complexity_seminar_lecture03_kulikov
 
20111204 intro malware_livshits_lecture02
20111204 intro malware_livshits_lecture0220111204 intro malware_livshits_lecture02
20111204 intro malware_livshits_lecture02
 
20110925 csseminar formal_grammars_complexity
20110925 csseminar formal_grammars_complexity20110925 csseminar formal_grammars_complexity
20110925 csseminar formal_grammars_complexity
 
20111204 web security_livshits_lecture01
20111204 web security_livshits_lecture0120111204 web security_livshits_lecture01
20111204 web security_livshits_lecture01
 
20111120 csseminar expert_forum_chabanovski
20111120 csseminar expert_forum_chabanovski20111120 csseminar expert_forum_chabanovski
20111120 csseminar expert_forum_chabanovski
 
20111202 machine learning_nikolenko_lecture07
20111202 machine learning_nikolenko_lecture0720111202 machine learning_nikolenko_lecture07
20111202 machine learning_nikolenko_lecture07
 
20121021 bspapproach tiskin
20121021 bspapproach tiskin20121021 bspapproach tiskin
20121021 bspapproach tiskin
 
20111030 csseminar machine_learning_kuralenok
20111030 csseminar machine_learning_kuralenok20111030 csseminar machine_learning_kuralenok
20111030 csseminar machine_learning_kuralenok
 
20120408 text detection_vasilieva
20120408 text detection_vasilieva20120408 text detection_vasilieva
20120408 text detection_vasilieva
 
20120413 videorecognition konushin_lecture02
20120413 videorecognition konushin_lecture0220120413 videorecognition konushin_lecture02
20120413 videorecognition konushin_lecture02
 
20120218 model cheсking_karpov_lecture01
20120218 model cheсking_karpov_lecture0120120218 model cheсking_karpov_lecture01
20120218 model cheсking_karpov_lecture01
 
20120218 model checking_karpov_lecture02
20120218 model checking_karpov_lecture0220120218 model checking_karpov_lecture02
20120218 model checking_karpov_lecture02
 
20121006 algorithmsinbioinformatics vyahhi_lecture02
20121006 algorithmsinbioinformatics vyahhi_lecture0220121006 algorithmsinbioinformatics vyahhi_lecture02
20121006 algorithmsinbioinformatics vyahhi_lecture02
 
20110925 circuit complexity_seminar_lecture01_kulikov
20110925 circuit complexity_seminar_lecture01_kulikov20110925 circuit complexity_seminar_lecture01_kulikov
20110925 circuit complexity_seminar_lecture01_kulikov
 
20110925 computer graphics_galinsky_lecture03_color
20110925 computer graphics_galinsky_lecture03_color20110925 computer graphics_galinsky_lecture03_color
20110925 computer graphics_galinsky_lecture03_color
 
20110919 computer graphics_galinsky_lecture01_intro
20110919 computer graphics_galinsky_lecture01_intro20110919 computer graphics_galinsky_lecture01_intro
20110919 computer graphics_galinsky_lecture01_intro
 

Similar to 20111023 csseminar geometry_algorithms_implementation_kovalev

6 класс.правила раскрытия скобок
6 класс.правила раскрытия скобок6 класс.правила раскрытия скобок
6 класс.правила раскрытия скобокElekxa
 
Komplanarn vektor
Komplanarn vektorKomplanarn vektor
Komplanarn vektorgrin1964
 
Opredelennyj integral
Opredelennyj integralOpredelennyj integral
Opredelennyj integralDimon4
 
Skalirovanie proizvedenija vektorov
Skalirovanie proizvedenija vektorovSkalirovanie proizvedenija vektorov
Skalirovanie proizvedenija vektorovNarvatk
 
Методы численного интегрирования
Методы численного интегрированияМетоды численного интегрирования
Методы численного интегрированияTheoretical mechanics department
 
Линейная алгебра - I. Разбор задач
Линейная алгебра - I. Разбор задачЛинейная алгебра - I. Разбор задач
Линейная алгебра - I. Разбор задачDEVTYPE
 
презентация лекции по выпуклому анализу
презентация лекции по выпуклому анализупрезентация лекции по выпуклому анализу
презентация лекции по выпуклому анализуgthtcnhjqrf1952
 
Preobrazovaniya grafikov funkcij
Preobrazovaniya grafikov funkcijPreobrazovaniya grafikov funkcij
Preobrazovaniya grafikov funkcijDimon4
 
1742 повторяем математику за курс средней школы арефьева и.г-2015 -118с
1742  повторяем математику за курс средней школы арефьева и.г-2015 -118с1742  повторяем математику за курс средней школы арефьева и.г-2015 -118с
1742 повторяем математику за курс средней школы арефьева и.г-2015 -118сpsvayy
 
преобразование функций
преобразование функцийпреобразование функций
преобразование функцийnataliarudenko9
 
площади треугольника
площади треугольникаплощади треугольника
площади треугольникаgrin1964
 
Matemat526
Matemat526Matemat526
Matemat526tesla21
 
20111120 circuit complexity_seminar_lecture09_alexeenko
20111120 circuit complexity_seminar_lecture09_alexeenko20111120 circuit complexity_seminar_lecture09_alexeenko
20111120 circuit complexity_seminar_lecture09_alexeenkoComputer Science Club
 
Конкурс презентаций - Голичева
Конкурс презентаций - ГоличеваКонкурс презентаций - Голичева
Конкурс презентаций - Голичеваgalkina
 

Similar to 20111023 csseminar geometry_algorithms_implementation_kovalev (20)

6 класс.правила раскрытия скобок
6 класс.правила раскрытия скобок6 класс.правила раскрытия скобок
6 класс.правила раскрытия скобок
 
Grafikud 11
Grafikud 11Grafikud 11
Grafikud 11
 
Komplanarn vektor
Komplanarn vektorKomplanarn vektor
Komplanarn vektor
 
Сплайн интерполяция
Сплайн интерполяцияСплайн интерполяция
Сплайн интерполяция
 
Opredelennyj integral
Opredelennyj integralOpredelennyj integral
Opredelennyj integral
 
Pr i-4
Pr i-4Pr i-4
Pr i-4
 
Pril (1)
Pril (1)Pril (1)
Pril (1)
 
Skalirovanie proizvedenija vektorov
Skalirovanie proizvedenija vektorovSkalirovanie proizvedenija vektorov
Skalirovanie proizvedenija vektorov
 
Методы численного интегрирования
Методы численного интегрированияМетоды численного интегрирования
Методы численного интегрирования
 
Линейная алгебра - I. Разбор задач
Линейная алгебра - I. Разбор задачЛинейная алгебра - I. Разбор задач
Линейная алгебра - I. Разбор задач
 
презентация лекции по выпуклому анализу
презентация лекции по выпуклому анализупрезентация лекции по выпуклому анализу
презентация лекции по выпуклому анализу
 
Preobrazovaniya grafikov funkcij
Preobrazovaniya grafikov funkcijPreobrazovaniya grafikov funkcij
Preobrazovaniya grafikov funkcij
 
1742 повторяем математику за курс средней школы арефьева и.г-2015 -118с
1742  повторяем математику за курс средней школы арефьева и.г-2015 -118с1742  повторяем математику за курс средней школы арефьева и.г-2015 -118с
1742 повторяем математику за курс средней школы арефьева и.г-2015 -118с
 
преобразование функций
преобразование функцийпреобразование функций
преобразование функций
 
площади треугольника
площади треугольникаплощади треугольника
площади треугольника
 
Matemat526
Matemat526Matemat526
Matemat526
 
8165
81658165
8165
 
лекция 9
лекция 9лекция 9
лекция 9
 
20111120 circuit complexity_seminar_lecture09_alexeenko
20111120 circuit complexity_seminar_lecture09_alexeenko20111120 circuit complexity_seminar_lecture09_alexeenko
20111120 circuit complexity_seminar_lecture09_alexeenko
 
Конкурс презентаций - Голичева
Конкурс презентаций - ГоличеваКонкурс презентаций - Голичева
Конкурс презентаций - Голичева
 

More from Computer Science Club

20140531 serebryany lecture01_fantastic_cpp_bugs
20140531 serebryany lecture01_fantastic_cpp_bugs20140531 serebryany lecture01_fantastic_cpp_bugs
20140531 serebryany lecture01_fantastic_cpp_bugsComputer Science Club
 
20140531 serebryany lecture02_find_scary_cpp_bugs
20140531 serebryany lecture02_find_scary_cpp_bugs20140531 serebryany lecture02_find_scary_cpp_bugs
20140531 serebryany lecture02_find_scary_cpp_bugsComputer Science Club
 
20140531 serebryany lecture01_fantastic_cpp_bugs
20140531 serebryany lecture01_fantastic_cpp_bugs20140531 serebryany lecture01_fantastic_cpp_bugs
20140531 serebryany lecture01_fantastic_cpp_bugsComputer Science Club
 
20140511 parallel programming_kalishenko_lecture12
20140511 parallel programming_kalishenko_lecture1220140511 parallel programming_kalishenko_lecture12
20140511 parallel programming_kalishenko_lecture12Computer Science Club
 
20140427 parallel programming_zlobin_lecture11
20140427 parallel programming_zlobin_lecture1120140427 parallel programming_zlobin_lecture11
20140427 parallel programming_zlobin_lecture11Computer Science Club
 
20140420 parallel programming_kalishenko_lecture10
20140420 parallel programming_kalishenko_lecture1020140420 parallel programming_kalishenko_lecture10
20140420 parallel programming_kalishenko_lecture10Computer Science Club
 
20140413 parallel programming_kalishenko_lecture09
20140413 parallel programming_kalishenko_lecture0920140413 parallel programming_kalishenko_lecture09
20140413 parallel programming_kalishenko_lecture09Computer Science Club
 
20140329 graph drawing_dainiak_lecture02
20140329 graph drawing_dainiak_lecture0220140329 graph drawing_dainiak_lecture02
20140329 graph drawing_dainiak_lecture02Computer Science Club
 
20140329 graph drawing_dainiak_lecture01
20140329 graph drawing_dainiak_lecture0120140329 graph drawing_dainiak_lecture01
20140329 graph drawing_dainiak_lecture01Computer Science Club
 
20140310 parallel programming_kalishenko_lecture03-04
20140310 parallel programming_kalishenko_lecture03-0420140310 parallel programming_kalishenko_lecture03-04
20140310 parallel programming_kalishenko_lecture03-04Computer Science Club
 
20140216 parallel programming_kalishenko_lecture01
20140216 parallel programming_kalishenko_lecture0120140216 parallel programming_kalishenko_lecture01
20140216 parallel programming_kalishenko_lecture01Computer Science Club
 

More from Computer Science Club (20)

20141223 kuznetsov distributed
20141223 kuznetsov distributed20141223 kuznetsov distributed
20141223 kuznetsov distributed
 
Computer Vision
Computer VisionComputer Vision
Computer Vision
 
20140531 serebryany lecture01_fantastic_cpp_bugs
20140531 serebryany lecture01_fantastic_cpp_bugs20140531 serebryany lecture01_fantastic_cpp_bugs
20140531 serebryany lecture01_fantastic_cpp_bugs
 
20140531 serebryany lecture02_find_scary_cpp_bugs
20140531 serebryany lecture02_find_scary_cpp_bugs20140531 serebryany lecture02_find_scary_cpp_bugs
20140531 serebryany lecture02_find_scary_cpp_bugs
 
20140531 serebryany lecture01_fantastic_cpp_bugs
20140531 serebryany lecture01_fantastic_cpp_bugs20140531 serebryany lecture01_fantastic_cpp_bugs
20140531 serebryany lecture01_fantastic_cpp_bugs
 
20140511 parallel programming_kalishenko_lecture12
20140511 parallel programming_kalishenko_lecture1220140511 parallel programming_kalishenko_lecture12
20140511 parallel programming_kalishenko_lecture12
 
20140427 parallel programming_zlobin_lecture11
20140427 parallel programming_zlobin_lecture1120140427 parallel programming_zlobin_lecture11
20140427 parallel programming_zlobin_lecture11
 
20140420 parallel programming_kalishenko_lecture10
20140420 parallel programming_kalishenko_lecture1020140420 parallel programming_kalishenko_lecture10
20140420 parallel programming_kalishenko_lecture10
 
20140413 parallel programming_kalishenko_lecture09
20140413 parallel programming_kalishenko_lecture0920140413 parallel programming_kalishenko_lecture09
20140413 parallel programming_kalishenko_lecture09
 
20140329 graph drawing_dainiak_lecture02
20140329 graph drawing_dainiak_lecture0220140329 graph drawing_dainiak_lecture02
20140329 graph drawing_dainiak_lecture02
 
20140329 graph drawing_dainiak_lecture01
20140329 graph drawing_dainiak_lecture0120140329 graph drawing_dainiak_lecture01
20140329 graph drawing_dainiak_lecture01
 
20140310 parallel programming_kalishenko_lecture03-04
20140310 parallel programming_kalishenko_lecture03-0420140310 parallel programming_kalishenko_lecture03-04
20140310 parallel programming_kalishenko_lecture03-04
 
20140223-SuffixTrees-lecture01-03
20140223-SuffixTrees-lecture01-0320140223-SuffixTrees-lecture01-03
20140223-SuffixTrees-lecture01-03
 
20140216 parallel programming_kalishenko_lecture01
20140216 parallel programming_kalishenko_lecture0120140216 parallel programming_kalishenko_lecture01
20140216 parallel programming_kalishenko_lecture01
 
20131106 h10 lecture6_matiyasevich
20131106 h10 lecture6_matiyasevich20131106 h10 lecture6_matiyasevich
20131106 h10 lecture6_matiyasevich
 
20131027 h10 lecture5_matiyasevich
20131027 h10 lecture5_matiyasevich20131027 h10 lecture5_matiyasevich
20131027 h10 lecture5_matiyasevich
 
20131027 h10 lecture5_matiyasevich
20131027 h10 lecture5_matiyasevich20131027 h10 lecture5_matiyasevich
20131027 h10 lecture5_matiyasevich
 
20131006 h10 lecture3_matiyasevich
20131006 h10 lecture3_matiyasevich20131006 h10 lecture3_matiyasevich
20131006 h10 lecture3_matiyasevich
 
20131006 h10 lecture3_matiyasevich
20131006 h10 lecture3_matiyasevich20131006 h10 lecture3_matiyasevich
20131006 h10 lecture3_matiyasevich
 
20131006 h10 lecture2_matiyasevich
20131006 h10 lecture2_matiyasevich20131006 h10 lecture2_matiyasevich
20131006 h10 lecture2_matiyasevich
 

20111023 csseminar geometry_algorithms_implementation_kovalev

  • 1. Устойчивая реализация алгоритмов вычислительной геометрии Антон Ковалев ЗАО Транзас, СПбГУ ИТМО октябрь 2011 А. Ковалев (Транзас, ИТМО) Exact geometric computation октябрь 2011 1 / 27
  • 2. Расчеты в вычислительной геометрии Реализация алгоритмов вычислительной геометрии зачастую очень сложна, так как: А. Ковалев (Транзас, ИТМО) Exact geometric computation октябрь 2011 2 / 27
  • 3. Расчеты в вычислительной геометрии Реализация алгоритмов вычислительной геометрии зачастую очень сложна, так как: сложен сам алгоритм (например, incremental segment Voronoi diagram); А. Ковалев (Транзас, ИТМО) Exact geometric computation октябрь 2011 2 / 27
  • 4. Расчеты в вычислительной геометрии Реализация алгоритмов вычислительной геометрии зачастую очень сложна, так как: сложен сам алгоритм (например, incremental segment Voronoi diagram); в описании алгоритма опущены вырожденные случаи (например, Bentley-Ottmann); А. Ковалев (Транзас, ИТМО) Exact geometric computation октябрь 2011 2 / 27
  • 5. Расчеты в вычислительной геометрии Реализация алгоритмов вычислительной геометрии зачастую очень сложна, так как: сложен сам алгоритм (например, incremental segment Voronoi diagram); в описании алгоритма опущены вырожденные случаи (например, Bentley-Ottmann); вычисления с плавающей точкой дают погрешность, что приводит к нарушению инвариантов алгоритма. А. Ковалев (Транзас, ИТМО) Exact geometric computation октябрь 2011 2 / 27
  • 6. Расчеты в вычислительной геометрии Реализация алгоритмов вычислительной геометрии зачастую очень сложна, так как: сложен сам алгоритм (например, incremental segment Voronoi diagram); в описании алгоритма опущены вырожденные случаи (например, Bentley-Ottmann); вычисления с плавающей точкой дают погрешность, что приводит к нарушению инвариантов алгоритма. Рассмотрим один из способов справиться с последней проблемой: фильтрованное вычисление предикатов. А. Ковалев (Транзас, ИТМО) Exact geometric computation октябрь 2011 2 / 27
  • 7. Определение пересечения двух отрезков на плоскости Определение Отрезок s задается начальной и конечной точками a, b ∈ R2 и определяется как множество точек s = (1 − t)a + tb, t ∈ [0; 1] . А. Ковалев (Транзас, ИТМО) Exact geometric computation октябрь 2011 3 / 27
  • 8. Определение пересечения двух отрезков на плоскости Определение Отрезок s задается начальной и конечной точками a, b ∈ R2 и определяется как множество точек s = (1 − t)a + tb, t ∈ [0; 1] . Определение Отрезки s1 и s2 пересекаются, если существует непустое множество общих точек. А. Ковалев (Транзас, ИТМО) Exact geometric computation октябрь 2011 3 / 27
  • 9. Определение пересечения двух отрезков на плоскости Определение  1  точка c лежит слева от направленного отрезка s, Turn(s, c) = −1 точка c лежит справа от направленного отрезка s,  0 s и c коллинеарны.  А. Ковалев (Транзас, ИТМО) Exact geometric computation октябрь 2011 4 / 27
  • 10. Определение пересечения двух отрезков на плоскости Определение  1  точка c лежит слева от направленного отрезка s, Turn(s, c) = −1 точка c лежит справа от направленного отрезка s,  0 s и c коллинеарны.  Утверждение  Turn(s1 , s2,a ) · Turn(s1 , s2,b ) ≤ 0  s1 s2 ⇐⇒ Turn(s2 , s1,a ) · Turn(s2 , s1,b ) ≤ 0 ,  AABB(s1 ) AABB(s2 ) = ∅  где AABB это axis-aligned bounding box. А. Ковалев (Транзас, ИТМО) Exact geometric computation октябрь 2011 4 / 27
  • 11. Вычисление предиката Turn Утверждение sb,x − sa,x cx − sa,x Turn(s, c) = sign (sb − sa ) × (c − sa ) = sign sb,y − sa,y cy − sa,y А. Ковалев (Транзас, ИТМО) Exact geometric computation октябрь 2011 5 / 27
  • 12. Вычисление предиката Turn Утверждение sb,x − sa,x cx − sa,x Turn(s, c) = sign (sb − sa ) × (c − sa ) = sign sb,y − sa,y cy − sa,y Проблема? А. Ковалев (Транзас, ИТМО) Exact geometric computation октябрь 2011 5 / 27
  • 13. Вычисление предиката Turn Утверждение sb,x − sa,x cx − sa,x Turn(s, c) = sign (sb − sa ) × (c − sa ) = sign sb,y − sa,y cy − sa,y Проблема? Вычисления с плавающей точкой: point_2 a ( 3 . 0 , 5 . 0 ) ; point_2 b = −a ; point_2 c = a ∗ ( 1 LL << 5 2 ) ; // Что в е р н е т э т а функция ? Turn ( segment_2 ( a , b ) , c ) ; А. Ковалев (Транзас, ИТМО) Exact geometric computation октябрь 2011 5 / 27
  • 14. Вычисление предиката Turn Вычисление поворота от отрезка и точки плоскости: красный цвет левый поворот, синий правый, зеленый точка и отрезок принадлежат одной прямой. А. Ковалев (Транзас, ИТМО) Exact geometric computation октябрь 2011 6 / 27
  • 15. Вычисление предиката Turn Числа с плавающей точкой Двоичное число с плавающей точкой: a = ±1.a1 a2 a3 . . . ap−1 × 2γ , ai ∈ {0, 1}. А. Ковалев (Транзас, ИТМО) Exact geometric computation октябрь 2011 7 / 27
  • 16. Вычисление предиката Turn Числа с плавающей точкой Двоичное число с плавающей точкой: a = ±1.a1 a2 a3 . . . ap−1 × 2γ , ai ∈ {0, 1}. Определение ulp(a) = 2−p+1+γ А. Ковалев (Транзас, ИТМО) Exact geometric computation октябрь 2011 7 / 27
  • 17. Вычисление предиката Turn Числа с плавающей точкой Двоичное число с плавающей точкой: a = ±1.a1 a2 a3 . . . ap−1 × 2γ , ai ∈ {0, 1}. Определение ulp(a) = 2−p+1+γ D множество всех чисел c плавающей точкой c операциями ⊕, , ⊗. А. Ковалев (Транзас, ИТМО) Exact geometric computation октябрь 2011 7 / 27
  • 18. Вычисление предиката Turn Числа с плавающей точкой Двоичное число с плавающей точкой: a = ±1.a1 a2 a3 . . . 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 + δ), |δ| ≤ ε А. Ковалев (Транзас, ИТМО) Exact geometric computation октябрь 2011 7 / 27
  • 19. Вычисление предиката Turn Числа с плавающей точкой Двоичное число с плавающей точкой: a = ±1.a1 a2 a3 . . . 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 ∈ D 2 , v = (bx ax ) ⊗ (cy ay ) (by ˜ ay ) ⊗ (cx ax ) v > ˜ ⇒ (b − a) × (c − a) > 0 ˜ ∃˜ ∈ D : v < −˜ ⇒ (b − a) × (c − a) < 0 ˜ А. Ковалев (Транзас, ИТМО) Exact geometric computation октябрь 2011 7 / 27
  • 20. Вычисление предиката Turn Расчет ˜ v v ˜ (b − a) × (c − a) ≈ (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 ), А. Ковалев (Транзас, ИТМО) Exact geometric computation октябрь 2011 8 / 27
  • 21. Вычисление предиката Turn Расчет ˜ v v ˜ (b − a) × (c − a) ≈ (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 | ≤ ε; А. Ковалев (Транзас, ИТМО) Exact geometric computation октябрь 2011 8 / 27
  • 22. Вычисление предиката Turn Расчет ˜ v v ˜ (b − a) × (c − a) ≈ (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 | ≤ ε; e = |v − v | ≤ |(bx − ax )(cy − ay )| + |(by − ay )(cx − ax )| × ˜ × (4ε + 6ε2 + 4ε3 + ε4 ) А. Ковалев (Транзас, ИТМО) Exact geometric computation октябрь 2011 8 / 27
  • 23. Вычисление предиката Turn Расчет ˜ v v ˜ (b − a) × (c − a) ≈ (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 | ≤ ε; e = |v − v | ≤ |(bx − ax )(cy − ay )| + |(by − ay )(cx − ax )| × ˜ × (4ε + 6ε2 + 4ε3 + ε4 ) Вычислим выражение справа в модели floating-point. А. Ковалев (Транзас, ИТМО) Exact geometric computation октябрь 2011 8 / 27
  • 24. Вычисление предиката Turn Расчет ˜ e |(bx − ax )(cy − ay )| + |(by − ay )(cx − ax )| (1 − ε)4 ≤ e ˜ ≤ |(bx ax ) ⊗ (cy ⊗ ay )| ⊕ |(by ay ) ⊗ (cx ax )| А. Ковалев (Транзас, ИТМО) Exact geometric computation октябрь 2011 9 / 27
  • 25. Вычисление предиката Turn Расчет ˜ e |(bx − ax )(cy − ay )| + |(by − ay )(cx − ax )| (1 − ε)4 ≤ e ˜ ≤ |(bx ax ) ⊗ (cy ⊗ ay )| ⊕ |(by ay ) ⊗ (cx ax )| 1 e≤e ˜ = e (1 + 4ε + 10ε2 + 20ε3 + · · · ) ˜ (1 − ε)4 А. Ковалев (Транзас, ИТМО) Exact geometric computation октябрь 2011 9 / 27
  • 26. Вычисление предиката Turn Расчет ˜ e |(bx − ax )(cy − ay )| + |(by − ay )(cx − ax )| (1 − ε)4 ≤ e ˜ ≤ |(bx ax ) ⊗ (cy ⊗ ay )| ⊕ |(by ay ) ⊗ (cx ax )| 1 e≤e ˜ = e (1 + 4ε + 10ε2 + 20ε3 + · · · ) ˜ (1 − ε)4 ≤ ˜ ≤ e (1 + 4ε + 10ε2 + 20ε3 + · · · )(4ε + 6ε2 + 4ε3 + ε4 ) ˜ А. Ковалев (Транзас, ИТМО) Exact geometric computation октябрь 2011 9 / 27
  • 27. Вычисление предиката Turn Расчет ˜ e |(bx − ax )(cy − ay )| + |(by − ay )(cx − ax )| (1 − ε)4 ≤ e ˜ ≤ |(bx ax ) ⊗ (cy ⊗ ay )| ⊕ |(by ay ) ⊗ (cx ax )| 1 e≤e ˜ = e (1 + 4ε + 10ε2 + 20ε3 + · · · ) ˜ (1 − ε)4 ≤ ˜ ≤ e (1 + 4ε + 10ε2 + 20ε3 + · · · )(4ε + 6ε2 + 4ε3 + ε4 ) ˜ ˜ < 8ε˜ e А. Ковалев (Транзас, ИТМО) Exact geometric computation октябрь 2011 9 / 27
  • 28. Вычисление предиката Turn Утверждение v > 8ε˜ ⇒ v > 0 ˜ e v < −8ε˜ ⇒ v < 0 ˜ e А. Ковалев (Транзас, ИТМО) Exact geometric computation октябрь 2011 10 / 27
  • 29. Вычисление предиката Turn Утверждение v > 8ε˜ ⇒ v > 0 ˜ e v < −8ε˜ ⇒ v < 0 ˜ e Что делать, если v ∈ [−8ε˜; 8ε˜]? ˜ e e А. Ковалев (Транзас, ИТМО) Exact geometric computation октябрь 2011 10 / 27
  • 30. Вычисление предиката Turn Интервальная арифметика Определение Интервальная арифметика: a ∈ [alo , ahi ];   a·b ∈ min a b ; max a b ,   a ∈[alo ;ahi ] a ∈[alo ;ahi ] b ∈[blo ;bhi ] b ∈[blo ;bhi ] · ∈ [+, −, ×], ∈ [⊕, , ⊗] с округлением, соответственно, к − ∞ и + ∞. Замечание sqr ([alo , ahi ]) =?
  • 31. Вычисление предиката Turn Интервальная арифметика Определение Интервальная арифметика: a ∈ [alo , ahi ];   a·b ∈ min a b ; max a b ,   a ∈[alo ;ahi ] a ∈[alo ;ahi ] b ∈[blo ;bhi ] b ∈[blo ;bhi ] · ∈ [+, −, ×], ∈ [⊕, , ⊗] с округлением, соответственно, к − ∞ и + ∞. Замечание sqr ([alo , ahi ]) =? А. Ковалев (Транзас, ИТМО) Exact geometric computation октябрь 2011 11 / 27
  • 32. Вычисление предиката Turn Интервальная арифметика Утверждение Если интервал v = (b − a) × (c − a) не содержит 0, знак v вычислен точно. А. Ковалев (Транзас, ИТМО) Exact geometric computation октябрь 2011 12 / 27
  • 33. Вычисление предиката Turn Интервальная арифметика Утверждение Если интервал v = (b − a) × (c − a) не содержит 0, знак v вычислен точно. Замечание Переключать режим округления процессора дорого. А. Ковалев (Транзас, ИТМО) Exact geometric computation октябрь 2011 12 / 27
  • 34. Вычисление предиката Turn Интервальная арифметика Утверждение Если интервал v = (b − a) × (c − a) не содержит 0, знак v вычислен точно. Замечание Переключать режим округления процессора дорого. [alo ; ahi ] = −[−ahi ; −alo ]. А. Ковалев (Транзас, ИТМО) Exact geometric computation октябрь 2011 12 / 27
  • 35. Вычисление предиката Turn Интервальная арифметика Утверждение Если интервал v = (b − a) × (c − a) не содержит 0, знак v вычислен точно. Замечание Переключать режим округления процессора дорого. [alo ; ahi ] = −[−ahi ; −alo ]. Эффективная реализация есть, например, в boost/interval. А. Ковалев (Транзас, ИТМО) Exact geometric computation октябрь 2011 12 / 27
  • 36. Вычисление предиката Turn Интервальная арифметика Утверждение Если интервал v = (b − a) × (c − a) не содержит 0, знак v вычислен точно. Замечание Переключать режим округления процессора дорого. [alo ; ahi ] = −[−ahi ; −alo ]. Эффективная реализация есть, например, в boost/interval. Что делать, если интервал v содержит 0? А. Ковалев (Транзас, ИТМО) Exact geometric computation октябрь 2011 12 / 27
  • 37. Вычисление предиката Turn Рациональная арифметика Определение Рациональная арифметика: число представляется в виде рациональной дроби с длинным числителем и длинным знаменателем. А. Ковалев (Транзас, ИТМО) Exact geometric computation октябрь 2011 13 / 27
  • 38. Вычисление предиката Turn Рациональная арифметика Определение Рациональная арифметика: число представляется в виде рациональной дроби с длинным числителем и длинным знаменателем. Замечание Недостатки: даже эффективные реализации сложны и медленны; требует или сложной разработки, или добавления еще одной зависимости (gmp, например). А. Ковалев (Транзас, ИТМО) Exact geometric computation октябрь 2011 13 / 27
  • 39. Вычисление предиката Turn Adaptive precision floating-point arithmetic Идея ∀a, b ∈ D ∃c ∈ D : 1 a + b = a ⊕ b + c, |c| ≤ 2 ulp (a ⊕ b) А. Ковалев (Транзас, ИТМО) Exact geometric computation октябрь 2011 14 / 27
  • 40. Вычисление предиката Turn Adaptive precision floating-point arithmetic Идея ∀a, b ∈ D ∃c ∈ D : 1 a + b = a ⊕ b + c, |c| ≤ 2 ulp (a ⊕ b) 1 ab = a ⊗ b + c, |c| ≤ 2 ulp (a ⊗ b) А. Ковалев (Транзас, ИТМО) Exact geometric computation октябрь 2011 14 / 27
  • 41. Вычисление предиката Turn Adaptive precision floating-point arithmetic Идея ∀a, b ∈ D ∃c ∈ D : 1 a + b = a ⊕ b + c, |c| ≤ 2 ulp (a ⊕ b) 1 ab = a ⊗ b + c, |c| ≤ 2 ulp (a ⊗ b)  cj ∈ D  ∀b = f (a1 , a2 , . . . , an )ai ∈D 1 ∃{cj } : |cj | ≤ 2 ulp(cj+1 ) ,  b = cj  где f это арифметическое выражение с операциями +, − и ×. А. Ковалев (Транзас, ИТМО) Exact geometric computation октябрь 2011 14 / 27
  • 42. Вычисление предиката Turn Adaptive precision floating-point arithmetic double sum ( double a , double b , double & r o u n d o f f ) { double r e s = a + b ; double bv = r e s − a ; double av = r e s − bv ; double b r = b − bv ; double a r = a − av ; roundoff = ar + br ; return r e s ; } А. Ковалев (Транзас, ИТМО) Exact geometric computation октябрь 2011 15 / 27
  • 43. Вычисление предиката Turn Adaptive precision floating-point arithmetic double mul ( double a , double b , double & r o u n d o f f ) { double r e s = a ∗ b ; s i z e _ t s = s t d : : n u m e r i c _ l i m i t s <double > : : d i g i t s / 2 + s t d : : n u m e r i c _ l i m i t s <double > : : d i g i t s % 2 ; double a_hi , a_lo , b_hi , b_lo ; i m p l : : s p l i t ( a , s , a_hi , a_lo ) ; i m p 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 u n d o f f = ( a_lo ∗ b_lo ) − e3 ; return r e s ; } А. Ковалев (Транзас, ИТМО) Exact geometric computation октябрь 2011 16 / 27
  • 44. Вычисление предиката Turn Adaptive precision floating-point arithmetic v o i d s p l i t ( double a , s i z e _ t s , double & h i , double & l o ) { double c = ( ( 1 LL << s ) + 1LL ) ∗ a ; double ab = c − a ; h i = c − ab ; lo = a − hi ; } А. Ковалев (Транзас, ИТМО) Exact geometric computation октябрь 2011 17 / 27
  • 45. Вычисление предиката Turn Adaptive precision floating-point arithmetic template <s i z e _ t N> s t r u c t grow_expansion_f { s t a t i c v o i d 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 r u c t grow_expansion_f <0> { s t a t i c v o i d c a l c ( double const ∗ e , double b , double ∗ r ) { ∗r = b; } }; А. Ковалев (Транзас, ИТМО) Exact geometric computation октябрь 2011 18 / 27
  • 46. Вычисление предиката Turn Adaptive precision floating-point arithmetic template <s i z e _ t N1 , s i z e _ t N2> s t r u c t expand_sum_f { s t a t i c v o i d 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 r u c t expand_sum_f<N1 , 0> { s t a t i c v o i d c a l c ( double const ∗ e , double const ∗ f , double ∗ r ) {} }; А. Ковалев (Транзас, ИТМО) Exact geometric computation октябрь 2011 19 / 27
  • 47. Вычисление предиката Turn Adaptive precision floating-point arithmetic double s a [ 1 2 ] ; s a [ 1 ] = mul ( b . x , c . y , s a [ 0 ] ) ; ... s a [ 1 1 ] = mul ( b . y , a . x , s a [ 1 0 ] ) ; double s b [ 1 2 ] ; expand_sum <2, 2>( s a + 0 , s a + 2 , s b ) ; expand_sum <2, 2>( s a + 4 , s a + 6 , s b + 4 ) ; expand_sum <2, 2>( s a + 8 , s a + 1 0 , s b + 8 ) ; double s c [ 8 ] ; expand_sum <4, 4>( sb , s b + 4 , s c ) ; double s d [ 1 2 ] ; expand_sum <8, 4>( sc , s b + 8 , s d ) ; r e t u r n s i g n <12>( s d ) ; А. Ковалев (Транзас, ИТМО) Exact geometric computation октябрь 2011 20 / 27
  • 48. Фильтрованное вычисление предиката Эффективное и точное решение: числа с плавающей точкой; А. Ковалев (Транзас, ИТМО) Exact geometric computation октябрь 2011 21 / 27
  • 49. Фильтрованное вычисление предиката Эффективное и точное решение: числа с плавающей точкой; интервальная арифметика; А. Ковалев (Транзас, ИТМО) Exact geometric computation октябрь 2011 21 / 27
  • 50. Фильтрованное вычисление предиката Эффективное и точное решение: числа с плавающей точкой; интервальная арифметика; рациональная или адаптивная арифметика, ESSA, etc. А. Ковалев (Транзас, ИТМО) Exact geometric computation октябрь 2011 21 / 27
  • 51. Фильтрованное вычисление предиката Эффективное и точное решение: числа с плавающей точкой; интервальная арифметика; рациональная или адаптивная арифметика, ESSA, etc. Замечание Большинство предикатов в вычислительной геометрии сводятся к sign от элементарного арифметического выражения. А. Ковалев (Транзас, ИТМО) Exact geometric computation октябрь 2011 21 / 27
  • 52. Алгоритм Бентли-Оттмана S = {s} – множество отрезков, n = S . Требуется найти множество R = {ri }, где ri = {si,k } множество всех отрезков, проходящих через некоторую точку qi . А. Ковалев (Транзас, ИТМО) Exact geometric computation октябрь 2011 22 / 27
  • 53. Алгоритм Бентли-Оттмана S = {s} – множество отрезков, n = S . Требуется найти множество R = {ri }, где ri = {si,k } множество всех отрезков, проходящих через некоторую точку qi . Идея: заметающая прямая, O((n + k) log n) (k – число пересечений). s3 s2 s1 s1 s1 s3 s1 s2 s3 s2 s1 s3 s2 s3 s1 s3 s2 s1 s3 s1 s3 А. Ковалев (Транзас, ИТМО) Exact geometric computation октябрь 2011 22 / 27
  • 54. Алгоритм Бентли-Оттмана Все хорошо? А. Ковалев (Транзас, ИТМО) Exact geometric computation октябрь 2011 23 / 27
  • 55. Алгоритм Бентли-Оттмана Все хорошо? Вот, что будет, если добавлять в очередь событий координаты точек пересечений отрезков: s3 s2 s1 А. Ковалев (Транзас, ИТМО) Exact geometric computation октябрь 2011 23 / 27
  • 56. Алгоритм Бентли-Оттмана А нужны ли сами точки пересечений? А. Ковалев (Транзас, ИТМО) Exact geometric computation октябрь 2011 24 / 27
  • 57. Алгоритм Бентли-Оттмана А нужны ли сами точки пересечений? Необходимо поддерживать корректный порядок событий: e1,x < e2,x e1 < e2 ⇔ e1,x = e2,x ∧ e1,y < e2,y А. Ковалев (Транзас, ИТМО) Exact geometric computation октябрь 2011 24 / 27
  • 58. Алгоритм Бентли-Оттмана А нужны ли сами точки пересечений? Необходимо поддерживать корректный порядок событий: e1,x < e2,x e1 < e2 ⇔ e1,x = e2,x ∧ e1,y < e2,y Найдем точку пересечения q двух непараллельных отрезков a1 b1 и a2 b2 : a1,y − b1,y b1,x − a1,x x (a1,y − b1,y )a1,x + (b1,x − a1,x )a1,y = a2,y − b2,y b2,x − a2,x y (a2,y − b2,y )a2,x + (b2,x − a2,x )a2,y А. Ковалев (Транзас, ИТМО) Exact geometric computation октябрь 2011 24 / 27
  • 59. Алгоритм Бентли-Оттмана А нужны ли сами точки пересечений? Необходимо поддерживать корректный порядок событий: e1,x < e2,x e1 < e2 ⇔ e1,x = e2,x ∧ e1,y < e2,y Найдем точку пересечения q двух непараллельных отрезков a1 b1 и a2 b2 : a1,y − b1,y b1,x − a1,x x (a1,y − b1,y )a1,x + (b1,x − a1,x )a1,y = a2,y − b2,y b2,x − a2,x y (a2,y − b2,y )a2,x + (b2,x − a2,x )a2,y b2,x − a2,x a1,x − b1,x b1,x a1,y − b1,y a1,x x b2,y − a2,y a1,y − b1,y b2,x a2,y − b2,y a2,x = y a1,y − b1,y b1,x − a1,x a2,y − b2,y b2,x − a2,x А. Ковалев (Транзас, ИТМО) Exact geometric computation октябрь 2011 24 / 27
  • 60. Алгоритм Бентли-Оттмана Таким образом: можно тем же способом эффективно сравнивать все возможные события (начала и концы отрезков и точки пересечений отрезков); А. Ковалев (Транзас, ИТМО) Exact geometric computation октябрь 2011 25 / 27
  • 61. Алгоритм Бентли-Оттмана Таким образом: можно тем же способом эффективно сравнивать все возможные события (начала и концы отрезков и точки пересечений отрезков); с помощью Turn можно эффективно локализовать точку при добавлении начала отрезка в статус. А. Ковалев (Транзас, ИТМО) Exact geometric computation октябрь 2011 25 / 27
  • 62. Ссылки D. Goldberg. What every computer scientist should know about floating-point arithmetic. ACM Comput. Surv., March, 1991. J. Shewchuk. Adaptive precision floating-point arithmetic and fast robust geometric predicates. Discrete & Computational Geometry, 1996 Chee K. Yap. Robust Geometric Computation. Handbook of Discrete and Computational Geometry, 2004 А. Ковалев (Транзас, ИТМО) Exact geometric computation октябрь 2011 26 / 27
  • 63. Спасибо за внимание! А. Ковалев (Транзас, ИТМО) Exact geometric computation октябрь 2011 27 / 27