digitalQuiver
abram's projects
Gravitational Physics Simulation

Gravitational Physics Simulation

I created this project as a joint Honors Contract for my physics and programming classes. It serves to simulate the orbits of bodies of variable masses, locations, and initial velocities. Each frame, the forces between each body are calculated using Newtons's universal law of gravitation. Once the 3 dimensional force is calculated, the accelerations of each body can be calculated, and then the velocities and positions can be updated.

I learned a lot through this project, and was also able to apply a lot that I have been learning in my classes. I used interfaces, I used good object oriented design, I used file readers and much more from my programming class. I'm also particularly proud of also using things from my Calculus 3 class in this project. That being my 3D vector class which creates a 3D object to visually show vectors. The visual object is a vertical cylinder with a cone on top, then rotated about the cross product of a vertical vector and the (non visual) vector pointing at the target location.

This was my first time using Java FX, and my first time using Java educatedly, I learned a ton and am so excited to do more projects with these.

Abstract Wave Art

Abstract Wave Art

I started this project because I was fascinated by water caustics. (The light rays and reflections at the bottom of a moving body of water.) I started by trying to simulate waves, or atleast what looked like waves and I got stuck on this tangental project because I thought it looked so cool.

I started by simply adding different sine waves together (actually e^sin(x)), taking the concept from a video by Acerola. Each sine wave would have its own speed and frequency which was inversely proportional to it's size. This created a 2 dimensional map, showing the height of the added together waves at each point x.

It looked cool but it wasn't what I was going for so I took the derivative to find the slope at each point and turned it into a light map, now negatie slopes were dark and positive slopes were bright giving the impression of shadows.

Then I needed to be able to add waves going in different directions. I had no way to do this with the code I had at the time so I rewrote the entire project, making it it more object oriented utilizing classes. I thought a lot about how the best way to rotate the shadow maps I was creating. I finally decided to generate them similarily to how I already was because I would have to calculate e^sin(x) for each column instead of each pixel, which would be extremly fast. Then I would use the cv2 library to rotate the array.

This led to a new problem. Because I was rotating a rectangle it would have edges missing and the corners would go off the screen. I fixed this issue by calculating how much larger the rectangles needed to be so that when they were rotated, the distance to the side would match the distance to the corner.

After this I was able to rotate waves to any angle and add them together, and while it was only a shadowmap and not yet a water caustics map, I was very happy with it and enjoyed generating random designs and that's why I started the instagram account to post the videos I was creating with a only a little bit of math, creating such complex and interesting designs.

SabL-Cesium

SabL-Cesium

This idea was inspired by a simple conversation between me and my uncle about how the metric system while being used by NASA for all interplanetary research was created based on the Earth's proportions. And the second, the unit of time everyone uses and knows, seems so arbitrary, 1/60th of 1/60th of 1/24th of an Earth day (again Earth-centric).

We came to the conclusion that a new measurement system should be made, and it should be one that is universe centric so can be measured anywhere in the universe, and that is how I came up with SabL-Cesium.

Wikifacts YouTube Channel

5WikiFacts AI Video Project

I created this project when I realized how useful chatgpt was. I wanted to get some practice using it so I created a project using it to create videos that were summaries of wikipedia articles in 5 facts.

The project was a success in that I got over 70 subscribers and 19 thousand views, but it wasn't a success in how low quality the videos were. Many of them are confusing and some even have 10 facts instead of 5. It was all automated so I had no control over that.

It worked by using the wikipedia python library to get the content of a wikipedia page, and using the chatgpt plugin to get 5 fun facts from that article.Then it googled each fact and downloaded the picture, and used amazon's text to speech library to generate audio. Finally it combined all the content using cv2 and then via webscraper, it uploaded the videos to youtube shorts.

Mnist AI learning

MNIST Neural Network

This project started as a school project but I had to finish it on my own when I ran out of time.

I know it has been done before, but I wanted to experiment with neural networks, and especially learn how they worked, by making my own. Using the MNIST data set, I was able to program and train my own neural network to predict hand drawn digits.

Bezier curve app

Bezier Curve Swerve Paths

This project was designed to complement our FIRST robotics team's custom swerve drive and odometry programming.

By plotting points, we could create smooth curves and generate waypoints for the robot to follow. The different paths can be added together and saved, or exported into the robot code to be used for an autonomous run.

At the Arizona East 2023 Regional, we actaully won the autonomous award for demonstrating our unique way of programming our robot's autonomous period.

Isometric game

Isometric Game

This was a game that I've tried to create multiple times. It's been inspired by PolyTopia and the Earth 2 game on CoolMathGames.com.

I tried many things, both creating it as an isometric game and as a 2D game but each time as the project grew, I got overwhelmed by how badly set up the code was at first. I do intend on restarting this project, probably when I decide to finally learn C++.

For the isometric game I built a whole path finding algorithm so the little people could go back and forth and for the 2D version, I build a whole file/world saving system. I also experimented with perlin noise as I hope to add that in when I restart it.

The main idea of the game is a combination of SimCity, Civilization VI, and polytopia, I love polytopia but I want much more emphasis on world building and resource management like sort of exists in the CIV games. I also hope to start a devlog when I learn C++ and revisit this project.