Code Monkey home page Code Monkey logo

progressive_embedding's Introduction

Progressive Embedding

Hanxiao Shen Zhongshi Jiang, Denis Zorin, Daniele Panozzo
ACM Transaction on Graphics (Proceedings of SIGGRAPH 2019)
DOI: 10.1145/3306346.3323012

Abstract

Tutte embedding is one of the most common building blocks in geome- try processing algorithms due to its simplicity and provable guarantees. Although provably correct in infinite precision arithmetic, it fails in chal- lenging cases when implemented using floating point arithmetic, largely due to the induced exponential area changes. We propose Progressive Embedding, with similar theoretical guarantees to Tutte embedding, but more resilient to the rounding error of floating point arithmetic. Inspired by progressive meshes, we collapse edges on an invalid embedding to a valid, simplified mesh, then insert points back while maintaining validity. We demonstrate the robustness of our method by computing embeddings for a large collection of disk topology meshes. By combining our robust embedding with a variant of the matchmaker algorithm, we propose a general algorithm for the problem of mapping multiply connected domains with arbitrary hard constraints to the plane, with applications in texture mapping and remeshing.

To compile

Use the following cmds:

mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Release ..
make

To run

There are 4 executable files genearted as the compilation finishes:

  • untangle_bin
  • genus_zero_tutte_bin
  • random_init_bin
  • matchmaker_bin

Generate a failed case on Tutte's Embedding and then use it as initialization to generate a non-flip mapping with Progressive Embedding:

mkdir output
./genus_zero_tutte_bin --in ../data/62415_sf.obj -o ../data/62415_tutte_fail.obj
./untangle_bin --in ../data/62415_tutte_fail.obj -o output/62415_no_flip.obj

Genearte a random initialization with convex boundary and then use Progressive Embedding to fix the flips:

./random_init_bin --in ../data/retinal_miq.obj
./untangle_bin --in ../data/retinal_miq.obj_rand.obj -e 1

Randomly pick three vertices on mesh, pin them on the 2D plane, then generate a map strictly satisfying the constraints using Matchmaker++:

./matchmaker_bin --in ../data/camel_miq.obj

Data

To download the result data in our paper, please checkout this link.

progressive_embedding's People

Contributors

alecjacobson avatar danielepanozzo avatar hankstag avatar jdumas avatar jiaranzhou avatar namdhari avatar zlyfunction avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.