Pixel Sorting
Pixel Sorting
Rust Graphics

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.

»
Efficient Reformation
Efficient Reformation
C++ Multi-agent Systems

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?"

»
Palette Extraction
Palette Extraction
JavaScript Graphics Data Analysis

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.

»
Rigid Body Physics in Two Dimensions
Rigid Body Physics in 2D
TypeScript Physics Computational Geometry

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.

»
Pitch Detection
Pitch Detection
JavaScript 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. 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.

»
Mandelbrot Set Exploration
Mandelbrot Set Exploration
C++ OpenGL Graphics

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.

»
Reynolds' Steering Behaviors
Steering Behaviors
JavaScript Artificial Intelligence

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.

»
Pacman in Unity
Pacman in Unity
C# Unity Graphics Artificial Intelligence User Interface

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.

»
Curve Compression
Curve Compression
TypeScript Graphics

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.

»
Diamond-Square Terrain
Diamond-Square Terrain
C++ Procedural Content Generation

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.

»
Game of Life
Game of Life
Javascript Cellular Automata

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!

»
Artificial Intelligence for Pong
AI for Pong
Java Artificial Intelligence

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 on the GPU
Voronoi on the GPU
Javascript WebGL Computational Geometry Graphics

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 Tracer
Ray Tracer
C++ Graphics

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.

»
Higher-order Bezier
Higher-order Bezier
Javascript Graphics

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!

»
Download Accelerator
Download Accelerator
Rust Computer Networks

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.

»
New Tab Tweaker
New Tab Tweaker
JavaScript WebExtensions User Interface

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.

»
k-Means Clustering
k-Means Clustering
C++ Python Data Analysis

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).

»