Marynel Vázquez – Schotter

by Marynel Vázquez @ 3:23 am 12 January 2011

Schotter in Processing.js:

Schotter in Processing (now with a little of color):

(using the following code:)

// Constants
int MAX_DISPLACEMENT = 15;
int MAX_ROTATION = 45;
int MARGIN = 30;
 
// Processing Setup
void setup(){  
    smooth();
 
    size(240 + 2*MARGIN,440 + 2*MARGIN);
    background(255);
    noLoop();
    randomSeed(millis());
}
 
// Main drawing function
void draw(){     
    float rand_rot = 0.0;
    int rand_dis = 0;
    int r = 0, g = 0, b = 0;
 
    for (int j=0; j<22; j++){
 
	for (int i=0; i<12; i++){
 
	    // set up rotation and displacement
	    rand_rot = (random(-MAX_ROTATION,MAX_ROTATION))*j/22;
	    rand_dis = floor((random(-MAX_DISPLACEMENT,MAX_DISPLACEMENT))*j/22); 
 	    if ((i == 0 && rand_dis < 0) || (i == 11 && rand_dis > 0)){
		    rand_dis = -rand_dis;
	    }
 
	    // draw rectangle (col=i, row=j)
	    pushMatrix();
	    translate(MARGIN + 20*i + 10 + rand_dis, MARGIN + 20*j + 10 + rand_dis);
	    rotate(rand_rot*PI/180.0);
	    noFill();
            r = floor(random(50,255)*2/(22-j+1));
            g = floor(random(50,255)*2/(22-j+1));
            b = floor(random(50,255)*2/(22-j+1));
            stroke(r,g,b);
	    rect(-10, -10, 20, 20);
	    popMatrix();
 
	}
    }
}

Schotter in OpenFrameworks (with some mouse interaction this time):

Caitlin Boyle:: Schotter

by Caitlin Boyle @ 3:23 am

Schotter w/Processing.js

Processing w/plain old Processing

//Caitlin Rose Boyle
// January 10
// intart compdesign
//Schotter Reproduction
int squareSize = 30;

void setup()
{
size(((squareSize * 12) +60), ((squareSize * 24) + 60));
background (255, 255, 255);
noLoop();
noFill();
}

void draw()
{
drawSchotter();

}

