-
Notifications
You must be signed in to change notification settings - Fork 0
/
dynamic-solver-demo.js
112 lines (69 loc) · 2.02 KB
/
dynamic-solver-demo.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
import Linkage from "./src/linkage.js";
const Unit = Linkage.Unit;
function DynamicSolverDemo(){
var scene;
this.name = "dynamic solver demo ";
this.init = function(){
if(scene !== undefined){
return this.restart();
}
scene = new Linkage.Scene( Linkage.SpringSolver );
scene.setGravity(true);
var dom = scene.initCanvas(innerWidth, innerHeight, 1000.0);
document.body.appendChild(dom);
// create points
const POINT_NUM = 20 ;
var points = [];
for( var i=0; i<POINT_NUM; i++){
points.push( new Linkage.Point("point0",
[0 ,(250 - i*30) * Unit.mm],
/* fixed = */ i==0 || i==POINT_NUM,
/* mass = */ 200 * Unit.g / POINT_NUM ));
scene.addPoint( points[i] );
if( i > 0){
// linear
var linear = new Linkage.Constraints.Linear( points[i-1], points[i]);
//linear._springK = 100000.0;
linear._springK = 100.0;
scene.addConstraint( linear );
// damper
var damper = new Linkage.Constraints.LinearDamper( points[i-1], points[i], 100000.0);
scene.addConstraint( damper );
}
if(1<i){
var rotational =
new Linkage.Constraints.RotationalSpring(points[i-2], points[i-1], points[i], 10.0);
scene.addConstraint( rotational);
}
}
var sma = new Linkage.Constraints.Linear( points[5], points[POINT_NUM - 2],
{min: 0,
max: 100*Unit.mm
}
);
sma._springK = 1.0;
scene.addConstraint( sma );
sma = new Linkage.Constraints.Linear( points[1], points[POINT_NUM - 6],
{min: 0,
max: 100*Unit.mm
}
);
sma._springK = 1.0;
scene.addConstraint( sma );
console.log( `dof is ${scene.getDof()}`);
scene.solver.build();
}
this.animate = function(){
this.handler = requestAnimationFrame( this.animate.bind(this) );
scene.solve();
scene.render();
};
this.clear = function(){
cancelAnimationFrame( this.handler );
scene.canvas.domElement.style.display = "none";
};
this.restart = function(){
scene.canvas.domElement.style.display = "block";
};
}
export default DynamicSolverDemo;