-
Notifications
You must be signed in to change notification settings - Fork 1
/
polygon.ts
45 lines (44 loc) · 1.49 KB
/
polygon.ts
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
namespace asteroids {
export class Polyline {
private points_: Vec2[];
public get points() { return this.points_; }
constructor(points: Vec2[] = null) {
this.points_ = points || [];
}
public clone(): Polyline {
return new Polyline(this.points_.map(pt => pt.clone()));
}
public static MaxToRef(pl: Polyline, ref: Vec2): Vec2 {
pl.points.forEach(pt => {
ref.x = Fx.max(ref.x, pt.x);
ref.y = Fx.max(ref.y, pt.y);
});
return ref;
}
public static MinToRef(pl: Polyline, ref: Vec2): Vec2 {
pl.points.forEach(pt => {
ref.x = Fx.min(ref.x, pt.x);
ref.y = Fx.min(ref.y, pt.y);
});
return ref;
}
}
export class Polygon {
private polylines_: Polyline[];
public get polylines() { return this.polylines_; }
constructor(polylines: Polyline[] = null) {
this.polylines_ = polylines || [];
}
public clone(): Polygon {
return new Polygon(this.polylines_.map(line => line.clone()));
}
public static MaxToRef(pg: Polygon, ref: Vec2): Vec2 {
pg.polylines_.forEach(pl => Polyline.MaxToRef(pl, ref));
return ref;
}
public static MinToRef(pg: Polygon, ref: Vec2): Vec2 {
pg.polylines_.forEach(pl => Polyline.MinToRef(pl, ref));
return ref;
}
}
}