Painterly Rendering Image Transformation
For my computational photography class, I wrote multiple functions that transformed images into artistic renditions. To get the result on the right using C++, I first created a brush-splatting function, implemented single-scale and two-scale rendering, and used importance sampling to vary stroke density based on an importance map. I then implemented an oriented rendering function, allowing for brush strokes to align with image contours using structure tensor and eigenvector calculations. To create a more finite image, coarse and fine strokes had to be blended based on sharpness maps derived from Gaussian blurring and frequency analysis, to avoid sharp details being lost. The final result of all of these implementations can be seen on the right, with varied brush strokes following image contours while preserving particular details from the original image.


Microcontroller LED Programming
For a class project, I worked on embedded systems programming with an ESP32 microcontroller and an 8x32 LED display. I first implemented GPIO control in C so I could individually toggle the LEDs, and used this to render ASCII characters based on switch states. I also programmed Snake to be playable on the LED display, including features such as food generation, collision detection, and wrap-around movement. I also programmed functions in Assembly to draw on the LED display, culminating in simulating the Game of Life on the display coded entirely in Assembly.
Memory Scramble
This project involved creating Memory Scramble, a networked multiplayer card-matching game where players simultaneously flip cards to find matching pairs on a shared board. I first designed the base singleplayer matching game, accounting for all possible game implementations for one player. I then allowed for concurrency, allowing for asynchronous operations to permit multiple players on the same board without out-of-sync board states. Key features included adding a map function to transform cards and a watch function to detect real-time board changes, improving responsiveness and interactivity. The final product was a fully functional game accessible via a web interface, demonstrating effective use of asynchronous programming and real-time interaction in a collaborative application.


Earthshatter
For a video games class, I created this game called Earthshatter over the course of a weekend. Earthshatter is a spleef-like game where you launch bombs at the enemy, aiming to destroy the tiles below your enemy and drop them out of the map. The game was made in Unity, and the background assets were created in Blender. It was also designed to handle multiple controller inputs, so both players weren't constrained to small sections of the keyboard to play the game.
Strobed Water Piddler
MIT's Edgerton Center has many well-known experiments, one of which is known as a water piddler. By oscillating a motor at a frequency of 60 Hz and strobing a light at a matching frequency, it's possible to create the illusion of individual floating drops in the air. Using an Arduino microcontroller and a series of LEDs, we programmed the light to strobe at a rate matching the pump's frequency, giving the illusion shown to the right. Additionally, for our project, we modified the original large-scale design to be portable for exhibitions and showcases. Instead of dropping straight down, our piddler shoots water in an arc, and is a wholly contained system within a 1' x 2' container.
