長方形を回転させたときに何が起こるかわかりませんが、これが私の最初の例です。これはSVG用だったので、私はjavascriptを使用しています。有用であれば、PHPへの移植は比較的簡単です。
(function(win) {
function Rectangle(el) {
this.element = el;
this._area = ''
Rectangle.instances.push(this);
}
Rectangle.instances = [];
Rectangle.largest = function() {
var areas = Rectangle.collect('area');
var largest_area = Math.max.apply(Math, areas);
return Rectangle.instances[areas.indexOf(largest_area)]
}
Rectangle.collect = function(prop) {
var props = [], m;
for (var i=0, l = Rectangle.instances.length; i<l; i++) {
if (m = Rectangle.instances[i][prop]) {
var val = (typeof m === 'function') ? m.call(Rectangle.instances[i]) : m;
props.push(val);
}
}
return props;
}
Rectangle.prototype.area = function() {
if (!this._area) { this._area = this.element.width * this.element.height; }
return this._area;
}
Rectangle.prototype.overlaps = function(r) {
var origin_inside = r.element.x <= this.element.x && r.element.y <= this.element.y,
ends_inside_x = r.element.x + r.element.width >= this.element.x + this.element.width,
ends_inside_y = r.element.y + r.element.height >= this.element.y + this.element.height;
return origin_inside && ends_inside_x && ends_inside_y
}
rect1 = new Rectangle({width:10, height: 20, x:10, y:30});
rect2 = new Rectangle({width:5, height: 30, x:20, y:40});
rect3 = new Rectangle({width:5, height: 1, x:12, y:31});
console.log(rect2.overlaps(rect1)) //false
console.log(Rectangle.largest().overlaps(rect2)) //false
console.log(rect2.overlaps(rect2)) //true
console.log(rect3.overlaps(rect1)) //true
//to use this with actual SVG elements,
var svgCanvas = document.getElementById('svgElementId');
var ctx = svgCanvas.contentDocument
svgr1 = new Rectangle(ctx.getElementById('rect1'))
svgr2 = new Rectangle(ctx.getElementById('rect2'))
console.log(svgr1.overlaps(svgr2)) //true
})(this);