Add some basic geometry types: Point, Size, Rect
This commit is contained in:
parent
186929921b
commit
2033e0c3a1
1 changed files with 67 additions and 0 deletions
|
|
@ -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;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue