Projects

When I find a particular topic interesting, I like to create a program to visualize or calculate it. All of the projects listed here were written by me, in C++, directly using OpenGL and Direct3D. When I find the time, I will port some of the projects to Vulkan.

File encipherment utility

Performs authenticated encryption of files using Xoofff-SANE. It allows any length of key to be specified down to the granularity of a single bit. It can represent the key in a wide range of bases, including a word-based scheme complete with visual cues, to aid in key entry, storage and memorization. Supports padding of input plaintext to nearest power-of-two length for length obfuscation. Supports armoring of enciphered output for systems that are not 8-bit clean. Written in pure unmanaged C++ using Win32 for window creation and event handling and Direct2D/DirectWrite for custom UI rendering.

FileCrypt FileCrypt FileCrypt FileCrypt FileCrypt FileCrypt FileCrypt

Pythagorean-hodograph curves

Pythagorean-hodograph curves form a remarkable subclass of polynomial curves that have polynomial speed functions, and thus polynomial distance (arc length) functions. This allows for performant and stable arc-length parameterization, and admits the calculation of continuous rotation-minimizing frames. I learned about PH curves through the quaternion model, but have since discovered how to simplify the model to a single reflection. Interestingly, this allows for the natural generalization of PH curves to higher dimensions.

Pythagorean-hodograph curve Pythagorean-hodograph curve Pythagorean-hodograph curve Pythagorean-hodograph curve Pythagorean-hodograph curve Pythagorean-hodograph curve

Double reflections and rotation minimizing frames

Efficiently and accurately calculates discrete rotation minimizing frames of an arbitrary parametric curve using the double reflection method.

Double reflection Double reflection Double reflection Double reflection Double reflection Double reflection

Real-time parametric surface visualizer

Enables the user to visualize arbitrary parametric surfaces in the form <x(s,t), y(s,t), z(s,t)>. Initially, this program computed a single graph on the CPU and displayed the static results using OpenGL. Since then, I have moved the computation onto the GPU. The result is a real-time dynamic visualization that can vary with time.

Grapher Grapher Grapher Grapher Grapher Grapher

Reaction-diffusion simulator

Carries out and visualizes various types of reaction-diffusion simulations.

Reaction-diffusion Reaction-diffusion Reaction-diffusion Reaction-diffusion Reaction-diffusion Reaction-diffusion

Self-organization map

Experimentations with self-organizing maps as a way to classify and project data to lower dimensions.

Self-organizing map Self-organizing map Self-organizing map Self-organizing map Self-organizing map Self-organizing map

Growing neural gas

Visualizes the growing neural gas algorithm in real-time.

Growing neural gas Growing neural gas Growing neural gas Growing neural gas Growing neural gas Growing neural gas

Cellular automaton

Experimentation with cellular automaton (CA) and compute shaders. Interestingly, CAs share similarities with cryptographic permutations.

Cellular automaton Cellular automaton Cellular automaton Cellular automaton Cellular automaton Cellular automaton

Scrabble solver

Uses a clever graph data structure (GADDAG) to quickly enumerate all solutions given an arbitrary Scrabble board, rack and dictionary.

Scrabble solver Scrabble solver Scrabble solver Scrabble solver Scrabble solver Scrabble solver

Boggle solver

Uses a DAWG data structure to quickly enumerate all solutions given an arbitrary Boggle board. It also supports wildcards and large grids.

Boggle solver Boggle solver Boggle solver Boggle solver Boggle solver Boggle solver

Vector field visualizer

Calculates and renders a real-time visualization of a vector field given an arbitrary parametric function.

Vector field Vector field Vector field Vector field Vector field Vector field

Tessellation

My take on TesselMania. Given an arbitrary shape, various types of tessellations can be realized.

Tessellation Tessellation Tessellation Tessellation Tessellation Tessellation

Klondike solitaire

My very first endeavor into the world of graphics APIs.

Klondike solitaire Klondike solitaire Klondike solitaire Klondike solitaire Klondike solitaire Klondike solitaire

Mahjong solitaire

My take on Mahjong solitaire, complete with a map editor. Applies normal mapping to each tile to add fine detail.

Mahjong solitaire Mahjong solitaire Mahjong solitaire Mahjong solitaire Mahjong solitaire Mahjong solitaire

Procedural jigsaw

A simple jigsaw game, but with code to dynamically and randomly generate the jigsaw pieces.

Procedural jigsaw Procedural jigsaw Procedural jigsaw Procedural jigsaw Procedural jigsaw Procedural jigsaw