-
Notifications
You must be signed in to change notification settings - Fork 0
/
spring-solver-demo.js
147 lines (97 loc) · 3.73 KB
/
spring-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
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
import Linkage from "./src/linkage.js";
function SpringSolverDemo(){
var scene;
this.name = "spring solver demo ";
this.init = function(){
if(scene !== undefined){
return this.restart();
}
scene = new Linkage.Scene( ) ;
var dom = scene.initCanvas();
document.body.appendChild(dom);
// create points
var point0 = new Linkage.Point( [-5 ,0], /* fixed = */ true);
var point1 = new Linkage.Point( [-6,2], /* fixed = */ true);
var point2 = new Linkage.Point( [-4,1] );
var point3 = new Linkage.Point( [-3,3] ); // 交差
var point4 = new Linkage.Point( [0,5] ); // 上
var point5 = new Linkage.Point( [0,1] ); // 下
var point6 = new Linkage.Point( [3,3] ); // 交差
var point7 = new Linkage.Point( [4,1] ); //
var point8 = new Linkage.Point( [5,0] ); //
var point9 = new Linkage.Point( [6,2] ); //
scene.addPoint( point0 );
scene.addPoint( point1 );
scene.addPoint( point2 );
scene.addPoint( point3 );
scene.addPoint( point4 );
scene.addPoint( point5 );
scene.addPoint( point6 );
scene.addPoint( point7 );
scene.addPoint( point8 );
scene.addPoint( point9 );
// create constraint
var linear1 = new Linkage.Constraints.Linear( point1, point3 );
var linear2 = new Linkage.Constraints.Linear( point2, point3 );
var linear3 = new Linkage.Constraints.Linear( point0, point2 );
var linear4 = new Linkage.Constraints.Linear( point3, point4 );
var linear5 = new Linkage.Constraints.Linear( point3, point5 );
var linear6 = new Linkage.Constraints.Linear( point4, point6 );
var linear7 = new Linkage.Constraints.Linear( point5, point6 );
var linear8 = new Linkage.Constraints.Linear( point6, point7 );
var linear9 = new Linkage.Constraints.Linear( point7, point8 );
var linear10 = new Linkage.Constraints.Linear( point6, point9 );
var linear11 = new Linkage.Constraints.Linear( point8, point9 );
scene.addConstraint( linear1 );
scene.addConstraint( linear2 );
scene.addConstraint( linear3 );
scene.addConstraint( linear4 );
scene.addConstraint( linear5 );
scene.addConstraint( linear6 );
scene.addConstraint( linear7 );
scene.addConstraint( linear8 );
scene.addConstraint( linear9 );
scene.addConstraint( linear10 );
scene.addConstraint( linear11 );
// rotational constraint
var rotational1 = new Linkage.Constraints.Rotational(point1, point3, point5);
var rotational2 = new Linkage.Constraints.Rotational(point2, point3, point4);
var rotational3 = new Linkage.Constraints.Rotational(point4, point6, point7);
var rotational4 = new Linkage.Constraints.Rotational(point5, point6, point9);
scene.addConstraint( rotational1 );
scene.addConstraint( rotational2 );
scene.addConstraint( rotational3 );
scene.addConstraint( rotational4 );
// constrol constraint
var control = new Linkage.Constraints.Rotational(point2, point0, point1);
var motor = new Linkage.Motor( control );
//var control = new Linkage.Constraints.Linear(point1, point2);
scene.addConstraint( control );
scene.addMotor( motor );
console.log( `dof is ${scene.getDof()}`);
scene.solver.build( scene );
var $button = $("#start-stop");
var state = "start";
$button.click(()=>{
state = state === "start" ? "stop" : "start";
$button.text( state );
scene.running = state === "stop";
});
$button.click();
motor.move( Math.PI / 5, {min: Math.PI * 6 / 5, max: Math.PI * 8 / 5});
}
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 SpringSolverDemo;