task05 :: justin grossman

 

animation of composition using functions

 

code

#include "../CanvasPlus.as"
/*

task05 :: pfa

This program extends the hopi kachina character by animating it
with time-based behavior. 

Justin Grossman :: 10.30.03

*/
// functions ///////////////////////////////////////////////////////////
// increments a value (by a normalized amount)
function IncrementIt(oldvalue) {
	var newvalue = oldvalue+0.35;
	//massage the added value to change characteristics
	if (newvalue>1) {
		newvalue = Math.abs(1-oldvalue);
	}
	return newvalue;
}
// opposite as IncrementIt();
function DecrementIt(oldvalue) {
	var newvalue = oldvalue-0.05;
	if (newvalue<0) {
		newvalue = Math.abs(1+oldvalue);
	}
	return newvalue;
}
// draws a shape (3sided right-angled)
function genTri(startpt_x, startpt_y, endpt_x, endpt_y) {
	var pt1 = new Array(startpt_x, startpt_y);
	var pt2 = new Array(startpt_x, endpt_y);
	var pt3 = new Array(endpt_x, endpt_y);
	var mytri = new Array(pt1, pt2, pt3);
	return mytri;
}
// generates a clockwise array of x,y array pairs of points from upper left to feed into Canvas.drawRegion (for a trapezoid)
// for some reason, doesn't work with drawRegion, so omitted
function genTrap(startpt_x, startpt_y, width_top, width_base, height) {
	var basediff = 0.5*(width_top-width_base);
	var ltop = new Array(startpt_x, startpt_y);
	var rtop = new Array(startpt_x+width_top, startpt_y);
	var rbase = new Array(startpt_x+width_top-basediff, startpt_y+height);
	var lbase = new Array(startpt_x+basediff, startpt_y+height);
	var trap_array = new Array(ltop, rtop, rbase, lbase);
	//	trace("basediff: "+basediff+" fcn: "+trap_array);
	return trap_array;
}
function makeOutline() {
	var r = .1;
	var b = .1;
	var g = .1;
	Canvas.setPenColor(r,g,b);
}

function cartesianToPolar(x, y) {
	// converts cartesian x,y to polar [distance, angle]
	var distance = Math.sqrt(x*x+y*y);
	var radianAngle;
	if (x == 0) {
		if (y>=0) {
			radianAngle = Math.PI*.5;
		} else {
			radianAngle = 3*Math.PI*.5;
		}
	} else if (x>0) {
		radianAngle = Math.atan(y/x);
	} else {
		radianAngle = Math.PI-Math.atan(y/-x);
	}
	return new Array(distance, radianAngle);
}
function polarToCartesian(distance, radianAngle) {
	// converts polar distance, angle to cartesian [x, y]
	var x = distance*Math.cos(radianAngle);
	var y = distance*Math.sin(radianAngle);
	return new Array(x, y);
}
function drawears() {
	var mydate = new Date;
	var secs = mydate.getSeconds();
	secs = (secs % 10) / 100;
	var lx = .5 - secs;
	var rx = .5 + secs;
	var lear_pts = genTri(lx, .13, .445, .25);
	var rear_pts = genTri(rx, .13, .555, .25);
	var r = 0.6;
	var g = 0.5;
	var b = 0.4;
	Canvas.setPenColor(r, g, b);
	Canvas.drawRegion(true, lear_pts);
	Canvas.drawRegion(true, rear_pts);
	
}

