Actionscript:
-
var canvas:BitmapData=new BitmapData(400,400,false,0xCCCCCC);
-
addChild(new Bitmap(canvas));
-
-
var a:Number=-1.21;
-
var r:Rectangle=new Rectangle(0,0,3,5);
-
var halfWidth:Number=canvas.width/2;
-
var halfHeight:Number=canvas.height/2;
-
-
render();
-
-
function render():void{
-
for (var x:Number = -2; x<=2; x+=.05) {
-
for (var y:Number = -2; y<=2; y+=.05) {
-
-
// equation from : http://en.wikipedia.org/wiki/Bicuspid_curve
-
//(x^2 - a^2) * (x - a)^2 + (y^2 - a^2) * (y^2 - a^2) = 0
-
-
// unpoptimized:
-
// var e:Number = (x*x - a*a) * (x-a)*(x-a) + (y*y-a*a) * (y*y-a*a);
-
// optimized:
-
var x_a:Number=x-a;
-
// factoring: x^2 - a^2 = (x + a) * (x - a)
-
var y2_a2:Number = (y + a) * (y - a);
-
var e:Number = (x + a) * x_a * x_a * x_a + y2_a2 * y2_a2;
-
-
// tolerance beetween .7 & -.1;
-
if (e<.7&&e>-.1) {
-
r.x=halfWidth+y*50;
-
r.y=halfHeight-x*100;
-
canvas.fillRect(r, 0x000000);
-
}
-
}
-
}
-
}
I've been looking for a single math equation to draw a tooth for sometime.... today I stumbled upon this... and realized it could probably be changed to look more like a tooth.
This snippet will draw this:

I'm using a graphing method here that allows me to use the Cartesian form of the equation and not the parameteric... I'll explain a bit more about this in a later post.
Posted in BitmapData, Math | Also tagged actionscript |
Actionscript:
-
var thumbNum:Number = 20;
-
var spacing:Number = 10;
-
var thumbs:MovieClip = new MovieClip();
-
addChild(thumbs);
-
for (var i:int = 0; i<thumbNum; i++){
-
var t:MovieClip = new MovieClip();
-
with(t.graphics) beginFill(0x666666), drawRect(0,0,100,50);
-
t.x = i * (t.width + spacing);
-
t.y = 5;
-
t.buttonMode = true;
-
thumbs.addChild(t);
-
}
-
var minX:Number = stage.stageWidth - thumbs.width - spacing;
-
var destX:Number = thumbs.x = spacing;
-
var velX:Number = 10;
-
var stageThird:Number = stage.stageWidth / 3;
-
var right:Number = stageThird * 2;
-
var left:Number = stageThird;
-
addEventListener(Event.ENTER_FRAME, onLoop);
-
function onLoop(evt:Event):void {
-
if (mouseX> right){
-
destX -= velX;
-
}
-
if (mouseX <left){
-
destX += velX;
-
}
-
if (destX <minX){
-
destX = minX;
-
}
-
if (destX> spacing){
-
destX = spacing;
-
}
-
thumbs.x += (destX - thumbs.x) /4;
-
}
This snippet shows a technique for a common type of navigation.
Posted in UI, motion | Also tagged actionsnippet |
Actionscript:
-
[SWF(width=600,height=650)]
-
var canvas:BitmapData=Bitmap(addChild(new Bitmap(new BitmapData(600,300,false,0xCCCCCC),"auto",true))).bitmapData;
-
var stills:BitmapData=Bitmap(addChild(new Bitmap(new BitmapData(600,380,false,0xAAAAAA),"auto",true))).bitmapData;
-
getChildAt(1).y=300;
-
-
var c:Shape = new Shape();
-
var m:Matrix = new Matrix();
-
m.createGradientBox(40, 40, 0, 0, 0);
-
c.graphics.beginGradientFill(GradientType.RADIAL, [0xCC0000, 0xCC0000], [1, 0], [0, 255], m);
-
c.graphics.drawCircle(20,20,20);
-
-
addEventListener(Event.ENTER_FRAME, onLoop);
-
function onLoop(evt:Event):void {
-
c.x=mouseX-c.width/2;
-
c.y=mouseY-c.height/2;
-
canvas.draw(c, c.transform.matrix);
-
}
-
-
var spacing:Number = 10;
-
var cols:Number = 4;
-
var max:Number = cols * cols;
-
var size:Number = 1/(canvas.width/((canvas.width / cols) - spacing));
-
var st:Matrix = new Matrix();
-
st.scale(size, size);
-
var w:Number = canvas.width * st.d + spacing;
-
var h:Number = canvas.height * st.d + spacing;
-
var timer:Timer=new Timer(500);
-
timer.start();
-
timer.addEventListener(TimerEvent.TIMER, onCapture);
-
function onCapture(evt:TimerEvent):void {
-
var inc:int = timer.currentCount - 1;
-
st.tx = (inc% cols) * w+ spacing / 2;
-
st.ty = int(inc / cols) * h + spacing;
-
stills.draw(canvas, st);
-
if (timer.currentCount==max) {
-
timer.reset();
-
timer.start();
-
}
-
}
Take snapshots of a given BitmapData and arrange them in a grid. I wrote this snippet quickly in response to a question so it could probably use a little clean up...
You'll need to move your mouse over the large canvas bitmap (drawing to it) to see anything...
Posted in BitmapData | Also tagged actionscript |
Actionscript:
-
var canvas:BitmapData = new BitmapData(400,400,false, 0xCCCCCC);
-
addChild(new Bitmap(canvas));
-
-
addEventListener(Event.ENTER_FRAME, onLoop);
-
function onLoop(evt:Event):void {
-
canvas.fillRect(canvas.rect, 0xCCCCCC);
-
-
var r:Number = Math.abs(200 - mouseX);
-
var r2:Number = r * r;
-
var inc:Number = 1 / r;
-
var xp:Number = .00000001;
-
var yp:Number = -r;
-
while(yp<r){
-
var y:Number = 200 + yp;
-
yp += xp * inc;
-
xp = Math.sqrt(r2 - yp * yp);
-
canvas.setPixel(200 + xp, y, 0x000000);
-
canvas.setPixel(200 - xp, y, 0x000000);
-
}
-
}
A slow way to draw circles using setPixel().
Actionscript:
-
var canvas:BitmapData = new BitmapData(400,400,false, 0xCCCCCC);
-
addChild(new Bitmap(canvas));
-
-
addEventListener(Event.ENTER_FRAME, onLoop);
-
function onLoop(evt:Event):void {
-
canvas.fillRect(canvas.rect, 0xCCCCCC);
-
var r:Number = Math.abs(200 - mouseX);
-
var r2:Number = r * r;
-
var inc:Number = 1 / r;
-
var xp:Number = .000001;
-
var yp:Number = -r;
-
while(yp <= 0){;
-
var x1:Number = 200 + xp;
-
var y1:Number = 200 + yp
-
var x2:Number = 200 - xp;
-
var y2:Number = 200 - yp;
-
canvas.setPixel(x1, y1, 0x000000);
-
canvas.setPixel(x1, y2, 0x000000);
-
canvas.setPixel(x2, y1, 0x000000);
-
canvas.setPixel(x2, y2, 0x000000);
-
yp += xp * inc;
-
xp = Math.sqrt(r2 - yp * yp);
-
}
-
}
Little better, still slow.
I was brainstorming about a few things today and somehow these two slow circle drawing algorithms popped out. These are pretty useless compared to some of the famous algorithms I've posted in the past. Kind of interesting nevertheless.
Posted in misc, setPixel | Also tagged actionscript |