-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathSpringForceActor.java
More file actions
31 lines (29 loc) · 1.14 KB
/
Copy pathSpringForceActor.java
File metadata and controls
31 lines (29 loc) · 1.14 KB
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
public class SpringForceActor implements ForceActor {
Spring spring;
double k;
double restLength;
public SpringForceActor(Spring spring, double k, double restLength) {
this.spring = spring;
this.k = k;
this.restLength = restLength;
}
@Override
public Force getForce(PhysicsObject physicsObject) {
Vector2 onLocalPosition;
Vector2 onPosition;
Vector2 byPosition;
if (physicsObject == spring.startObject) {
onLocalPosition = spring.startPoint.rotate(physicsObject.rotation);
onPosition = spring.getStartWorldPosition();
byPosition = spring.getEndWorldPosition();
} else if (physicsObject == spring.endObject) {
onLocalPosition = spring.endPoint.rotate(physicsObject.rotation);
onPosition = spring.getEndWorldPosition();
byPosition = spring.getStartWorldPosition();
} else {
return null;
}
byPosition = byPosition.minus(byPosition.minus(onPosition).normalize().scale(restLength));
return new Force(onLocalPosition, byPosition.minus(onPosition).scale(k));
}
}