Skip to content

Commit

Permalink
commit text …
Browse files Browse the repository at this point in the history
  • Loading branch information
dodo committed Aug 29, 2010
1 parent 0392ed0 commit 2ce4de5
Show file tree
Hide file tree
Showing 3 changed files with 41 additions and 16 deletions.
6 changes: 5 additions & 1 deletion public/css/style.less
Expand Up @@ -28,7 +28,6 @@ body{
.set_font();
}


#title_bar {
.init_bar();
width:80%;
Expand Down Expand Up @@ -168,6 +167,11 @@ body{
top:50%;
left:50%;
z-index:101;
.holder {
.delete_node.button {
display:none;
}
}
.body {
font-weight:bold;
font-size:105%;
Expand Down
50 changes: 35 additions & 15 deletions public/js/joint.js
Expand Up @@ -4,10 +4,10 @@ var springsPhysics = function () {
// defaults

var _default = {
length: 10,
strength: 50,
mass: 1342,
charge: 30,
length: 100,
strength: 500,
mass: 342,
charge: 1000,
friction: 0.9,
};

Expand All @@ -18,7 +18,8 @@ var springsPhysics = function () {
var mid = {x: obj.width() / 2, y: obj.height() / 2};
var pos = {x:off.x - offset.left + mid.x,
y:off.y - offset.top + mid.y};
return {offset:off, middle:mid, position:pos};
var size = (obj.width()+obj.height()) / 2;
return {offset:off, middle:mid, position:pos, size:size};
};

var min = function (s1,s2) {if(s2>s1) return s1; else return s2};
Expand All @@ -38,13 +39,25 @@ var springsPhysics = function () {
if(typeof(params) == "undefined") params = _default;
// TODO more params check
var engine = build(params);
var realtime = function (ms) {
var realtime = function (/*time in millisec*/ ms) {
var dt = ms / 1000;
simulate(engine, dt);
animate(engine, dt);
draw(engine);
return engine;
};
return {realtime:realtime};
var step = function (/*time in millisec*/ ms, /*number of steps*/ nr) {
var dt = ms / 1000;
for(var i = 0 ; i < nr ; i++) simulate(engine, dt);
};
var pre_render = function (/*time in millisec*/ ms, /*number of steps*/ nr) {
step(ms, nr);
var dt = ms / 1000;
animate(engine, dt);
draw(engine);
return engine;
};
return {realtime:realtime, step:step, pre_render:pre_render};
};

var build = system.build = function (params) {
Expand All @@ -56,66 +69,73 @@ var springsPhysics = function () {
var current = $(this);
var composition = _position_helper(window.offset(), current);
nodes[current[0].id] = cur_node = {
id: current[0].id,
object: current,
position: composition.position,
middle: composition.middle,
offset: composition.offset,
size: composition.size,
acceleration: {x:0, y:0},
speed: {x:0, y:0},
charge: params.charge,
mass: params.mass,
friction: params.friction,
joints: [],
joints: {},
};
//get joints
$.each(current.attr("relation").split(","),function (_,relation) {
if(relation != "") {
var target = $("#"+relation);
if(target.length) {
nodes[current[0].id].joints.push(joints.push({
nodes[cur_node.id].joints[target[0].id] =
joints.push({
source: cur_node,
target: target[0].id,
length: params.length,
strength: params.strength,
}));
});
}
}
});
});
//fill relations with nodes
$.each(joints,function (_,joint) {joint.target = nodes[joint.target];});
return {nodes:nodes, joints:joints};
return {nodes:nodes, joints:joints, params:params};
};

var simulate = system.run = function (engine, dt) {
//calc joint acceleration
$.each(engine.joints, function (_, joint) {
var diff = vsub(joint.target.position, joint.source.position);
var dir = vnorm(diff);
var difflen = vmag(diff) - joint.length;
var difflen = joint.length - vmag(diff);
var accel = vmul(dir, difflen * joint.strength);//<- calc stuff
joint.target.acceleration = vadd(joint.target.acceleration,accel);
});
//calc electric force acceleration (bl!tz)
$.each(engine.nodes, function (_, node) {
var accel = {x:0, y:0};
$.each(engine.nodes, function (_, other) {
if(other != node) {
if(other.id != node.id) {
var diff = vsub(node.position,other.position);
var dir = vnorm(diff);
var threshold = engine.params.length + node.size;
var difflen = diff.x*diff.x -
diff.y*diff.y; //vmag(diff)^2 //<- calc stuff
if(Math.abs(difflen) < threshold)
difflen = (1 - difflen/threshold) * threshold;
if(Math.abs(difflen) > 1e2)
accel = vadd(accel,vmul(dir,
(other.charge*other.charge)/difflen));
else accel = vadd(accel,vmul(dir,threshold));
}
});
node.acceleration = vadd(node.acceleration,accel);
});
//apply results
$.each(engine.nodes, function (_, node) {
// omitt all currently hovered nodes
if(!(node.object.hasClass("fixed"))) {
// omitt all currently hovered nodes and root too
if(!(node.object.hasClass("fixed")) && !(node.object.hasClass("root"))) {
//calc speed
node.speed = vadd(node.speed, vmul(node.acceleration,dt/node.mass));
node.speed = vmul(node.speed, node.friction);// ^^^ calc stuff
Expand Down
1 change: 1 addition & 0 deletions views/layout.haml
Expand Up @@ -6,6 +6,7 @@
%script{type:'text/javascript', src:'http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js'}
%script{type:'text/javascript', src:'http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.4/jquery-ui.min.js'}
%script{type:'text/javascript', src:'/js/lib/socket.io.js'}
%script{type:'text/javascript', src:'/js/lib/jquery.cookie.js'}
%script{type:'text/javascript', src:'/js/lib/colorpicker.js'}
%script{type:'text/javascript', src:'/js/joint.js'}
%script{type:'text/javascript', src:'/js/node2.js'}
Expand Down

0 comments on commit 2ce4de5

Please sign in to comment.