void drawSchotter()
{

rectMode(CENTER);
int Counter = 0;
//loop rows
for (int y = 0; y < 24; y++){ //draw one row for (int x = 0; x < 12; x++) { //draw one square pushMatrix(); translate(squareSize*x + random(Counter++)/100 + 30 , squareSize*y + random(Counter)/100 + 30); rotate(PI*random(-Counter, Counter) / 1000); rect(15, 15, squareSize, squareSize); popMatrix(); } } } Schotter in openFrameworks [youtube clip_id="5WgBodZN8Qo" width=”635" height="501"] //Caitlin Rose Boyle // January 11 // intart compdesign //Schotter Reproduction OF int squareSize; int square_counter; int translatex; int translatey; int rot; //-------------------------------------------------------------- void testApp::setup(){ square_counter = 0; squareSize = 30; ofBackground(255,255,255); ofSetWindowTitle("Schotter Boyle"); ofNoFill(); ofSetColor(0x000000); ofSetRectMode(OF_RECTMODE_CENTER); ofEnableSmoothing(); ofSetFrameRate(60); } //-------------------------------------------------------------- void testApp::update(){ ofSeedRandom(1347); square_counter = 0; } //-------------------------------------------------------------- void testApp::draw(){ // Loop over all columns for (int y = 0; y < 24; y++) { // Loop over all rows for (int x = 0; x < 12; x++) { ofPushMatrix(); // translate: offset random jitter border ofTranslate(squareSize*x + ofRandom(0, square_counter)/10 + 30 , squareSize*y + ofRandom(0, square_counter)/10 + 30); ofRotate(PI * ofRandom(-square_counter, square_counter)/30); // Draw the square ofRect(squareSize/2, squareSize/2, squareSize, squareSize); ofPopMatrix(); square_counter++; } } }

shawn sims-lookingOutwards-3

by Shawn Sims @ 3:13 am

Dirk van der Kooij is a recent graduate from the Design Academy of Eindhoven where he began to investigate the potential for robotic fabrication and 3d printing to be coupled and to produce full scale furniture. Unlike much of the work done on these machines, this hints at an extremely fertile territory of design, interaction, and process. Currently, 3d printers are limited in scale because of the technologies and cost. They also take quite a bit of time even to produce desktop size objects. As this research hints, we may soon be able to download a file and print our own furniture and objects. I beleive this area of research is extremely important because automated manufacturing is becoming more viable as it leaves the manufacturing lines and enters our schools and even homes. The next step is to take a critical stance as to what these tools will be making and how we as designers may go about creating design process’ that incorporate these new tools and a new design philosophy that comes along with it.

Schotter

by honray @ 3:06 am

The .JS version:

the Jar version:

the OpenFrameworks version:

code:

public final int width = 20;
public final int height = 20;

public void setup() {
size(400,500);
background(0xffffff);
noFill();
noLoop();
}
public void draw() {
for(int x = 0; x < 12; x++) { for(int y = 0; y < 20; y++) { translate(x*width,y*height); float random = random((float)y/5); rotate((random(2f)-1f)*random*random); rect(0,0,width,height); resetMatrix(); } } }

shawn sims-lookingOutwards-2

by Shawn Sims @ 2:55 am

Philip Beesley is an architect that produces sculptures that blur the line between biology and architecture. They are responsive, kinetic, and offer unique interactions with the users of the space. Endothelium is a project that is designed to be deployed across a landscape and it burrows itself in by collecting energy from the wind and then charging organic batteries that turn small vibrators. The feet of the tripods begin to go deeper into the soil and the entire geotextile starts to merge with the earth below.

Projects like this become very interesting when you begin to discuss the potential for highly adaptable software to couple this responsive hardware. New landscapes and architecture become possible when our static spaces are left behind and replaced with ones like Beesley imagines. After all, why should we be designing static environments for our dynamic bodies and lifestyles?

find out more about the work of Philip Beesley here

SamiaAhmed-TextRain

by Samia @ 2:49 am

 
//Samia Ahmed, samiaa@andrew.cmu.edu
//A reproduction of Text Rain by Camille Utterback
//Carnegie Mellon University: 51-482
//January 2011
 
import processing.video.*;
Capture capture;
char poem[][] = {{'I', ' ', 'l', 'i', 'k', 'e', ' ', 't', 'a', 'l', 'k', 'i', 'n', 'g', ' ', 'w', 'i', 't', 'h', ' ', 'y', 'o', 'u', ',' },
                 {'s', 'i', 'm', 'p', 'l', 'y', ' ', 't', 'h', 'a', 't', ':', ' ', 'c', 'o', 'n', 'v', 'e', 'r', 's', 'i', 'n', 'g', ',' }};
int poemLength = 24;
int position[][] = new int[2][poemLength];
int speed[][] = new int[2][poemLength];
color captureColor;
 
 
 
void setup() {
 
  size(640, 480);
  background(0, 0, 0);
  capture = new Capture(this, width, height, 30);
 
  //sets the speed at which the letters drop, and initial position
   for (int i = 0; i < 2; i++){
    for (int k = 0; k < poemLength; k++){
    speed[i][k] = int(random(4, 10));
    }
  }
 
}
 
void draw() {
 
  pushMatrix();
  scale(-1.0, 1.0);
  image(capture, -capture.width, 0);
  filter(GRAY);
  popMatrix();
 
  for (int i = 0; i < 2; i++){
    for (int k = 0; k < poemLength; k++){
      //these set when the red and blue texts are predominant
      if (i == 0 && (second() > 0 && second() < 35)){
      if(millis()%100 == 0)
        position[i][k] = -1000;
      }
      if (i == 1 && (second() > 30 || second() < 5)){
        if (millis()%100 == 0)
        position[i][k] = -1000;
      }
 
 
      captureColor = get(width/poemLength*k+(width/poemLength), position[i][k]+speed[i][k]);
      //moving the letters
      if (position[i][k] > height || random(1000) > 990) //out of bounds, and random deletion
        position[i][k] = -30;
      else if (position[i][k]+speed[i][k] >= height || position[i][k] < speed[i][k] || red(captureColor) > 100) //legal moves
        position[i][k] = position[i][k]+speed[i][k];
      else {
       while(red(get(width/poemLength*k+(width/poemLength), position[i][k]-speed[i][k])) < 100 && position[i][k] > 0) //jumping out of black
        position[i][k] = position[i][k]-speed[i][k];  
        }
 
 
      if (i == 0){
        fill(255, 0, 0);  
        text(poem[i][k], width/(poemLength+2)*k+width/poemLength*2.5, position[i][k]);
      }
      else if (i == 1){
        fill(0, 0, 255);
        text(poem[i][k], width/(poemLength+2)*k+width/poemLength, position[i][k]);
      }
    }
  }
 
}
 
void captureEvent(Capture capture) {
  capture.read();
}

SamiaAhmed-LookingOutwards-3

by Samia @ 2:49 am

http://soytuaire.labuat.com/

This is a simple website that lets you “paint” the music video to the song “soy tu aire.” Over all, its functions are fairly limited “spontatenous” imagery arises from your cursor controlled paintbrush at predetermined intervals in a predetermined sequence. Though this piece is supposed to be interactive (and it is), it is not particularly generative. I find it very effective, nevertheless, because of it’s high level of refinement. The creators carefully chose and created their images, and their curation lets the viewer experience and “make” a painting with a high caliber of finish. This resonates with me because I find that I have a hard time with the intersection of letting code create something wonderful, and then stepping in as a designer to tweak things, or mold this outcome.

SamiaAhmed-LookingOutwards-2

by Samia @ 2:49 am

http://www.temporary.cc/

temporary.cc is a website that deletes itself as visitors visit the url.

When I first found out about this website over a year ago, I used to visit it with some frequency for several months. The original website itself was beautiful, as well as the subsequent versions of it, created as a single character was randomly removed from the html/css on each visit. Because this website is ever-changing, it invites its viewers to return over a long period of time to see how it has degenerated. Whenever I used to visit it I felt two feels – one of not-so-secret hope that my visit would be the one to “radically” change the website from the last time I viewed it, and another of greed – I felt bad every time I refreshed, because I shortening the magic, and robbing others of the experience of seeing the website disappear.

Overall, I think the website is fairly successful. It’s a beautiful degeneration. Of course, by now, the html is so mangled that it’s a non-readable mess of halves of divs and “s and >s that don’t do anything. And while that is certainly part of the process, I would hope that somewhere there is a complete record of the degeneration, because it’s current state does not reflect it’s previous beauty. Perhaps, however, that is the point of these things. If you missed out, you missed out, and this piece of the internet is not forever.

SamiaAhmed-LookingOutwards-1

by Samia @ 2:49 am

Just Landed – Jer Thorp

Just Landed mapped the travels of twitter users, by searching for the words “Just landed in” in tweets, and comparing the location to that of the user’s listed hometown.
I was first attracted to this piece because of it’s simply beauty. It very, very well excuted, which really allows the viewer to see the information, as opposed to looking and a table of information and disregarding it. This piece struck me for two reasons. First, it makes me very very aware of how public the internet is. Even though I may only have 30odd followers on twitter does not meant that my tweets are invisible to everyone. Sharing flight and vacation information in such a public way makes me worry about this ala pleaserobme. This point, however, is general internet unnecessary panic. More interesting to me was simply how USA/English centric the project was, undoubtedly because the program only searched for the English phrase. Seeing this literally mapped out for me made me wonder about what this map would look like for another language, and indeed, how much of the internet I do not access because I only proficiently speak English.

Project 1 – Gauntlet

by Max Hawkins @ 2:42 am

Schotter

LibCinder Implementation

Processing/Processing.js Implementation

Text Rain

#include "cinder/app/AppBasic.h"
#include "cinder/gl/gl.h"
#include "cinder/Text.h"
#include "cinder/gl/GlslProg.h"
#include "cinder/gl/Texture.h"
#include "cinder/Rand.h"
#include "cinder/Capture.h"
 
#include "Kinect.h"
 
using namespace ci;
using namespace ci::app;
using namespace std;
 
/***************************
 Messy, but -probably- works
****************************/
 
class Letter {
public:
    static std::map<char, gl::Texture> textureForCharacter;
    static std::map<char, float> baselineOffsetForCharacter;
    static float fontSize;
    static bool texturesGenerated;
 
    Vec2f mPosition;
    Vec2f mVelocity;
    Vec2f mAcceleration;
    char mLetter;
 
    Letter(char letter, Vec2f position) {
 
        mAcceleration = Vec2f(0, 0.01);
        mPosition = position;
        mVelocity = Vec2f(0, 0);
 
        mLetter = letter;
 
        if (!texturesGenerated) {
            for(char character = 'A'; character < 'Z'; character++) {
                float baselineOffset = 0;
                std::string str(1, character);
                textureForCharacter[character] = gl::Texture( renderString( str, Font("Arial", fontSize), Color::white(), &baselineOffset ) );
                baselineOffsetForCharacter[character] = baselineOffset;
            }
            texturesGenerated = true;
        }
    }
 
    void update() {
        mVelocity += mAcceleration;
        mPosition += mVelocity;
    }
 
    void draw() {
        float brightness = 1 - (mPosition.y / getWindowHeight());
        gl::color(Color(1, brightness, brightness ));
        gl::draw( textureForCharacter[mLetter], mPosition - Vec2f( 0, baselineOffsetForCharacter[mLetter] ) );
    }
 
    Area frame() {
        return Area(mPosition + Vec2f(0, baselineOffsetForCharacter[mLetter]), textureForCharacter[mLetter].getSize());
    }
 
    void detectCollisions(const Surface8u &background) {
        const Area clippedFrame( frame().getClipBy( background.getBounds() ) );
 
        if (clippedFrame.getWidth() <= 0 || clippedFrame.getHeight() <= 0) return;
 
        float sum = 0; // probably bad. hm.
 
        uint8_t inc = background.getPixelInc();
 
        const uint8_t *line = background.getData( clippedFrame.getUL() );
 
        for( int32_t y = clippedFrame.y1; y < clippedFrame.y2; ++y ) {
 
            const uint8_t *pixel = line;
 
            for( int32_t x = clippedFrame.x1; x < clippedFrame.x2; ++x ) {
                if(*pixel > 150) {
                    sum++;
                }
                pixel += inc;
            }
 
            line += background.getRowBytes();
        }
 
        if (sum > 10 && mVelocity.y > 0) {
            mVelocity.y = 0;
        }
        if(sum > 20) {
            mVelocity.y -= sum * 0.0004;
        }
 
//        mVelocity -= percent * 5;
    }
 
 
};
bool Letter::texturesGenerated = false;
std::map<char, float> Letter::baselineOffsetForCharacter;
std::map<char, gl::Texture> Letter::textureForCharacter;
float Letter::fontSize = 18;
 
class TextRainApp : public AppBasic {
public:
	void setup();
	void mouseDown( MouseEvent event );	
	void update();
	void draw();
private:
    std::vector<Letter> letters;
    void emitRandomLetter();
    float mLastEmitTime;
    float mEmitInterval;
 
    float lastEmitLocation;
    int lastEmitCharacterIndex;
 
    Kinect				mKinect;
	gl::Texture			mColorTexture, mDepthTexture;
    Surface8u mDepthSurface;
 
};
 
void TextRainApp::setup()
{
    setFrameRate(30);
    mEmitInterval = 1;
    mLastEmitTime = -mEmitInterval;
 
    lastEmitCharacterIndex = 0;
    lastEmitLocation = 0;
 
    mKinect = Kinect( Kinect::Device() ); // the default Device implies the first Kinect connected
 
    gl::enableAdditiveBlending();
}
 
void TextRainApp::mouseDown( MouseEvent event )
{
}
 
void TextRainApp::emitRandomLetter() {
    //    char character = (char) Rand::randInt(97, 122);
    string poem = ("A ONE THAT IS NOT COLD IS SCARECLY A ONE AT ALL");
    lastEmitCharacterIndex += Rand::randInt(poem.length());
    char character = poem[lastEmitCharacterIndex % poem.length()];
 
    if(character == ' ') return;
 
    float horizontalEmitLocation = ((float)(lastEmitCharacterIndex % poem.length()) / poem.length()) * getWindowWidth();
    Vec2f startPosition = Vec2f(horizontalEmitLocation, -18);
    lastEmitLocation = horizontalEmitLocation;
 
    Letter letter(character, startPosition);
    letters.push_back(letter);
}
 
void TextRainApp::update()
{
    if ((getElapsedSeconds() - mLastEmitTime) > mEmitInterval) {
        emitRandomLetter();
        mLastEmitTime = getElapsedSeconds();
    }
 
	if( mKinect.checkNewDepthFrame() ) {
		mDepthTexture = mKinect.getDepthImage();
        mDepthSurface = Surface8u( mKinect.getDepthImage() );
    }
 
	if( mKinect.checkNewColorFrame() )
		mColorTexture = mKinect.getColorImage();
}
 
void TextRainApp::draw()
{
	// clear out the window with black
	gl::clear( Color( 0, 0, 0 ) ); 
 
    gl::color(Color::white());
 
    if (mColorTexture) {
        gl::draw(mColorTexture);
    }
 
    for (vector<Letter>::iterator iter = letters.begin(); iter != letters.end();) {
 
        iter->update();
        iter->draw();
 
        if (mDepthSurface) {
            iter->detectCollisions(mDepthSurface);
        }
 
        if (iter->mPosition.y > getWindowHeight() || iter->mPosition.y < -1000) {
            iter = letters.erase(iter);
        } else {
            iter = ++iter;
        }
 
    }
}
 
 
CINDER_APP_BASIC( TextRainApp, RendererGl )

LeWei-TextRain

by Le Wei @ 2:19 am

Made with openFrameworks. The letters land on places that are darker than a certain threshold. Its kind of slow here but its much faster, I promise, when video is not recording.

Ward Penney-Schotter

by Ward Penney @ 2:15 am

Ward Penney – Schotter, Processing.js Active Object

Ward Penney – Schotter, Processing Applet

Ward Penney – Schotter, Code

/*
Interactive Art & Computational Design / Spring 2011
Carnegie Mellon University

Ward Penney
12-Jan-2011

This is an educational reproduction of the Schotter computational art, located at http://www.medienkunstnetz.de/works/schotter/
*/

// setup variables
int rows = 24; // rows of sqaures
int columns = 12; // columns of squares
int margin = 30; // margin around the matrix
int sideLength = 25; // side of each square
float factor = .5; // factor for randomness, smaller fraction means less variability in rotation and offset of squares

void setup() {

// set up the screen to have the desired margins around the determined
// amount of rows / columns of squares of a given sideLength
int sizeX = 2*margin + columns*sideLength;
int sizeY = 2*margin + rows*sideLength;
size (sizeX, sizeY);

smooth(); // turn on anti-aliasing
noFill(); // turn of rectangle fills
background(#FFFFFF); // background color
noLoop(); // execute draw() only once
}

void draw() {

// count squares
int squareCount = 1;

// print rows
for (int ir = 1 ; ir < rows ; ir ++) { // print columns for (int ic = 1 ; ic < columns ; ic ++) { // translate translate(margin + ic*sideLength + sideLength/2, margin + ir*sideLength + sideLength/2); // get proportional counter / count amount of rotaion, over a degree range float absRotationDegs = (map(squareCount, 0, rows * columns - 1, 0, 360) * factor)/2; float randomRotationRadians = radians(random(-absRotationDegs, absRotationDegs)); rotate(randomRotationRadians); // get random offsets, halved for negtive possibility float absOffsetX = (map(squareCount, 0, rows * columns - 1, 0, sideLength/2) * factor)/2; float absOffsetY = (map(squareCount, 0, rows * columns - 1, 0, sideLength*2) * factor)/2; float randomOffsetX = random(-absOffsetX, absOffsetX); float randomOffsetY = random(-absOffsetY, absOffsetY); // draw rectangle rectMode(CENTER); rect(randomOffsetX, randomOffsetY, sideLength, sideLength); // rotate back rotate(-randomRotationRadians); // translate back translate(-1*(margin + ic*sideLength + sideLength/2), -1*(margin + ir*sideLength + sideLength/2)); // increment square count squareCount += 1; } } }

Ward Penney - Schotter video demo in OpenFrameworks

LeWei-LookingOutwards-3

by Le Wei @ 2:15 am

Lia Martinez’s Planet Maker

Lia Martinez’s Planet Maker is a cute kid-centric interactive project that allows you to create a planet using your voice. You talk, scream, sing, etc. into a pipe and buildings and objects are haphazardly thrown onto your planet. The whole image is displayed on a piece of fabric that you can touch and punch to restart.

My favorite part of this is the display. I love that its projected onto a piece of fabric and the whole punching interaction seems really fun. It’s a huge contrast to the displays we’re used to, and a lot more friendly. I’m less enthusiastic about the actual planet. It doesn’t seem like you have much control over what its doing, even if it is reacting to your voice. I don’t really buy into stuff that is advertised as “everyone gets their own unique thing” when they all end up looking like they are made randomly.

shawn sims-lookingOutwards-1

by Shawn Sims @ 2:07 am

Green Cloud is a project by Nuage Vert and is is designed to bring an awareness to the community of Ruoholahti, Helsinki. A series of high power green lasers were used in conjunction with heat tracking cameras and software to highlight and trace the smoke/pollution coming from a local smoke stack. The project is surprisingly powerful in its ability to take something anyone who has lived in a city has taken for granted. They call out something that is generally lost in the chaos of a metropolis in a technologically clever way. The end result is a kinetic projection of the city’s own consumption of power.

“This is the effect of 4,000 residents and 5 large scale companies in Ruoholahti participating the Unplug event. Since Salmisaari substation also measures energy consumed also by those living in Lauttasaari, which includes over 30,000 residents, this is a very successful result! ”

find more about this project here

LeWei-LookingOutwards-2

by Le Wei @ 2:04 am

John Kestner’s Tableau

John Kestner’s Tableau is a repurposed nightstand hooked up to the internet and a printer. The nightstand waits for photo tweets from family members, then prints them out and drops them into the drawer. Pictures can also be dropped into the drawer, scanned, and uploaded to twitter.

I’m always excited to see projects that blur the boundary between new digital media and traditional physical artifacts. Personally, I don’t think I could have as much of an attachment to some photos on flickr or facebook as I could with a real physical photo album. This particular example isn’t that feasible for most people, but it is a nice idea. You can easily imagine this being used by a grandmother to share photos with her hip tech-conscious grandchildren. The key thing here is that she doesn’t even need to know what twitter or the internet is, just drop photos in and get photos back. Magic.

Schotter: Processing

by cdoomany @ 1:53 am

size(300,400);
smooth();
background(0);
noStroke();
fill(242,204,47,90);
rectMode(CENTER);

int x = 28;
int y = 44;
int rndm = 0;
int step = 90/y;
int w = width/x;
int h = height/y;

for (int j = 2;j < y;j++){
rndm += step;
fill(242,204,j * 20,j + 90);

for (int i = 2;i < x;i++) {
pushMatrix();
float z = random(-rndm/2, rndm/2);
translate(i*w – w/2 + z/3,j*h – h/2 + z/3);
rotate(radians(z));
rect(0,0,w,h);
popMatrix();
}
}

LeWei-LookingOutwards-1

by Le Wei @ 1:51 am

Niklas Roy’s My little piece of privacy


Niklas Roy is a Berlin artist who has a workshop with a street-facing window. Apparently tired of all the nosy passersby, he set up a robotic curtain and camera that detects people on the street as they walk past. The curtain travels with them, aggressively preventing them from having a proper look into Roy’s workshop.

I like how this project engages people in a very unexpected way. People walking around in city streets never expect buildings and other static surroundings to recognize and react to them. They often break out of their routine to take a second look and have a little fun in the middle of their walk.

Some things that I’m not sure about: interestingly, the curtain takes on a certain personality, but the personality reminds me of a very manic and paranoid hermit; also, the artist likes to be very coy and say that he made this to keep people away, but obviously it is more useful at getting attention.

shawn sims-schotter

by Shawn Sims @ 1:44 am


If you move your mouse slowly from the top of the grid to the bottom you will see the chaos ensue. This is the processing.js version above and below is the same code embedded in a jar applet.

This is the same Schotter interaction in c++ with the openFrameworks library.

Processing code below

// shawn sims

int xCount = 12;
int yCount = 20;

int boxSize = 20;
int distort = mouseY;
int gridShift = 50;

int resetMouse = 0;

void setup(){
size(325,565);
frameRate(2);
}

void draw(){
smooth();
background(255);
rectMode(CENTER);

int xLocation = (width - gridShift)/xCount;
int yLocation = (height - gridShift)/yCount;

int rowCount = (height - gridShift)/yLocation;
int column = (width - gridShift)/xLocation;

int distortion = 0;
int distortionRotate = 55/(distortion+rowCount);

for( int i=0; i

Susan Lin – Schotter

by susanlin @ 1:39 am

Processing.js


Processing

Processing Code
After a few iterations, the working code ends up being 18 lines and optimized (to the best of my ability).

void setup()
{
  size(384, 674); //12x21 grid
  background(255);
  noFill();
  stroke(0);
 
  float variability=0; //important to use float over int!
  for(int j=0; j&lt;672 ; j=j+32) {
    for(int i=0; i&lt;384; i=i+32) {
      pushMatrix();
      translate(i+random(-variability, variability), j+random(-variability, variability));
      rotate(radians(random(-variability, variability)));
      rect(0, 0, 32, 32);
      variability+=0.083; //increases per square, this number is 1/12
      popMatrix();
    }
  }
}

openFrameworks

Huaishu Peng – Looking Outwards – 3

by huaishup @ 1:33 am

3. PossessedHand: A Hand Gesture Controlling System using Electrical Stimulation

This project is implemented by Emi Tamaki. It is about using electronic devices to control the movement of one’s hand.

The interesting point is that, contrast to ordinary device that using finger and hand to control machines, this device do it vise versa.

The mechanical principle is, to using light electronic shock to stimulate the muscle on one’s hand to change it’s behavior.

In my mind, this device could be used as a teaching tools, i.e. teaching people to play piano. If the device could be wireless, that would be perfect.

« Previous PageNext Page »
This work is licensed under a Creative Commons Attribution-Noncommercial-Share Alike 3.0 Unported License.
(c) 2023 Interactive Art & Computational Design / Spring 2011 | powered by WordPress with Barecity