function drawbody() {
	// setup for drawing body ////////////////////////////////////////////
	makeOutline();
	var filltrue = true;
	var fillfalse = false;
	var bodyx = .4;
	var bodyy = .2;
	var bodyw = .2;
	var bodyh = .6;
	var rad = .25;
	Canvas.drawRectangle(fillfalse, bodyx, bodyy, bodyw, bodyh, rad);
	var r = 0.2;
	var g = 0.1;
	var b = 0.1;
	Canvas.setPenColor(r, g, b);
	Canvas.drawRectangle(filltrue, bodyx+.002, bodyy+.002, bodyw-.004, bodyh-.004, rad);
}
function drawface() {
	// setup for drawing eyes and facial details //////////////////////////
	// light parts
	// eyes
	var r = .99;
	var b = .99;
	var g = .99;
	Canvas.setPenColor(r, g, b);
	var leyex = .46;
	var reyex = .54;
	var eyey = .25;
	var eyer_outer = .015;
	var eyer_inner = .005;
	var filltrue = true;
	var fillfalse = false;
	Canvas.drawOval(filltrue, leyex, eyey, eyer_outer, eyer_outer);
	Canvas.drawOval(filltrue, reyex, eyey, eyer_outer, eyer_outer);
	//snout
	var snoutx = .5;
	var snouty = .33;
	var snoutrx = .04;
	var snoutry = .06;
	Canvas.drawOval(filltrue, snoutx, snouty, snoutrx, snoutry);
	//freckles
	var freckrad = .004;
	var centerpointx = .5;
	var yhoriz = .29;
	Canvas.drawOval(filltrue, centerpointx + .045, yhoriz, freckrad, freckrad);
	Canvas.drawOval(filltrue, centerpointx - .045, yhoriz, freckrad, freckrad);
	Canvas.drawOval(filltrue, centerpointx + .06, yhoriz, freckrad, freckrad);
	Canvas.drawOval(filltrue, centerpointx - .06, yhoriz, freckrad, freckrad);
	Canvas.drawOval(filltrue, centerpointx + .075, yhoriz, freckrad, freckrad);
	Canvas.drawOval(filltrue, centerpointx - .075, yhoriz, freckrad, freckrad);
	Canvas.drawOval(filltrue, centerpointx + .051, yhoriz + .015, freckrad, freckrad);
	Canvas.drawOval(filltrue, centerpointx - .051, yhoriz + .015, freckrad, freckrad);
	Canvas.drawOval(filltrue, centerpointx + .058, yhoriz + .029, freckrad, freckrad);
	Canvas.drawOval(filltrue, centerpointx - .058, yhoriz + .029, freckrad, freckrad);
	//forehead
	var forex = .5;
	var forey = .203;
	var foreradx = .09;
	var forerady = .005;
	Canvas.drawOval(filltrue, forex, forey, foreradx, forerady);



	//dark parts
	//pupils
	var r = .2;
	var g = .1;
	var b = .1;
	Canvas.setPenColor(r, g, b);
	
	var mydate = new Date;
	var secs = mydate.getSeconds();
	secs = (secs % 10) / 1000;
	var lpupilx = leyex + secs;
	var rpupilx = reyex + secs;

	Canvas.drawOval(filltrue, lpupilx, eyey, eyer_inner, eyer_inner);
	Canvas.drawOval(filltrue, rpupilx, eyey, eyer_inner, eyer_inner);
	//nostril
	Canvas.drawOval(filltrue, .5, .3, .005, .005);
	//forehead
	Canvas.drawOval(fillfalse, forex, forey, foreradx, forerady);

}
function drawtorso() {
	// setup for torso ///////////////////////////////////////////////////
	var filltrue = true;
	var fillfalse = false;
	var torsox = .35;
	var torsoy = .33;
	var torsow = .3;
	var torsoh = .17;
	var rad = .1;
	var r = 0.2;
	var g = 0.1;
	var b = 0.1;
	Canvas.setPenColor(r, g, b);
	Canvas.drawRectangle(filltrue, torsox+.002, torsoy+.002, torsow-.004, torsoh-.004, rad);
	makeOutline();	
	Canvas.drawRectangle(fillfalse, torsox, torsoy, torsow, torsoh, rad);
	//carves out arms
	r = 0;
	g = 0;
	b = 0;
	Canvas.setPenColor(r, g, b);
	Canvas.drawLine(.4, .38, .398, .5);
	Canvas.drawLine(.601, .38, .603, .5);
}
function drawkilt() {
	// draws kilt
	var trap_pts = genTrap(.399, .501, .202, .25, .17);
	var r = 0.6;
	var g = 0.5;
	var b = 0.4;
	Canvas.setPenColor(r, g, b);
	Canvas.drawRegion(true, trap_pts);
	makeOutline();
	Canvas.drawRegion(false, trap_pts);
}
function cutlegs() {
	// cuts out legs
	var r = 0.9;
	var g = 0.9;
	var b = 0.9;
	Canvas.setPenColor(r, g, b);
	var trap_pts = genTrap(.48, .675, .035, .055, .13);
	Canvas.drawRegion(true, trap_pts);
}
function drawhands() {
	var r = 1;
	var b = 1;
	var g = 1;
	Canvas.setPenColor(r, g, b);
	var lx = .36;
	var ly = .5;
	var rx = .61;
	var ry = .5;
	var cx = .45;
	var cy = .37;
	var chandwidtht = .1;
	var chandwidthb = .06;
	var chandheight = .08;
	var handwidtht = .03;
	var handwidthb = .05;
	var handheight = .04;
	var filltrue = true;
	var fillfalse = false;
	var lhand = gentrap(lx, ly, handwidtht, handwidthb, handheight);
	var rhand = gentrap(rx, ry, handwidtht, handwidthb, handheight);
	var chand = gentrap(cx, cy, chandwidtht, chandwidthb, chandheight);
	Canvas.drawRegion(filltrue, lhand);
	Canvas.drawRegion(filltrue, rhand);
	Canvas.drawRegion(filltrue, chand);
	// draw outlines and fingers
	makeOutline();
	Canvas.drawRegion(fillfalse, lhand);
	Canvas.drawRegion(fillfalse, rhand);
	Canvas.drawRegion(fillfalse, chand);
	var rxdec = rx + handwidtht;
	for(i = 0; i < 4; i++) {
		lx += .008;
		rxdec -= .008;
		cx += .015;
		Canvas.drawLine(lx, ly + .015, lx - .008, ly + handheight);
		Canvas.drawLine(rxdec, ry + .015, rxdec + .008, ry + handheight);
		Canvas.drawLine(cx, cy, cx + .015, cy + chandheight - .035);
	}
	
}
function drawCharacter() {
	// set light background color
	var bg_r = .9;
	var bg_g = .9;
	var bg_b = .9;
	Canvas.setBackgroundColor(bg_r, bg_g, bg_b);
	// setup for pen colors, and properties
	makeOutline();
	var penweight = 0.01;
	Canvas.setPenWeight(penweight);
	drawears();
	drawbody();
	drawface();
	drawtorso();
	drawhands();
	drawkilt();
	cutlegs();
}
// end functions ///////////////////////////////////////////////////////
_root.onEnterFrame = drawCharacter;
// end ///////////////////////////////////////////////////////////////////