Category Archives: 11-anitype

pedro

20 Jan 2015

octopus_attack_lr

The concept underlying my font is based on the expansion of the vertices of the letter from a central point – as an octopus suddenly moving its tentacles. The choice of the letters was dependent on the concept, so initially I chose characters with a central node connected to all other nodes (as in “Y“, “X”, “*” or “V”).  Other characters would also be possible, with the creation of multiple central nodes (as in “H”, “E” or “A”) and some further modifications for curved shapes (for instance, “C“).

[iframe src=”http://www.anitype.com/entry/agtzfmFuaXR5cGVjb3IUCxIHbGV0dGVycxiAgICA46GSCQw/” width=”100%” height=”300″]

[iframe src=”http://www.anitype.com/entry/agtzfmFuaXR5cGVjb3IUCxIHbGV0dGVycxiAgICA49XLCAw/” width=”100%” height=”300″]

[iframe src=”http://www.anitype.com/entry/agtzfmFuaXR5cGVjb3IUCxIHbGV0dGVycxiAgIDAoP6ECww/” width=”100%” height=”300″]

See below the code for “*”:

/**
 * Register your submission and choose a character
 * For more information check out the documentation
 * http://anitype.com/documentation
 */
Anitype.register('*', {

  // Enter your name
  author: 'pedro',

  // Enter a personal website, must have http
  website: 'https://www.facebook.com/pedro.luis.104',

  // Make your animation here
  construct: function(two, points) {

    // Reference to instance
    var anitype = this;

    // Create a Two.Polygon
    var polygon = anitype.makePolygon(points);
    
    // Set an initial state
    var final0 = { x: polygon.vertices[0].x, y: polygon.vertices[0].y };
    var final2 = { x: polygon.vertices[2].x, y: polygon.vertices[2].y };
    var final4 = { x: polygon.vertices[4].x, y: polygon.vertices[4].y };
    var final5 = { x: polygon.vertices[5].x, y: polygon.vertices[5].y };
    var final7 = { x: polygon.vertices[7].x, y: polygon.vertices[7].y };
    var launch0 = { x:Math.random() * 1600 - 800, y: Math.random() * 1600 - 800};
    var launch2 = { x: Math.random() * 1600 - 800, y: Math.random() * 1600 - 800};
    var launch4 = { x: Math.random() * 1600 - 800, y: Math.random() * 1600 - 800};
    var launch5 = { x: Math.random() * 1600 - 800, y: Math.random() * 1600 - 800};
    var launch7 = { x: Math.random() * 1600 - 800, y: Math.random() * 1600 - 800};
    var time0 = .2 - Math.random()*.15
    var time2 = .2 - Math.random()*.15
    var time4 = .2 - Math.random()*.15
    var time5 = .2 - Math.random()*.15
    var time7 = .2 - Math.random()*.15

    // Set an initial state
    polygon.vertices[0].set(0, 0);
    polygon.vertices[1].set(0, 0);
    polygon.vertices[2].set(0, 0);
    polygon.vertices[3].set(0, 0);
    polygon.vertices[4].set(0, 0);
    polygon.vertices[5].set(0, 0);
    polygon.vertices[6].set(0, 0);
    polygon.vertices[7].set(0, 0);
    
    anitype.addTween(polygon.vertices[0], {
      to: { x: launch0.x, y: launch0.y },
      easing: Anitype.Easing.Bounce.Out,
      duration: time0, // Value from 0 - 1
      start: 0,        // Value from 0 - 1
      complete: function(){
        anitype.addTween(polygon.vertices[0], {
          to: { x: final0.x, y: final0.y },
          easing: Anitype.Easing.Bounce.Out,
          duration: 1 - time0, // Value from 0 - 1
          start: time0,
        });
      }
    });
    anitype.addTween(polygon.vertices[2], {
      to: { x: launch2.x, y: launch2.y },
      easing: Anitype.Easing.Bounce.Out,
      duration: time2, // Value from 0 - 1
      start: 0,        // Value from 0 - 1
      complete: function(){
        anitype.addTween(polygon.vertices[2], {
          to: { x: final2.x, y: final2.y },
          easing: Anitype.Easing.Bounce.Out,
          duration: 1 - time2, // Value from 0 - 1
          start: time2,
        });
      }
    });
    anitype.addTween(polygon.vertices[4], {
      to: { x: launch4.x, y: launch4.y },
      easing: Anitype.Easing.Bounce.Out,
      duration: time4, // Value from 0 - 1
      start: 0,        // Value from 0 - 1
      complete: function(){
        anitype.addTween(polygon.vertices[4], {
          to: { x: final4.x, y: final4.y },
          easing: Anitype.Easing.Bounce.Out,
          duration: 1 - time4, // Value from 0 - 1
          start: time4,
        });
      }
    });
    anitype.addTween(polygon.vertices[5], {
      to: { x: launch5.x, y: launch5.y },
      easing: Anitype.Easing.Bounce.Out,
      duration: time5, // Value from 0 - 1
      start: 0,        // Value from 0 - 1
      complete: function(){
        anitype.addTween(polygon.vertices[5], {
          to: { x: final5.x, y: final5.y },
          easing: Anitype.Easing.Bounce.Out,
          duration: 1 - time5, // Value from 0 - 1
          start: time5,
        });
      }
    });
    anitype.addTween(polygon.vertices[7], {
      to: { x: launch7.x, y: launch7.y },
      easing: Anitype.Easing.Bounce.Out,
      duration: time7, // Value from 0 - 1
      start: 0,        // Value from 0 - 1
      complete: function(){
        anitype.addTween(polygon.vertices[7], {
          to: { x: final7.x, y: final7.y },
          easing: Anitype.Easing.Bounce.Out,
          duration: 1 - time7, // Value from 0 - 1
          start: time7,
        });
      }
    });
    // Return your polygon wrapped in a group.
    return two.makeGroup(polygon);
  }
});

All in all, I believe that the final product still embeds the octopus concept, but it had to be adapted to deal with my relation with the language, the constraints of anitype and also the fact that the output is a parametric type. In this sense, the tentacles were simplified by the animation of some vertices with a bounce out easing. The expansion of the tentacles had to be accelerated to enable a good visualization of the final character. Both modifications worked very well for “Y” and “*”. In the case of “C”, I couldn’t manage to manipulate all the attributes of the Bézier curve inside anitype, so it started as a matted curve (and not as a central point), and it remained kinky until the final form. On one hand, controlling some other attributes or even implementing a curve subdivision associated with a basic physical simulation among the nodes would also allow a more fluid expansion. On the other hand, there is so little time for the animation, that all these additional resources could make it visually annoying.

 

mmontenegro

20 Jan 2015

I decided to animate the letter “Y” because I have always found it very interesting. I find it interesting mostly because it looks like an arrow pointing at different directions. When looking at previous animation of this letter, I found some very cool ones, making me want to do one even more!

Given that I see this letter as an arrow, I decided to expand this idea by making an animation that would give the arrow a real direction.  During the development process, a friend saw my screen and thought the current state of my animation was cool. With this in mind, I saved the current state as a separate animation from my final one. This is why I am attaching two “Y” animations. The first one is just an initial state of the final one.

Y animation init
Initial State:

[iframe src=”http://www.anitype.com/entry/agtzfmFuaXR5cGVjb3IUCxIHbGV0dGVycxiAgIDA2ZafCgw/” width=”100%” height=”480″]

Final Animation:

[iframe src=”http://www.anitype.com/entry/agtzfmFuaXR5cGVjb3IUCxIHbGV0dGVycxiAgICAp9SSCgw/” width=”100%” height=”480″]

 

/**
 * Register your submission and choose a character
 * For more information check out the documentation
 * http://anitype.com/documentation
 */
Anitype.register('Y', {

  // Enter your name
  author: 'maria montenegro',

  // Enter a personal website, must have http
  website: 'http://www.Fusion-Sky.com/',

  // Make your animation here
  construct: function(two, points) {

    // Reference to instance
    var anitype = this;
    
    //Create my main lines
    var line_1 = two.makeLine(0,245,0,-50);
   
    //var line_2 = two.makeLine(0,115,0,-258);
    //var line_3 = two.makeLine(0,115,0,-258);
      
    //Create Vertices foreach line
    line_1.vertices[0].set(0,-445);     //245
    line_1.vertices[1].set(0,-650);    //-50
  
    //line_2.vertices[0].set(0,255);
    //line_2.vertices[1].set(0,-258);
    
    //line_3.vertices[0].set(0,255);
    //line_3.vertices[1].set(0,-258);
  
  // mini lines
   var line_2_1 = two.makeLine(0,115,0,-50);
   var line_2_2 = two.makeLine(0,115,0,-50);
   var line_2_3 = two.makeLine(0,115,0,-50);
    
    line_2_1.vertices[0].set(0,0);
    line_2_1.vertices[1].set(0,0);
    
    line_2_2.vertices[0].set(0,-250);
    line_2_2.vertices[1].set(0,-250);
    
    line_2_3.vertices[0].set(0,-250);
    line_2_3.vertices[1].set(0,-250);
    
   var line_3_1 = two.makeLine(0,115,0,-50);
   var line_3_2 = two.makeLine(0,115,0,-50);
   var line_3_3 = two.makeLine(0,115,0,-50);
    
    line_3_1.vertices[0].set(0,0);
    line_3_1.vertices[1].set(0,-150);
    
    line_3_2.vertices[0].set(0,-150);
    line_3_2.vertices[1].set(0,-250);
    
    line_3_3.vertices[0].set(0,-250);
    line_3_3.vertices[1].set(0,-250);
    
   //Create the animation via a tween
    function moveVert(vert, x1, x2, y1, y2,start,duration){
      anitype.addTween(vert, {
        to: { x: x1, y: y1 },
        easing: Anitype.Easing.Circular.Out,
        update: function() {
          anitype.addTween(vert, {
            to: {x: x2, y:y2},
            easing: Anitype.Easing.Elastic.Out,
            duration: duration,
            start: start
          });
        },
        duration: duration, // Value from 0 - 1
        start: start        // Value from 0 - 1
      });
    }
    
   moveVert(line_1.vertices[0],0,0,-45,245,0,1);
   moveVert(line_1.vertices[1],0,0,245,-50,0,1);
  
   //moveVert(line_2.vertices[0],0,0,255,115,.25,.5);
   //moveVert(line_2.vertices[1],0,-215,115,-258,.25,.5);
   //moveVert(line_3.vertices[0],0,0,255,115,.25,.5);
   //moveVert(line_3.vertices[1],0,215,115,-258,.25,.5);
    
    moveVert(line_2_1.vertices[1],0,-110,115,-187,.15,.3);
    moveVert(line_2_2.vertices[0],0,-110,0,-187,0,1);
    moveVert(line_2_2.vertices[1],-110,-154,-187,-264,.25,.5);
    moveVert(line_2_3.vertices[0],0,-154,0,-264,.5,1);
    moveVert(line_2_3.vertices[1],-154,-213,-264,-365,.7,1);
    
    moveVert(line_3_1.vertices[1],0,110,115,-187,.15,.3);
    moveVert(line_3_2.vertices[0],0,110,0,-187,0,1);
    moveVert(line_3_2.vertices[1],110,154,-187,-264,.25,.5);
    moveVert(line_3_3.vertices[0],0,154,0,-264,.5,1);
    moveVert(line_3_3.vertices[1],154,213,-264,-365,.7,1);
    
    
    return two.makeGroup(line_1,line_2_1,line_2_2,line_2_3, line_3_1,line_3_2,line_3_3);
  }

});

dave

19 Jan 2015

I chose to animate L because few people did it, and it does not have Bezier curves which I have a lot of trouble with. I initially tried to animate 9, but it was too curvy for me.

I decided to approach anitype by thinking of the letters as shapes, and that turned into how L would move if it was a creature. Hence, I decided to animate it awkwardly attempting to move, then falling down. My original design has the legs move in a more wheel-like motion, and has it attempt to climb the wall. After I started working, I realized that the one second time constraint made that not really possible, so I decided to go for a more traditional walk. So I did not end up with my original intended design, but it was too unfeasible anyway.

link: http://www.anitype.com/entry/agtzfmFuaXR5cGVjb3IUCxIHbGV0dGVycxiAgIDAgpiMCQw/

[iframe src=”http://www.anitype.com/entry/agtzfmFuaXR5cGVjb3IUCxIHbGV0dGVycxiAgIDAgpiMCQw/” width=”620″ height=”360″]

 

public class Hello {
/**
 * Register your submission and choose a character
 * For more information check out the documentation
 * http://anitype.com/documentation
 */
Anitype.register('L', {

  // Enter your name
  author: 'dave',

  // Enter a personal website, must have http
  website: 'http://anitype.com/',

  // Make your animation here
  construct: function(two, points) {

    // Reference to instance
    var anitype = this;

    // Create a Two.Polygon
    var polygon = anitype.makePolygon(points);
    
    // set up vars
    var p1 = polygon.vertices[0];
    var p2 = polygon.vertices[1];
    var p3 = polygon.vertices[2];
    
    // Set an initial state
    polygon.scale = 1;    
    p1.set(-50,200);
    p2.set(300,50);
    p3.set(350,200);
    
    var op1x = p1.x; var op1y = p1.y;
    var op2x = p2.x; var op2y = p2.y;
    var op3x = p3.x; var op3y = p3.y;

    // Create the animation via a tween
    // front leg
    
    anitype.addTween(p1, {
      to: { x: op1x-100, y: op1y-200 },//step up 1
      duration: 0.09,
      start: 0,
      complete: function(){
        anitype.addTween(p1, {//step down 1
          to: { x: op1x-150, y: op1y },
          //easing: Anitype.Easing.Elastic.Out,
          duration: 0.14,
          start: 0.07,
          complete: function(){
            anitype.addTween(p1, {//step up 2
              to: { x: op1x-160, y: op1y-75 },
              duration: 0.09,
              start: 0.4,
              complete: function(){
                anitype.addTween(p1, {// step down 2
                  to: { x: op1x-200, y: op1y },
                  easing: Anitype.Easing.Elastic.Out,
                  duration: 0.14,
                  start: 0.55,
                });
              }
            });
          }
        });
      }
    });
    
    
    // middle body
    anitype.addTween(p2, {
      to: { x: op2x-150, y: op2y },
      duration: 0.4,
      start: 0,
      complete: function(){
        anitype.addTween(p2, {
          to: { x: op2x-200, y: op2y+150 },
          easing: Anitype.Easing.Elastic.Out,
          duration: 0.4,
          start: 0.55
        });
      }
    });
    
    
    // back leg
    anitype.addTween(p3, {
      to: { x: op3x-50, y: op3y-50 },
      duration: 0.07,
      start: 0.25,
      complete: function(){
        anitype.addTween(p3, {
          to: { x: op3x-100, y: op3y },
          duration: 0.07,
          start: 0.33,
          complete: function(){
            anitype.addTween(p3, {
              to: { x: op3x-105, y: op3y },
              duration: 0.2,
              start: 0.7
            });
          }
        });
      }
    });
    

    // Return your polygon wrapped in a group.
    return two.makeGroup(polygon);

  }

});
}

My favorite Anitype is this asterisk. Its movement is memorizing, makes me want to stare at it for hours.

Sketch:

dsf

ST

19 Jan 2015

I chose to animate the letter S. It is my first initial, and also happens to be a very exciting letter, with one long curvy stroke. I didn’t want to introduce angles into this letter and I highlighted it’s roundness by creating a loop-de-loop path.

Sketches:

sketchesSamT

See it:

Code:

Anitype.register('S', {

  author: 'sam ticknor',
  website: 'http://samanthaticknor.com/',

  construct: function(two, points) {

  // Reference to instance
  var anitype = this;

  // Create a Two.Polygon
  var polygon = anitype.makePolygon(points);

  // Adding and adjusting vertices
  polygon.vertices[0].y = -190;
  polygon.vertices[0].command = Two.Commands.curve;
  polygon.vertices[0].controls.left.y = -170; 
  polygon.vertices[0].controls.right.y = -240;
  polygon.vertices[1].controls.left.x = 170;
  polygon.vertices[3].x = 0;
  polygon.vertices[3].y = 0;    
  polygon.vertices[3].controls.left.y = 0;
  polygon.vertices[3].controls.right.y = 0;
  polygon.vertices[6].x = -polygon.vertices[4].x;
  polygon.vertices[6].y = polygon.vertices[4].y;
  polygon.vertices[6].command = Two.Commands.curve;
  polygon.vertices[6].controls.right.y = 133;
  polygon.vertices[6].controls.left.y = 261;
  polygon.vertices.push(polygon.vertices[3].clone());
  polygon.vertices[7].command = Two.Commands.curve;
  
  // Add second set of same vertices so path can wrap
  polygon.vertices.push(polygon.vertices[0].clone());
  polygon.vertices.push(polygon.vertices[1].clone());
  polygon.vertices.push(polygon.vertices[2].clone());
  polygon.vertices.push(polygon.vertices[3].clone());
  polygon.vertices.push(polygon.vertices[4].clone());
  polygon.vertices.push(polygon.vertices[5].clone());
  polygon.vertices.push(polygon.vertices[6].clone());
  polygon.vertices.push(polygon.vertices[7].clone());

  // Animation
  polygon.beginning = .03;
  polygon.subdivide([2]);
  polygon.ending = .4;
  
  anitype.addTween(polygon, {
    to: { ending: .93 },
    duration: .6,
    start: .3,
    easing: Anitype.Easing.Linear.In,
  });

  anitype.addTween(polygon, {
    to: { beginning: .56 },
    duration: .6,
    start: .3,
    easing: Anitype.Easing.Linear.In,
  });

  // Return your polygon wrapped in a group.
  return two.makeGroup(polygon);
  }
});

I was able to achieve what I had set out to do. Adding new vertices was not entirely straightforward but after a morning of fussing with the code, I had a pretty good figure-8 happening!

One of my favorite anitypes in the gallery is this A by Chris Delbuck . I love the way it occupies a three dimensional space, with creative manipulation of the original three lines. I also appreciate the seamless loop, and that was something that I aimed for in my design.

Alex Sciuto-AniType

[iframe src=”http://www.anitype.com/entry/agtzfmFuaXR5cGVjb3IUCxIHbGV0dGVycxiAgIDAoJCRCgw/” width=”600″ height=”360″]

http://www.anitype.com/entry/agtzfmFuaXR5cGVjb3IUCxIHbGV0dGVycxiAgIDAoIyICgw/

I chose the letter W for a few reasons. It’s my name’s middle initial, which brought it to my mind first. But it’s also a big canvas to play with—wide with four strokes—and it’s a contradictory shape—extremely straight, but no right angles. The letter felt to me like it had a lot to say motion-wise.

IMG_3639

I immediately knew that I wanted the four lines to move independently, and unite together at the last second to form the W shape. I also knew that I wanted three of the lines to move in roughly similar fashion with the four coming in unexpectedly for a bit of humor or drama. In sketching, I played around with a few ideas about folding and unfolding forms as well as diamond shapes morphing into W shapes. I was most excited by the idea of having the strokes slide into place with the last stroke swinging out (see “Swing Door” in my sketch). This is the sketch I took into coding.

I saved two prior versions of the character before deciding enough was enough and sticking with the final third iteration. You can see one and two. V1 very closely resembles my sketch, but it felt very top-heavy. All the strokes drop down leaving the viewer feeling like everything was dropped and not stable. V2. Attempted to balance this out by having strokes before contract in size both from the top and from the bottom. V3 was a refinement on V2. I abandoned the contracting line and instead had two strokes move in from the top, a third stroke move in from the bottom, the fourth stroke swinging in as in the original sketches.

The final design is both intended and iterated-upon. The main theme, three strokes + a humorous fourth remains from the sketches. The emphasis on the linear nature of the W remains. But the details and the balance of the animation was only found through trial and error working in the code.

I found I enjoyed the shapes where the movement complimented the shape of the letter. I didn’t find as many shapes that I liked where the movement went against the letter’s shape. I also found I liked pieces that had more intentionality and story, not just an effect applied to each stroke. I enjoyed this unfolding O. I enjoyed this T which never actually is all there at the same time. My favorite overall is this M which uses random() to add more variety and makes the M appear more strange and asymmetrical than I’ve ever thought about it. It was the one shape that went against grain and gave me a new view on the shape of the letter M.

My code.

/**
* Register your submission and choose a character
* For more information check out the documentation
* http://anitype.com/documentation
*/
Anitype.register('W', {

// Enter your name
author: 'Alex Sciuto',

// Enter a personal website, must have http
website: 'http://www.alexsciuto.com/',

// Make your animation here
construct: function(two, points) {

// Reference to instance
var anitype = this;

var duration = 1;

var p0 = [points[0].x, points[0].y];
var p1 = [points[1].x, points[1].y];
var p2 = [points[2].x, points[2].y];
var p3 = [points[3].x, points[3].y];
var p4 = [points[4].x, points[4].y];

// Two.js Copied Points

var copyOne = points[1].clone();
var copyTwo = points[2].clone();
var copyThree = points[3].clone();

// Create a Two.Polygon
var left = anitype.makePolygon([points[0],points[1]]);
var swing = anitype.makePolygon([copyOne,points[2]]);
var left1 = anitype.makePolygon([copyTwo,points[3]]);
var right = anitype.makePolygon([copyThree,points[4]]);

var slopeLeft = 3;


//First Line

var offsetTop1 = -40;
var offsetBottom1 = -240
points[0].x = points[0].x - offsetTop1;
points[0].y = points[0].y - (slopeLeft * offsetTop1);
points[1].x = points[1].x - offsetBottom1;
points[1].y = points[1].y - (slopeLeft * offsetBottom1);

anitype.addTween(points[0], {
to: { x: p0[0] , y: p0[1] },
easing: Anitype.Easing.Linear.Out,
duration: .5, // Value from 0 - 1
start: 0 // Value from 0 - 1
});

anitype.addTween(points[1], {
to: { x: p1[0] , y: p1[1] },
easing: Anitype.Easing.Linear.Out,
duration: .5, // Value from 0 - 1
start: 0 // Value from 0 - 1
});


//Swing Line

copyOne.x = p3[0];
copyOne.y = p3[1];
points[2].x = p3[0];
points[2].y = p3[1];

anitype.addTween(points[2], {
to: { x: p2[0] , y: p2[1] },
easing: Anitype.Easing.Bounce.Out,
duration: .01, // Value from 0 - 1
start: .5, // Value from 0 - 1
complete : function() {
anitype.addTween(points[3], {
to: { x: p1[0] , y: p1[1] },
easing: Anitype.Easing.Bounce.Out,
duration: .3, // Value from 0 - 1
start: .53 // Value from 0 - 1
});
}
});

//Second Line

var offsetTop2 = -90;
var offsetBottom2 = -320;

copyTwo.x = copyTwo.x - offsetTop2;
copyTwo.y = copyTwo.y - (slopeLeft * offsetTop2);
points[3].x = points[3].x - offsetBottom2;
points[3].y = points[3].y - (slopeLeft * offsetBottom2);

anitype.addTween(copyTwo, {
to: { x: p2[0] , y: p2[1] },
easing: Anitype.Easing.Linear.Out,
duration: .5, // Value from 0 - 1
start: 0 // Value from 0 - 1
});

anitype.addTween(points[3], {
to: { x: p3[0] , y: p3[1] },
easing: Anitype.Easing.Linear.Out,
duration: .5, // Value from 0 - 1
start: 0 // Value from 0 - 1
});

//Right Line
var offsetTop3 = 360;
var offsetBottom3 = 50;
var rightSlope = 3.75;

copyThree.x = copyThree.x + offsetTop3;
copyThree.y = copyThree.y - ((rightSlope) * offsetTop3);
points[4].x = points[4].x - offsetBottom3;
points[4].y = points[4].y + ((rightSlope) * offsetBottom3);

anitype.addTween(copyThree, {
to: { x: p4[0] , y: p4[1] },
easing: Anitype.Easing.Linear.Out,
duration: .6, // Value from 0 - 1
start: .1 // Value from 0 - 1
});

anitype.addTween(points[4], {
to: { x: p3[0] , y: p3[1] },
easing: Anitype.Easing.Linear.Out,
duration: .5, // Value from 0 - 1
start: .0 // Value from 0 - 1
});

// Return your polygon wrapped in a group.
return two.makeGroup([left, swing, left1, right]);

}
});