Add some basic geometry types: Point, Size, Rect

This commit is contained in:
Eryn Wells 2023-02-03 18:01:11 -08:00
parent 186929921b
commit 2033e0c3a1

View file

@ -8,6 +8,73 @@ class Cell {
}
}
class Point {
x = 0;
y = 0;
constructor(x, y) {
this.x = x;
this.y = y;
}
}
class Size {
width = 0;
height = 0;
constructor(width, height) {
this.width = width;
this.height = height;
}
}
class Rect {
origin = new Point();
size = new Size();
static fromCoordinates(x, y, w, h) {
return new Rect(new Point(x, y), new Size(w, h));
}
constructor(origin, size) {
this.origin = origin;
this.size = size;
}
get minX() { return this.origin.x; }
get minY() { return this.origin.y; }
get maxX() { return this.origin.x + this.size.width; }
get maxY() { return this.origin.y + this.size.height; }
get area() { return this.size.width * this.size.height; }
insetRect(inset) {
const twiceInset = 2 * inset;
return Rect.fromCoordinates(
this.origin.x + inset,
this.origin.y + inset,
this.size.width - twiceInset,
this.size.height - twiceInset
);
}
intersects(otherRect) {
if (otherRect.minX > this.maxX)
return false;
if (otherRect.maxX < this.minX)
return false;
if (otherRect.minY > this.maxY)
return false;
if (otherRect.maxY < this.minY)
return false;
return true;
}
}
class Grid {
#width;
#height;