Pixel sorting is a family of image effects wherein pixels of an image are sorted by a specified property along some dimension. Their sorted order is used to derive modifications to the image.

Pixel sorting is a family of image effects wherein pixels of an image are sorted by a specified property along some dimension. Their sorted order is used to derive modifications to the image.

In this project we take the minimum-cost assignment problem, and apply it to the problem of efficient reformation, which reads: "What is the most efficient way for a unit of vehicles to transition from one formation to another?" We solve it with our own implementation of the Hungarian Algorithm and build a demo showcasing the results.

In this project we take the minimum-cost assignment problem, and apply it to the problem of efficient reformation, which reads: "What is the most efficient way for a unit of vehicles to transition from one formation to another?"

A striking image can often serve as good source of inspiration for new designs. However, there is no obvious method for capturing the coloring of a particular image in a small-sized palette. In this project we combine intelligent sampling techniques and data analysis to come up with a solution.

In this project we develop a simple, fast method for the detection of dominant colors and their rank in a given image.

This project's goal is simple: to build a bare-bones physically-based simulation for disc-shaped rigid bodies supporting accurate collision detection/resolution, and capable of simulating a decently large amount of entities utilizing spatial partitioning methods.

This project's goal is simple: to build a bare-bones physically-based simulation capable of accurate collision detection/resolution for a decent amount of rigid bodies.

In this project we develop a simple signal processing method for pitch detection, and then use it to derive musical notes from whistling in real time. It was intended as a personal refresher for me so that I could begin work on another related project which also has to do with audio signal processing.

In this project we develop a simple signal processing method for pitch detection, and then use it to derive musical notes from whistling in real time.

The Mandelbrot set is a mathematical set that is also a fractal. To visualize its structure, points in the complex plane can be colored based on how close a they are to being included in the set. Images generated in this manner reveal the complexity and beauty of the fractal patterns hidden within the Mandelbrot set.

Explore the Mandelbrot set — a mathematical set that is also a fractal — in real time.

In this influential paper Reynolds introduces a set of simple, essential steering behaviors for virtual agents. Extending and combining these elementary behaviors with one another produces an interesting collection of navigation methods.

In this paper Reynolds introduces a set of simple steering behaviors for virtual agents. We implement some of them and see how they may be combined and extended to produce interesting results.

This project was intended to be a self-exercise for me to get familiar with Unity. It is a simple implementation of Pacman, the classic arcade video game. Work on this project proved to be an excellent learning experience.

This project was intended to be a self-exercise for me to get familiar with Unity. It is a simple implementation of Pacman, the classic arcade video game. Work on this project proved to be an excellent learning experience.

Curves must often first be expressed as a sequence of sampled position vertices before they can be rendered. However, naive ways of sampling general curves often result in vertex-sequences that are larger than necessary. For certain curves, it is possible to compress the original sequence by a significant amount without having the viewer notice a difference.

Represent parametric Curves through a sequence of vertices efficiently.

The Diamond-Square algorithm is a heightmap generation procedure for the synthesis of realistic-looking digital terrain.

Generation of realistic-looking digital terrain with the diamond-Square algorithm.

Conway's Game of Life is a cellular automaton where cells live on an infinite grid and can assume one of two states: dead or alive. Simple rules govern the evolution of the population and yet give rise to surprisingly complex patterns!

Conway's Game of Life is a cellular automaton. Simple rules govern the evolution of the population and yet give rise to surprisingly complex patterns!

Pong is a classic arcade videogame from the 70's. At the time of this project's making, it has been a long while since I've done work related to either Java or artificial intelligence in general. Getting back on track with an old classic such as Pong proved to be the refresher course I needed.

Developing a sufficiently-challenging artificial intelligence for Pong, the classic arcade videogame from the 70's.

Voronoi diagrams partition space into cells. They are a fundamental concept in computational geometry, with broad applications spanning multiple disciplines. Usually, they are computed explicitly. But there is an interesting alternative: Exploiting graphics hardware to convert a three-dimensional scene into a two-dimensional diagram.

Exploiting graphics hardware to convert a three-dimensional scene into a two-dimensional Voronoi diagram.

Ray tracing is an image-synthesis method. It simulates the way light rays travel from light sources, bounce around the scene, and finally reach the eye. It is computationally expensive but yields highly-realistic images.

My pet ray tracer. Ray tracing is used as an image-synthesis method that is computationally expensive but yields highly-realistic images.

Bezier curves are everywhere. Their simple definition and flexibility makes them oftentimes quite useful for animation and other applications in computer graphics. Lower order curves are sufficient for the vast majority of cases, and although higher-order curves are generally too complex to be useful, they do make for beautiful art!

Compute and render higher-order Bezier curves to make beautiful string art!

A command-line-based application that is able to provide accelerated download of content by fetching and processing different portions of it concurrently. This project was intended to be an exercise as part of my learning to program in the up-and-coming systems language Rust.

A command-line-based application that is able to provide accelerated download of content by fetching and processing different portions of it concurrently. This project was intended to be an exercise as part of my learning to program in the up-and-coming systems language Rust.

This is my first attempt at development of a WebExtension. It gives the user the option to override a browser's New Tab behavior and appearance.

A WebExtension that gives the user the option to override a browser's New Tab page behavior and appearance.

The k-means clustering algorithm is a widely used tool in data mining. It classifies observed data-points into distinct categories (clusters) and derives the characteristic features of each cluster.

The k-means clustering algorithm is a widely used tool in data mining to classify observed data-points into distinct categories (clusters).