restricted voronoi diagrams
play

Restricted Voronoi Diagrams for (re)meshing Surfaces and Volumes - PowerPoint PPT Presentation

Mathmatiques - Informatique Restricted Voronoi Diagrams for (re)meshing Surfaces and Volumes Curves and Surfaces 2014 Bruno Lvy ALICE Gomtrie & Lumire CENTRE INRIA Nancy Grand-Est OVERVIEW Part. 1. Introduction Motivations The


  1. Part. 2 Exact Arithmetics How to implement Side1(), Side2(), Side3() ? +,-,*,Sign() Idea #1: (dense) multi-precision (GMP) c = a 10 * 2 10*32 + b 0 a10 0 0 b0 x 2 10*32 x 2 0

  2. Part. 2 Exact Arithmetics How to implement Side1(), Side2(), Side3() ? +,-,*,Sign() Idea #2: (sparse) multi-precision c = a 10 * 2 10*32 + b 0 a10 | 10 b0 | 0 Store the exponents of the components

  3. Part. 2 Exact Arithmetics How to implement Side1(), Side2(), Side3() ? +,-,*,Sign() Idea #2: (sparse) multi-precision c = a 10 * 2 10*32 + b 0 a10 | 10 b0 | 0 Exp. Exp.

  4. Part. 2 Exact Arithmetics How to implement Side1(), Side2(), Side3() ? +,-,*,Sign() Idea #2: (sparse) multi-precision c = a 10 * 2 10*32 + b 0 a10 | 10 b0 | 0 mantissa Exp. mantissa Exp.

  5. Part. 2 Exact Arithmetics How to implement Side1(), Side2(), Side3() ? +,-,*,Sign() Idea #2: (sparse) multi-precision c = a 10 * 2 10*32 + b 0 a10 | 10 b0 | 0 mantissa Exp. mantissa Exp. These are floating point numbers !!!

  6. Part. 2 Exact Arithmetics How to implement Side1(), Side2(), Side3() ? +,-,*,Sign() Idea #3: expansions (Shewchuk) x3 x1 x2 These are floating point numbers !!!

  7. Part. 2 Exact Arithmetics How to implement Side1(), Side2(), Side3() ? +,-,*,Sign() Idea #3: expansions (Shewchuk) x3 x1 x2 They are sorted in decreasing exponents These are floating point numbers !!!

  8. Part. 2 Exact Arithmetics How to implement Side1(), Side2(), Side3() ? +,-,*,Sign() Idea #3: expansions (Shewchuk) x3 x1 x2 They are sorted in decreasing exponents - These are floating point numbers !!!

  9. Part. 2 Exact Arithmetics How to implement Side1(), Side2(), Side3() ? +,-,*,Sign() Idea #3: expansions (Shewchuk) x3 x1 x2 They are sorted in decreasing exponents - The sign is determined by the first component (highest exponent) These are floating point numbers !!!

  10. Part. 2 Exact Arithmetics How to implement Side1(), Side2(), Side3() ? +,-,*,Sign() Idea #3: expansions (Shewchuk) Two_sum(double a, double b) x1 x2

  11. Part. 2 Exact Arithmetics How to implement Side1(), Side2(), Side3() ? +,-,*,Sign() Idea #3: expansions (Shewchuk) Two_sum(double a, double b) x1 x2 Length: + l+m Length l Length m

  12. Part. 2 Exact Arithmetics How to implement Side1(), Side2(), Side3() ? +,-,*,Sign() Idea #3: expansions (Shewchuk) Two_sum(double a, double b) x1 x2 Length: + l+m Length: * 2*l A double Length l

  13. Part. 2 Exact Arithmetics How to implement Side1(), Side2(), Side3() ? +,-,*,Sign() Idea #3: expansions (Shewchuk) * Length m Length l Length: 2*l*m Expansion * Expansion product implemented by a recursive function

  14. Part. 2 Exact Arithmetics How to implement Side1(), Side2(), Side3() ? +,-,*,Sign() Idea #3: expansions (Shewchuk) * Length m Length l Length: 2*l*m Expansion * Expansion product implemented by a recursive function Performance ? 10 to 40 times slower than standard doubles

  15. Part. 2 Exact Arithmetics How to implement Side1(), Side2(), Side3() ? +,-,*,Sign() Idea #3: expansions (Shewchuk) * Length m Length l Length: 2*l*m Expansion * Expansion product implemented by a recursive function Performance ? 10 to 40 times slower than standard doubles Use arithmetic filters Adaptive precision [Shewchuk] ? Too complicated to get right

  16. Part. 2 Exact Arithmetics How to implement Side1(), Side2(), Side3() ? +,-,*,Sign() Idea #3: expansions (Shewchuk) * Length m Length l Length: 2*l*m Expansion * Expansion product implemented by a recursive function Performance ? 10 to 40 times slower than standard doubles Use arithmetic filters Adaptive precision [Shewchuk] ? Too complicated to get right Quasi-static filters [Meyer and Pion] FPG generator (easy to use)

  17. Part. 2 Exact Arithmetics How to implement Side1(), Side2(), Side3() ? +,-,*,Sign() PCK (Predicate Construction Kit) multi_precision.h / multi_precision.cpp - - +,-,*,Sign overloads) a script that generates the filter with FPG [Meyer and Pion] and the exact precision version with expansions

  18. Part. 2 Exact Arithmetics How to implement Side1(), Side2(), Side3() ? +,-,*,Sign() PCK (Predicate Construction Kit) multi_precision.h / multi_precision.cpp - - +,-,*,Sign overloads) a script that generates the filter with FPG [Meyer and Pion] and the exact precision version with expansions So we are done ?

  19. Part. 2 Symbolic Perturbation How to implement Side1(), Side2(), Side3() ? x j x i Not yet !!

  20. Part. 2 Symbolic Perturbation How to implement Side1(), Side2(), Side3() ? x j x i Not yet !!

  21. Part. 2 Symbolic Perturbation

  22. Part. 2 Symbolic Perturbation

  23. Part. 2 Symbolic Perturbation

  24. Part. 2 Symbolic Perturbation

  25. Part. 2 Symbolic Perturbation

  26. Part. 2 Symbolic Perturbation

  27. Part. 2 Symbolic Perturbation

  28. Part. 2 Symbolic Perturbation

  29. Part. 2 Symbolic Perturbation

  30. Part. 2 Symbolic Perturbation

  31. Part. 2 Symbolic Perturbation

  32. Part. 2 Symbolic Perturbation

  33. Part. 2 Symbolic Perturbation

  34. Part. 2 Symbolic Perturbation

  35. Part. 2 Symbolic Perturbation

  36. Part. 2 Symbolic Perturbation

  37. Part. 2 Symbolic Perturbation (i,j) = { p | d 2 ( p , x i ) = d 2 ( p , x j )} x j [Voronoi] x i [Edelsbrunner et.al] [Devillers et.al]

  38. Part. 2 Symbolic Perturbation w (i,j) = { p | d 2 ( p , x i ) - w i = d 2 ( p , x j ) - w j } x j [Voronoi] x i [Edelsbrunner et.al] [Devillers et.al]

  39. Part. 2 Symbolic Perturbation w (i,j) = { p | d 2 ( p , x i ) - w i = d 2 ( p , x j ) - w j } The Voronoi diagram is replaced with a power diagram x j [Voronoi] x i [Edelsbrunner et.al] [Devillers et.al]

  40. Part. 2 Symbolic Perturbation w (i,j) = { p | d 2 ( p , x i ) - w i = d 2 ( p , x j ) - w j } The Voronoi diagram is replaced with a power diagram Symbolic perturbation Simulation of Simplicity: Define the weight as a function of : w i = i x j [Voronoi] x i [Edelsbrunner et.al] [Devillers et.al]

  41. Part. 2 Symbolic Perturbation w (i,j) = { p | d 2 ( p , x i ) - w i = d 2 ( p , x j ) - w j } The Voronoi diagram is replaced with a power diagram Symbolic perturbation Simulation of Simplicity: Define the weight as a function of : w i = i The combinatorics is determined by the limit x j [Voronoi] x i [Edelsbrunner et.al] [Devillers et.al]

  42. Part. 2 Symbolic Perturbation How to write side1(), side2(), side3(), side4() ? d 2 ( q , p j )-w j d 2 ( q , p i ) + w i where: q = w(i,k 1 w(i,k d 1 ,p 2 ,p 3 d ]

  43. Part. 2 Symbolic Perturbation How to write side1(), side2(), side3(), side4() ? d 2 ( q , p j )-w j d 2 ( q , p i ) + w i where: q = w(i,k 1 w(i,k d 1 ,p 2 ,p 3 d ] q w (i,k 1 ) { Solve for q in: q w (i,k d ) [p 1 ,p 2 ,p 3 d ] q

  44. Part. 2 Symbolic Perturbation How to write side1(), side2(), side3(), side4() ? d 2 ( q , p j )-w j d 2 ( q , p i ) + w i where: q = w(i,k 1 w(i,k d 1 ,p 2 ,p 3 d ] q = (1/d) Q q w (i,k 1 ) { Solve for q in: Keep numerator and denom. q w (i,k d ) separate (remember, we are [p 1 ,p 2 ,p 3 d ] not allowed to divide) q

  45. Part. 2 Symbolic Perturbation How to write side1(), side2(), side3(), side4() ? d 2 ( q , p j )-w j d 2 ( q , p i ) + w i where: q = w(i,k 1 w(i,k d 1 ,p 2 ,p 3 d ] q = (1/d) Q q w (i,k 1 ) { Solve for q in: Keep numerator and denom. q w (i,k d ) separate (remember, we are [p 1 ,p 2 ,p 3 d ] not allowed to divide) q Inject q=(1/d) Q in side1() and mutliply by d to remove the division

  46. Part. 2 Symbolic Perturbation How to write side1(), side2(), side3(), side4() ? d 2 ( q , p j )-w j d 2 ( q , p i ) + w i where: q = w(i,k 1 w(i,k d 1 ,p 2 ,p 3 d ] q = (1/d) Q q w (i,k 1 ) { Solve for q in: Keep numerator and denom. q w (i,k d ) separate (remember, we are [p 1 ,p 2 ,p 3 d ] not allowed to divide) q Inject q=(1/d) Q in side1() and mutliply by d to remove the division Order the terms in w i = i

  47. Part. 2 Symbolic Perturbation How to write side1(), side2(), side3(), side4() ? d 2 ( q , p j )-w j d 2 ( q , p i ) + w i where: q = w(i,k 1 w(i,k d 1 ,p 2 ,p 3 d ] q = (1/d) Q q w (i,k 1 ) { Solve for q in: Keep numerator and denom. q w (i,k d ) separate (remember, we are [p 1 ,p 2 ,p 3 d ] not allowed to divide) q Inject q=(1/d) Q in side1() and mutliply by d to remove the division Order the terms in w i = i the constant one is non-perturbed predicate if zero, the first non-zero one determines the sign

  48. Part. 2 Symbolic Perturbation side1 #include "kernel.pckh" Sign predicate(side1)( point(p0), point(p1), point(q0) DIM ) { scalar r = sq_dist(p0,p1) ; r -= 2*dot_at(p1,q0,p0) ; generic_predicate_result(sign(r)) ; begin_sos2(p0,p1) sos(p0,POSITIVE) sos(p1,NEGATIVE) end_sos } Source PCK

Recommend


More recommend