Assignment 0 (Coding): Combinatorial Surfaces — due 2/26

For the coding portion of your first assignment, you will implement some operations on simplicial complexes which were discussed in class and in Chapter 2 of the course notes. Once implemented, you will be able to select simplices and apply these operations to them by clicking the appropriate buttons in the viewer (shown above).

Getting Started

  • Decide whether you want to use the web skeleton (in JavaScript) or the desktop skeleton (in C++). The web skeleton should “just work” for anyone with a web browser. Setting up the C++ skeleton is also fairly automatic (just a few git commands), but requires a little more familiarity with coding environments. (The benefit of the C++ version is that it’s built on a richer, real-world mesh processing/visualization library than the web version.)
  • To use the JavaScript version, download or clone the files in the ddg-exercises-js repository.
  • To use the C++ version, follow the instructions in the ddg-exercises repository. It is important that you follow the “Getting Started” instructions and do not simply git clone the repo. Otherwise, dependencies will not be installed correctly, and the code will not build. If you struggle to get the C++ version working on your platform, we recommend you switch to the JavaScript version.
  • Either way, you should need to download just one code skeleton for the whole semester (though we may push periodic updates to fix bugs, etc.).
  • For this assignment, you will need to implement the following routines in projects/simplicial-complex-operators/simplicial-complex-operators.[js|cpp]:
    • assignElementIndices
    • buildVertexEdgeAdjacencyMatrix
    • buildEdgeFaceAdjacencyMatrix
    • buildVertexVector
    • buildEdgeVector
    • buildFaceVector
    • star
    • closure
    • link
    • isComplex
    • isPureComplex
    • boundary

Notes

  • The JavaScript assignment comes with a viewer projects/simplicial-complex-operators/index.html which lets you apply your operators to simplices of meshes and visualize the results. Likewise, the C++ version comes with a viewer with similar functionality. (Viewers will be available for all assignments throughout the semester.)
  • Pay close attention to the course notes! Some routines really must be implemented with sparse matrices, not directly with the halfedge mesh data structure.
  • Selecting simplices will not work until you fill in the assignElementIndices function.
  • The assignment also comes with a test script tests/simplicial-complex-operators/text.html which you can use to verify the correctness of your operators.
  • The web framework is implemented in Javascript, which means no compilation or installation is necessary on any platform. You can simply get started by opening the index.html file in projects/discrete-exterior-calculus/ in a web browser. We recommend using Chrome or Firefox. Safari has poor WebGL performance.
  • If you do not have prior experience with Javascript, do not worry! You should be able to get a handle on Javascript syntax by reading through some of the code in the framework (a good place to start might be core/geometry.js). The framework also contains extensive documentation (see docs/index.html).
  • All browsers come with tools for debugging (for instance the JavaScript Console in Chrome).

Submission Instructions

The assignment is due on February 26, 2020 at 5:59:59pm Eastern (not at midnight!). Remember to turn in the whole coding assignment via a single ZIP file containing the modified source files. Further hand-in instructions can be found on this page.

Assignment 0 (Written): Combinatorial Surfaces — due 2/26

For the written part of your first homework you will do some exercises that will help familiarize you with basic descriptions and representations of combinatorial surfaces (simplicial surfaces, adjacency matrices, halfedge meshes), which will help prepare you to work with such surfaces as we continue through the course. (If any of this stuff seems abstract right now, don’t worry: we’ll use it over and over again to implement “real” algorithms starting in just a couple weeks!)

You must complete all 15 exercises from the Written Exercises section of Chapter 2 of the course notes. If these exercises seem scary and unfamiliar, and you don’t know where to start, that’s ok! This is not typical computer science stuff, and you shouldn’t necessarily know how to do it right off the bat. If you find yourself stumbling, please reach out to the instructor/TAs and your classmates on Piazza, Discord, or during the office hours/Q&A sessions. We’ll have you up and running in no time. 🙂

