Actionscript:
-
// calculate the slope of a line
-
function calculateSlope(x1:Number, y1:Number, x2:Number, y2:Number):Number {
-
// rise over run
-
var s:Number = (y1 - y2) / (x1 - x2);
-
/*if (x1==x2) {
-
// slope is Infinity or -Infinity
-
}*/
-
return s;
-
}
-
-
/**
-
Test it out
-
*/
-
function draw(x1:Number, y1:Number, x2:Number, y2:Number):void {
-
graphics.moveTo(x1, y1);
-
graphics.lineTo(x2, y2)
-
var txt:TextField =TextField(addChild(new TextField()));
-
txt.text = calculateSlope(x1, y1, x2, y2).toFixed(2);
-
txt.x = x2, txt.y = y2;
-
}
-
-
graphics.lineStyle(0,0xFF0000);
-
draw (100, 100, 200, 200);
-
-
draw(100, 100, 200, 150);
-
-
draw(100, 100, 200, 100);
-
-
draw(100, 100, 99, 200);
This snippet shows how to calculate the slope of a line ... It demos the function by drawing a few lines and showing the corresponding slope of each.
It will draw this:

If (x1 == x2), the slope will be -Infinity or Infinity... depending on where you're using this calculation you may want to reset the s variable to something else, return null etc... I commented it out for simplicity.
Posted in Math, misc | Also tagged actionscript, as3 |
Actionscript:
-
var leng:int = 10;
-
for (var i:int = 0, j:int = leng; i <leng; i++, j = leng - i){
-
trace(i, j);
-
}
-
-
/*outputs
-
0 10
-
1 9
-
2 8
-
3 7
-
4 6
-
5 5
-
6 4
-
7 3
-
8 2
-
9 1
-
*/
Looping backwards and forwards.
Posted in Math, misc, one-liners | Also tagged actionsnippet |
Actionscript:
-
import com.actionsnippet.qbox.*;
-
-
[SWF (backgroundColor=0xAA0000, width=700, height=600, frameRate=60)]
-
-
var sim:QuickBox2D = new QuickBox2D(this);
-
-
sim.createStageWalls();
-
-
/**
-
create a dancing pill
-
*/
-
// all x and y coords are relative to the center of the group
-
var partA:QuickObject = sim.addCircle({x:-1, y:0, radius:0.5, restitution:.9});
-
var partB:QuickObject = sim.addCircle({x:1, y:0, radius:0.5, restitution:.9});
-
var partC:QuickObject = sim.addBox({x:0, y:0, width:2, height:1});
-
// all the parts are passed into the objects array
-
// addGroup() groups the parts together into one rigid body
-
var pill:QuickObject = sim.addGroup({objects:[partA, partB, partC], x:3, y:3, angle:0.3});
-
-
/**
-
create another group
-
*/
-
partA = sim.addCircle({x:0, y:0, radius:1});
-
partB = sim.addBox({x:0, y:1, width:1, height:1, fillColor:0x666666});
-
partC = sim.addBox({x:0, y:-1, width:1, height:1, fillColor:0x666666});
-
sim.addGroup({objects:[partA, partB, partC], x:8, y:3, angle:0.3});
-
-
/**
-
create two circles linked together by a stretchy joint
-
*/
-
partA = sim.addCircle({x:15, y:3, fillColor:0x000000, anglularDamping:1});
-
partB = sim.addCircle({x:17, y:3, fillColor:0xFFFFFF, anglularDamping:1});
-
// if x1, y1, x2 and y2 properties are not set, the joint is automatically placed
-
// at the b2Body's center
-
sim.addJoint({a:partA.body, b:partB.body, frequencyHz:1});
-
-
sim.start();
-
sim.mouseDrag();
You'll need QuickBox2D Alpha 106 to run this... This snippet demo's the addGroup() method, which allows for easy grouping of shapes. I updated the docs today to feature a simple explanation of how this works.
Have a look at the swf here...

Actionscript:
-
import com.actionsnippet.qbox.*;
-
-
[SWF(backgroundColor=0x000000, width=700, height=600)]
-
-
var sim:QuickBox2D = new QuickBox2D(this);
-
-
sim.setDefault({fillColor:0x003366, lineColor:0x2B80D5});
-
sim.createStageWalls();
-
-
var i:int = 0;
-
for (i= 0; i<10; i++){
-
sim.addCircle({x:5 + i, y:7, radius:0.3, linearDamping:1, angularDamping:1, fillColor:0x78B4C2, isBullet:true});
-
}
-
-
for (i= 0; i<2; i++){
-
var poly:Array = [];
-
var r:Number = 3;
-
var step:Number = Math.PI / 6;
-
for (var t:Number = 0; t<=Math.PI; t+=step){
-
poly.push(r * Math.cos(t));
-
poly.push(r * Math.sin(t));
-
}
-
r = 2;
-
for (t = Math.PI; t>= -step; t-=step){
-
poly.push(r * Math.cos(t));
-
poly.push(r * Math.sin(t));
-
}
-
// using points instead of verts causes QuickBox2D to triangulate the polygon
-
// the wireframe boolean changes rendering style for polys
-
sim.addPoly({x:4 + i *7, y:16, points:poly, wireframe:Boolean(i), linearDamping:1.5, angularDamping:1});
-
}
-
-
sim.start();
-
sim.mouseDrag();
I just uploaded QuickBox2D Alpha 106 which includes a few bug fixes and support for compound shapes and easier polys. I used the algorithm from yesterdays post to significantly simplify the way QuickBox2D handles the description of polygons.
You'll need QuickBox2D Alpha 106 or greater, if you want to test this....
or just have a look at the demo here.

This triangulation is really better suited for 3D stuff - Box2D supports multiple convex polygons in one rigid body... this algorithm makes more shapes (triangles) than Box2D needs - I'll probably swap out the algorithm in the near future.
Tomorrow I'll be posting a demo about the way QuickBox2D simplifies compound shapes. I have yet to update the docs to include the new features of Alpha 106. That will happen along with tomorrows post.