views:

45

answers:

1

this seems a bit nutty:

var r:Rectangle = new Rectangle();
trace("initial rect: " + r);        // (x=0, y=0, w=0, h=0)

var p:Point = new Point(-5, -3);    // (x=-5, y=-3)
trace("point: " + p);

r.inflatePoint(p);
trace("inflated rect: " + r);       // (x=5, y=3, w=-10, h=-6)

i would expect the result to be (x=-5, y=-3, width=5, height=3).

here's an implementation that returns the expected result:

public static function inflateRectByPoint(r:Rectangle,p:Point):void
{
 var d:Number;

 d = p.x - r.x;
 if (d < 0)
 {
  r.x      += d;
  r.width  -= d;
 }
 else if (d > r.width)
 {
  r.width = d;
 }

 d = p.y - r.y;
 if (d < 0)
 {
  r.y      += d;
  r.height -= d;
 }
 else if (d > r.height)
 {
  r.height = d;
 }
}
+2  A: 

You're misunderstanding what inflatePoint does.

It's the same as inflate (except taking a Point argument rather than two coordinates) - enlarges the rectangle in every direction.

new Rectangle(0, 0, 2, 5).inflatePoint(new Point(2, 2))

Results in a Rectangle from -2, -2 to 4, 7.

Putting in negative numbers shrinks the rectangle - until it gets smaller than 0, at which point it inverts, as expected.

Anon.
So ... users beware. Do your own error checking.
Hamish Grubijan
aaah. my mistake. thanks.
orion elenzil