MY PORTFOLIO

computer graphics

Validating the existence of transiting exoplanets by modeling their phase-folded light curves

There exist certain exoplanets, possessing certain atmospheric/surface-level conditions, that might endear themselves toward sheltering liquid water, and in turn, extraterrestrial forms of life. These questions of habitability were foundational to NASA's 2009-2018 Kepler mission, whose telescope detected roughly 2,600 exoplanet candidates. Among them was Kepler-1649c: now renowned as a particular habitable exoplanet, it was first misclassified as a False Positive by an automated screening procedure that NASA calls the Robovetter.

Propelled by Kepler-1649c's misclassification, I developed a program that would remodel the phase-folded light curves of exoplanet candidates, improving upon the original light curves extracted by the Kepler pipeline. By extracting light curves from a set of 20 different apertures, all the while optimizing parameters via Simple Aperture Photometry (SAP) to increase the curve's photometric precision, I was able to arrive at an accurate classification of Kepler-1649c — and many other sample candidates — as bona fide exoplanets.

Building interactive, vectorial representations of fluids in motion

A non-suspended, animated fluid obeys dynamics governed by the Navier-Stokes equations: a set of partial differential equations, that this project discretizes for a two-dimensional grid. By developing high-performance, computational code for fluid simulation, and logging the x-velocities and y-velocities of the subject at points across a grid, I sought to augment a "mesh-like" representation with a vectorial one. I then displayed my results within an interactive matplotlib interface, allowing users to drag, zoom, and save the product.

This project was completed under a research internship with the Dartmouth Visual Computing Lab. I presented its results at the 28th annual Karen E. Wetterhahn Science Symposium.

Algorithmically solving a randomized maze, & Building a GUI for its overworld, 8-bit visualization

As a final project for a course in software design and implementation, I collaborated with two other students to create a client application that would "solve" for the convergence of several avatars in a server-generated maze. The server would randomize the number of avatars we had to work with, the locations that these avatars "spawned" at, and the locations of the walls that made up the maze. Our algorithm used a Right-Hand Rule heuristic optimized by Manhattan distances and breadcrumbs. It was successful in solving for the convergence of up to 10 avatars in a 9x9 (maximal size) maze.

For additional credit, I singlehandedly built an animated GUI to visualize our algorithm's solving process. By creating 10 overworld, 8-bit sprites to represent avatars, and constructing the maze as a series of connected lines, I was able to log each step as a frame in the animation.


game development

CrabQuest (GitHub)

CrabQuest is a point-and-click game about an unexpected symbiosis between a giant crab monster and a family of moles. It was — is, rather — being made in Unity.

Current features: a non-humanoid, third-person player; a dialogue system featuring various NPCs; multiple buildings to enter, and a sprawling winter wonderland to explore; a minimap of the overworld; an inventory system; a pause menu; and a heartwarming, albeit barbones, little story.
Features in development: more areas to explore in the overworld; a quests system; minigames for item retrieval; more NPCs; a main menu; and, well, more of a story.


coming soon

Text visualizer
  • An augmented eReader for people whose primary mode of learning is visual (like me!).
  • Extracts visual information from keywords in the provided .pdf/.epub, and constructs a 3D vignette (generated through Unity) from that information, per page.
  • Also functions as an accessibility tool; certain minds, such as those with ADHD, can sometimes learn best when provided with tangible, material information.
  • tarot.me
  • Prompts user to ask a ~150-character, open-ended question.
  • Parses input: removes stop words, and performs NLTK sentiment analysis to identify the user's needs; i.e. "Why am I anxious about...?" indicates desires for clarity and calm.
  • Performs a digital tarot card reading for the user (limited to Major Arcana): after shuffling, and prompting the user to pick out three face-down cards, reveals the nature of the cards, and offers a textual interpretation of their meaning based on their initial question.
  • art

    All done in Procreate. Assembly in progress.

    Hover over each image for more details!

    (The pixel floaties you see above are also made by yours truly.)