deploy: static pages
This commit is contained in:
+120
@@ -0,0 +1,120 @@
|
||||
import Point from './Point.js';
|
||||
var extent = [0, 0];
|
||||
var extent2 = [0, 0];
|
||||
var minTv = new Point();
|
||||
var maxTv = new Point();
|
||||
var OrientedBoundingRect = (function () {
|
||||
function OrientedBoundingRect(rect, transform) {
|
||||
this._corners = [];
|
||||
this._axes = [];
|
||||
this._origin = [0, 0];
|
||||
for (var i = 0; i < 4; i++) {
|
||||
this._corners[i] = new Point();
|
||||
}
|
||||
for (var i = 0; i < 2; i++) {
|
||||
this._axes[i] = new Point();
|
||||
}
|
||||
if (rect) {
|
||||
this.fromBoundingRect(rect, transform);
|
||||
}
|
||||
}
|
||||
OrientedBoundingRect.prototype.fromBoundingRect = function (rect, transform) {
|
||||
var corners = this._corners;
|
||||
var axes = this._axes;
|
||||
var x = rect.x;
|
||||
var y = rect.y;
|
||||
var x2 = x + rect.width;
|
||||
var y2 = y + rect.height;
|
||||
corners[0].set(x, y);
|
||||
corners[1].set(x2, y);
|
||||
corners[2].set(x2, y2);
|
||||
corners[3].set(x, y2);
|
||||
if (transform) {
|
||||
for (var i = 0; i < 4; i++) {
|
||||
corners[i].transform(transform);
|
||||
}
|
||||
}
|
||||
Point.sub(axes[0], corners[1], corners[0]);
|
||||
Point.sub(axes[1], corners[3], corners[0]);
|
||||
axes[0].normalize();
|
||||
axes[1].normalize();
|
||||
for (var i = 0; i < 2; i++) {
|
||||
this._origin[i] = axes[i].dot(corners[0]);
|
||||
}
|
||||
};
|
||||
OrientedBoundingRect.prototype.intersect = function (other, mtv) {
|
||||
var overlapped = true;
|
||||
var noMtv = !mtv;
|
||||
minTv.set(Infinity, Infinity);
|
||||
maxTv.set(0, 0);
|
||||
if (!this._intersectCheckOneSide(this, other, minTv, maxTv, noMtv, 1)) {
|
||||
overlapped = false;
|
||||
if (noMtv) {
|
||||
return overlapped;
|
||||
}
|
||||
}
|
||||
if (!this._intersectCheckOneSide(other, this, minTv, maxTv, noMtv, -1)) {
|
||||
overlapped = false;
|
||||
if (noMtv) {
|
||||
return overlapped;
|
||||
}
|
||||
}
|
||||
if (!noMtv) {
|
||||
Point.copy(mtv, overlapped ? minTv : maxTv);
|
||||
}
|
||||
return overlapped;
|
||||
};
|
||||
OrientedBoundingRect.prototype._intersectCheckOneSide = function (self, other, minTv, maxTv, noMtv, inverse) {
|
||||
var overlapped = true;
|
||||
for (var i = 0; i < 2; i++) {
|
||||
var axis = this._axes[i];
|
||||
this._getProjMinMaxOnAxis(i, self._corners, extent);
|
||||
this._getProjMinMaxOnAxis(i, other._corners, extent2);
|
||||
if (extent[1] < extent2[0] || extent[0] > extent2[1]) {
|
||||
overlapped = false;
|
||||
if (noMtv) {
|
||||
return overlapped;
|
||||
}
|
||||
var dist0 = Math.abs(extent2[0] - extent[1]);
|
||||
var dist1 = Math.abs(extent[0] - extent2[1]);
|
||||
if (Math.min(dist0, dist1) > maxTv.len()) {
|
||||
if (dist0 < dist1) {
|
||||
Point.scale(maxTv, axis, -dist0 * inverse);
|
||||
}
|
||||
else {
|
||||
Point.scale(maxTv, axis, dist1 * inverse);
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (minTv) {
|
||||
var dist0 = Math.abs(extent2[0] - extent[1]);
|
||||
var dist1 = Math.abs(extent[0] - extent2[1]);
|
||||
if (Math.min(dist0, dist1) < minTv.len()) {
|
||||
if (dist0 < dist1) {
|
||||
Point.scale(minTv, axis, dist0 * inverse);
|
||||
}
|
||||
else {
|
||||
Point.scale(minTv, axis, -dist1 * inverse);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return overlapped;
|
||||
};
|
||||
OrientedBoundingRect.prototype._getProjMinMaxOnAxis = function (dim, corners, out) {
|
||||
var axis = this._axes[dim];
|
||||
var origin = this._origin;
|
||||
var proj = corners[0].dot(axis) + origin[dim];
|
||||
var min = proj;
|
||||
var max = proj;
|
||||
for (var i = 1; i < corners.length; i++) {
|
||||
var proj_1 = corners[i].dot(axis) + origin[dim];
|
||||
min = Math.min(proj_1, min);
|
||||
max = Math.max(proj_1, max);
|
||||
}
|
||||
out[0] = min;
|
||||
out[1] = max;
|
||||
};
|
||||
return OrientedBoundingRect;
|
||||
}());
|
||||
export default OrientedBoundingRect;
|
||||
Reference in New Issue
Block a user