<Interactive Fractal>
Inspiration
I was inspired by the fractal wall at the Museum of Math. I wanted to develop a interactive wall where people can create their own fractals with customized shape.

Process
At first, I wanted to develop a shape detection using fingers like the figure below. However, the finger detection using kinect camera was so limited under specified environment. It requires a blank white or black background. Therefore, I decided to use OpenNI hand detection instead, and draw shapes along with the hand motion. After letting users draw shapes over air in front of hand detection, I require users to hold their hand still for 3 seconds to let the program know that drawing shape is done. Then, the program a.k.a openframeworks stores hand drawn shape as vertices and duplicate them multiple times in order to create a fractal based on drawn shape.
Technology
I used Kinect+OpenNI library to detect hand motion and wrote a program in Openframeworks.
Documentation Video
Interactive Fractal from Ju Young Park on Vimeo.
Code
I will upload the github later.
My original idea was to develop a project using recursive or L-system algorithm and kinect camera sensing. My idea was to build human forest. I wanted to turn human body into stem of tree and create branches recursively around the arms.
Here are the sketches
However, I saw a similar project at the Museum of Math.

Fortunately, I was inspired by the fractal wall at the museum so that I could develop a new ides. Basically, I decided to make interactive fractals.

With shape detection, users can create shapes with their fingers. The created shape becomes a basis of the fractal.

Technical Issues:
Object Detection + Shape Detection
Processing or Openframeworks
Camera Sensing
General
For this project, Jess and I created an interactive wall for New Year’s Party. Participants of the party are able to text their new year’s resolutions and display them on the wall. This interactive wall changes to the countdown scene at the midnight, and after then, the wall becomes a sound-responsive wall for DJ performance. The colors and the size of the wall are directly responsive to rhythms and beats of the playing music.
Interactive Fractal from Ju Young Park on Vimeo.
Code
https://github.com/juyoungp/SpatialMedia
For my midterm, I was inspired by TextRain, which created by Camille Utterbeck and Romy Achituv.

For my assignment 4, I created rain drops falling from top of the screen. I improved the concept of rain drops to interactive bubbles in order to make the project more interactive and attractive to kids. I decided to use particle system to make falling bubbles to spread out into smaller bubbles. I used brightness detection to detect moments when bubbles touch my body. Originally, I wanted to use kinect for this project, but I failed to do so since I struggled a lot with getting pixels from kinect.

Overall, I am satisfied with my final outcome. I will upload the code as soon as possible.
For this week, I spent most of time to figure out how box2D works, because I haven’t used it before now. What I tried to make was a particle system of bunch of people using box 2D. Incorporating two different convex shapes to look like a human so that the shape looks like a south-park character. However, it was pretty hard to do it. What I am trying to do next is to make texture for each shape.

Prototype 1 : One-to-One
Prototype 2: Many-to-One
Research
While I was researching about temporary interactive installations that consist with technology, I found my Augmented Reality projects interesting. Augmented Reality is a new technology that attracts many audience, so it is useful for advertising events. I found this event, held in South Korea for just 9 days in 2011. A record company launched this event in order to advertise the newest album of one of its singers. In the event, audience is invited into a black square zone, where the users are detected, in order to learn dance with virtual singers. One or more users are welcome to join the activity. Although the videos were pre-recorded by the artists to fit the exhibition, fans are able to experience the optical illusion as if singers are actually on location and dancing with them. The target audience for the event seems to be all-range of ages from children to adults.
According to the article about the event, it was very successful in a way to invite more audience to experience such an interaction.
You can find more information HERE
1) Citizen Science Projects
DIY & Cell Slider Similarities
- Both let users to go through experiments step by step
- Users are allowed to start and finish whenever they want to.
- They all have simple “one-click” interface so that user can follow easily.
- Cell Slider has more specific tutorial than DIY.
- DIY contains some of vague images that users can often get confused with. On the other hand, Cell Slider contains much graphically vivid images.
- DIY allows only one type of exercise with the same kind of data, while Cell Slider offers three kinds of exercises with different kinds of data.
2) Chosen Scientist.
After talking to Francois and Peiqi, I’ve decided to (hopefully) work with Paul Chaikin on DNA Origami.
General Idea
For Oscillation homework, I was inspired by a cartoon-like surfing wave. I decided to create generating wave form with a click button. I wanted to create a surfing man along with the wave, but I didn’t have time to do it. I will try to make one later.
Inspiration
![]()
Screenshots
Video
I have used Attraction + wind + gravity for making a kite flying over wind. Whenever mousePressed, blue sky appears on the sketch, and it blows wind to right and up. Therefore, a girl’s kite flies over the wind! Whenever mouseReleased, there is no more of blue sky, and kite moves along the attraction to the girl and the effects of the previous wind.
Code
Kite k;
Attractor a;
void setup(){
size(600, 600);
k = new Kite();
a = new Attractor();
}
void draw(){
background(255);
noStroke();
rect(0, 0, width, height/2.5);
PVector gravity = new PVector(0, -0.020);
PVector wind = new PVector(0.015, 0);
PVector force = a.attract(k);
if(mousePressed){
k.applyForce(gravity);
k.applyForce(wind);
fill(139, 239, 255);
}
rect(0, 0, width, height/2.5);
k.applyForce(force);
k.update();
k.display();
a.display(k);
k.checkEdges();
}
class Attractor{
float mass;
float G;
PVector location;
PImage girl;
Attractor(){
location = new PVector(width/2, height/2);
girl = loadImage("girl.png");
mass=20;
G =1;
}
PVector attract(Kite k){
PVector force = PVector.sub(location, k.location);
float d = force.mag();
d = constrain(d, 5.0, 25.0);
force.normalize();
float strength = (G * mass * k.mass) / (d * d);
force.mult(strength);
return force;
}
void display(Kite k){
//ellipseMode(CENTER);
stroke(0);
noFill();
image(girl, location.x-50, location.y);
curve(location.x+35, location.y+50, location.x+20, location.y+15, k.getLoc().x+30, k.getLoc().y+20, k.getLoc().x+30, k.getLoc().y-20);
}
}
class Kite{
PImage kite;
PVector location;
PVector velocity;
PVector acceleration;
float mass;
Kite(){
kite = loadImage("kite.png");
location = new PVector(width/2, height/2);
velocity = new PVector(1, 0);
acceleration = new PVector(0,0);
mass = 1;
}
void applyForce(PVector force){
PVector f = PVector.div(force, mass);
acceleration.add(f);
}
void update(){
velocity.add(acceleration);
location.add(velocity);
acceleration.mult(0);
}
void display(){
image(kite, location.x, location.y);
}
PVector getLoc(){
PVector newLoc = new PVector(location.x, location.y);
return newLoc;
}
void checkEdges(){
if(location.x > width){
location.x = width;
velocity.x *= -1;
} else if (location.x < 0){ velocity.x *= -1; location.x = 0; } if(location.y > height){
velocity.y *= -1;
location.y = height;
}
}
}