The assignment is due on February 26, 2021 at 5:59:59pm Eastern (not at midnight!). Hand-in instructions can be found on this page.

Reading 1: Overview of DDG (Due 2/11)

Due date: 10am Eastern on Thursday, February 11, 2021

Your first reading assignment will be to read an overview article on Discrete Differential Geometry. Since we know we have a diverse mix of participants in the class, you have several options (pick one):

  1. (pages 1–3) Crane & Wardetzky, “A Glimpse into Discrete Differential Geometry”.
    This article discusses the “no free lunch” story about curvature we looked at in class, plus a broader overview of the field.
  2. (pages 1–5) Pottman et al, “Architectural Geometry”.
    This article discusses the beautiful tale of how discrete differential geometry is linked to modern approaches to computational design for architecture, as well as fabrication and “rationalization” of free-form designs.
  3. (pages 5–9) Bobenko & Suris, “Discrete Differential Geometry: Consistency As Integrability”.
    This article provides another overview of discrete differential geometry, with an emphasis on nets and their connection to the notion of integrability in geometry and physics.

Though written for a broad audience, be warned that all of these articles are somewhat advanced—the goal here is not to understand every little detail, but rather just get a high-level sense of what DDG is all about.

Assignment: Pick one of the readings above, and write 2–3 sentences summarizing what you read, plus at least one question about something you didn’t understand, or some thought/idea that occurred to you while reading the article.  For this first assignment, we are also very interested to know a little bit about YOU! E.g., why are you taking this course?  What’s your background?  What do you hope to get out of this course?  What are your biggest fears about the course?  Etc.

Handin instructions can be found in the “Readings” section of the Assignments page.

Enjoy!

Lecture 1: Overview

Our first lecture provides motivation for the topics we’ll cover in the course, and takes a deep dive into one specific example (curvature of curves in the plane) to highlight some of the basic principles of discrete differential geometry. This example moves pretty fast and uses some ideas that we’ll study at a slower, more careful pace later on. For now, don’t worry too much about the details—the goal here is to just get a sense of what the course is all about!

Assignment -1: Favorite Formula

Part of your course grade is determined by participation, which can include both in-class participation as well as discussion here on the course webpage.  Therefore, your first assignment is to:

  1. create an account (you must use your Andrew email address, so we can give you participation credit this semester!),
  2. sign up for Piazza and Discord,
  3. read carefully through the Course Description and Grading Policy, and
  4. leave a comment on this post containing your favorite mathematical formula (see below).
To make things interesting, your comment should include a description of your favorite mathematical formula typeset in $\LaTeX$.  If you don’t know how to use $\LaTeX$ this is a great opportunity to learn — a very basic introduction can be found here.  (And if you don’t have a favorite mathematical formula, this is a great time to pick one!)
 
(P.S. Anyone interested in hearing about some cool “favorite theorems” should check out this podcast.)

Welcome to Discrete Differential Geometry! (Spring 2021)

Welcome to the website for 15-458/858 (Discrete Differential Geometry).  Here you’ll find course notes, lecture slides, and homework (see links on the right).

If you are a student in the class, register now by clicking here!

To participate in the class, you must register using your Andrew (CMU) email address.

A few things to note:

  • You will be subscribed to receive email notification about new posts, comments, etc.
  • You can ask questions by leaving a comment on a post.  If you’re apprehensive about asking questions in public, feel free to register under a pseudonym.
  • Otherwise, please associate a picture to your profile by registering your email address at Gravatar.com—doing so will help us better recognize you in class!
  • You can include mathematical notation in your questions using standard $\LaTeX$ syntax.  For instance, when enclosed in a pair of dollar signs, an expression like dollar\int_M K dA = 2\pi\chidollar gets typeset as $\int_M K dA = 2\pi\chi$.
If you encounter any problems while trying to use the website, please contact the TA (listed under the course description).