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

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

## Double reflections and rotation minimizing frames

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

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.

## Reaction-diffusion simulator

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

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

Visualizes the growing neural gas algorithm in real-time.

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

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

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

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

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

My very first endeavor into the world of graphics APIs.

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

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