Pen Based Computing
Assignment 2

Due Wednesday, February 20, 11:55pm


The goal of this project is to build a system that performs low-level stroke interpretation, smoothing, beautification and, optionally, some low-level recognition.  You will find and implement algorithms in the literature to solve these problems.

The idea behind this assignment is for you to get some experience with low-level stroke processing and the challenges involved.  Exactly what you implement will depend a little on what you decide to implement, so this problem description is pretty general.  It lists a set of high-level guidelines, tasks and expectations, but there is a lot of room for experimentation and creativity.  As always, I list plenty of extensions that I encourage you to play around with.

NOTE: This assignment is currently a "work in progress" so that we can start talking about it in class.  It will be refined over the next week based on our discussions.

Basic Functionality [60 points]

You should implement a WPF application that beautifies the users strokes in the following way:

Notes on Basic Functionality

Note that the points for the above section are given only for correctness.  

Advanced Functionality

For extra credit, implement any or all of the following extensions:


Testing and Writeup [40 points]

A significant part of this assignment is analyzing how well your system works, in addition to implementing the above algorithms. In your writeup, in addition to a basic README, I am looking for two things: a justification of your approach, and an analysis of its strengths and weaknesses.

Readme file

In a file called README.txt describe how to run your program, any missing features or bugs that you are aware of, and any extra credit that you implemented.

Design/approach Justification

In the first part of your writeup, you will analyze your design.  In a file called "Design.txt", write up answers/explanations for the following:
  1. How did you approach each of the technical problems above (corner finding and beautification), and why?  What were the most challenging parts of this task and how did you solve these challenges?
  2. Give an overview and critique of your design from a software engineering perspective.  How did you organize your data?  What worked well and what would you change if you had to do it over again.
  3. What was the most difficult part of this assignment and why?

Testing and Results

In the second part of your writeup, you will report on how well your algorithms perform.  For this assignment we will focus on qualitative results, but for extra credit you have the option of also providing quantitative results.

First, select the data you will test on.  While some of your discussion can be based on your own use of the system, you should also include results on pre-collected data and interactive sessions with someone else.

Pre-collected data
Here are two datasets that you can use in your testing:
The family tree data may contain some ellipses, but you should be able to find data that does not.
Select several sketches from the above datasets OR collect your own data by asking your friends to draw sketches in your ink collection application that you wrote for assignment 1.  5-10 sketches should be enough for this part.

Run the files through your program and note what works well and what doesn't.  How many corners does it miss?  Does it find too many corners?  Can you identify when this happens?  What constraints does it find reliably?  Which ones does it miss?  Etc...

Interactive data
Now, get a friend or two to interact with your application for a few minutes and again note what works well and what doesn't.  Also observe whether your friend is able to adjust to your system to improve the system's performance.

Write up all of your results in a file called Results.txt.  Include your observations of both datasets in your results.  You will probably have 1.5-2 pages of results.

Criteria

Your writeup will be graded on the following criteria: