In case Flash no longer exists; a copy of this site is included in the Flashpoint archive's "ultimate" collection.

# Calculate Angle Direction from Middle Point in Rectangle

```a_TR = Math.atan2( (-1) * rectangle.height, (+1) * rectangle.width );
a_BR = Math.atan2( (+1) * rectangle.height, (+1) * rectangle.width );
a_BL = Math.atan2( (+1) * rectangle.height, (-1) * rectangle.width );
a_TL = Math.atan2( (-1) * rectangle.height, (-1) * rectangle.width );

if ( alfa == a_TR )
direction = "top right";

else if ( alfa > a_TR && alfa < a_BR )
direction = "right";

else if ( alfa == a_BR )
direction = "bottom right";

else if ( alfa > a_BR && alfa < a_BL )
direction = "bottom";

else if ( alfa == a_BL )
direction = "bottom left";

else if ( alfa == a_TL )
direction = "top left";

else if ( alfa > a_TL && m_a < a_TR )
direction = "top";

else if ( alfa > a_TL || m_a < a_TL )
direction = "left";

else
direction = "null";```
```/**
*/

/// @mxmlc -swf-version 15
package {
import flash.display.Sprite;
import flash.text.TextField;
import flash.text.TextFormat;
import flash.geom.Point;
[SWF(width="465", height="465")]
public class MXMLC extends Sprite {

///-----------------------
///    VARIABLES         |
///-----------------------

private var m_w:int;
private var m_h:int;
private var m_p:Point;
private var m_a:Number = 0;
private var m_1:Number = 0;
private var m_2:Number = 0;
private var m_3:Number = 0;
private var m_4:Number = 0;

private var m_s:String = "";

///-----------------------
///    UPDATE 		 |
///-----------------------

private function update(e:*= null):void
{
m_w = p2.x - p1.x;
m_h = p2.y - p1.y;

m_p = new Point( m_w/2 + p1.x, m_h/2 + p1.y );

var a_y:Number = stage.mouseY - m_p.y;
var a_x:Number = stage.mouseX - m_p.x;

m_a = Math.atan2( a_y , a_x );

m_1 = Math.atan2( -m_h, m_w );
m_2 = Math.atan2( m_h, m_w );
m_3 = Math.atan2( m_h, -m_w );
m_4 = Math.atan2( -m_h, -m_w );

if ( m_a == m_1 ) m_s = "top right";
else if ( m_a > m_1 && m_a < m_2 ) m_s = "right";
else if ( m_a == m_2 ) m_s = "bottom right";
else if ( m_a > m_2 && m_a < m_3 ) m_s = "bottom";
else if ( m_a == m_3 ) m_s = "bottom left";
//else if ( m_a > m_3 && m_a > m_4 ) m_s = "left";
//else if ( m_a < m_4 && m_a < m_1 ) m_s = "left";
else if ( m_a == m_4 ) m_s = "top left";
else if ( m_a > m_4 && m_a < m_1 ) m_s = "top";
else if ( m_a > m_4 || m_a < m_4 ) m_s = "left";
else m_s = "null";

debugDraw();
}

///-----------------------
///    DISPLAY           |
///-----------------------
private var tx:TextField;
private var canvas:Sprite;
private var run:Boolean;
private var p1:DragPoint;
private var p2:DragPoint;

public function MXMLC ()
{
// init stage
stage.align = 'tl';
stage.scaleMode = 'noScale';
stage.frameRate = 40;
m_w = stage.stageWidth;
m_h = stage.stageHeight;
graphics.beginFill(0x26274A);
graphics.drawRect(0,0, m_w,100);
graphics.endFill();
graphics.beginFill(0xFEE285);
graphics.drawRect(0,100, m_w,m_h-100);

// text
var ft:TextFormat = new TextFormat();
ft.size = 22;
ft.color = 0xD6E2D6;
ft.leftMargin = 12;
ft.letterSpacing = 4;
ft.tabStops = [60,220,280];
tx = new TextField();
tx.mouseEnabled = false;
tx.defaultTextFormat = ft;
tx.mouseEnabled = false;
tx.defaultTextFormat = ft;
tx.setTextFormat( ft );
tx.width = stage.stageWidth;
tx.height = 70;
tx.y = 20;

// canvas
canvas = new Sprite();

p1 = new DragPoint(0x62E0EE, 0x126C76);
p1.x = 100;
p1.y = 170;
p2 = new DragPoint(0x62E0EE, 0x126C76);
p2.x = 350;
p2.y = 400;

// stage events
run = true;
stage.addEventListener('enterFrame', function(e:*):void {if (!run) return; update(); });
} // constractor
private function debugDraw():void
{
// Trace data
tx.text = "W" + "\t" + m_w.toFixed(0) +
"\t" + "H" + "\t" + m_h.toFixed(0) +
"\n" + "A" + "\t" + (m_a * 57.296).toFixed(2) +
"\t" + "S" + "\t" + m_s.toUpperCase();

// Draw data
canvas.graphics.clear();

// Draw fill
canvas.graphics.lineStyle();
canvas.graphics.beginFill(0x03FCFC,0.2);
if ( m_s.indexOf('left') >-1 )
{
canvas.graphics.moveTo(p1.x, p1.y);
canvas.graphics.lineTo(m_p.x, m_p.y);
canvas.graphics.lineTo(p1.x, p2.y);
canvas.graphics.lineTo(p1.x, p1.y);
}
if ( m_s.indexOf('top') >-1 )
{
canvas.graphics.moveTo(p1.x, p1.y);
canvas.graphics.lineTo(m_p.x, m_p.y);
canvas.graphics.lineTo(p2.x, p1.y);
canvas.graphics.lineTo(p1.x, p1.y);
}
if ( m_s.indexOf('right') >-1 )
{
canvas.graphics.moveTo(p2.x, p2.y);
canvas.graphics.lineTo(m_p.x, m_p.y);
canvas.graphics.lineTo(p2.x, p1.y);
canvas.graphics.lineTo(p2.x, p2.y);
}
if ( m_s.indexOf('bottom') >-1 )
{
canvas.graphics.moveTo(p2.x, p2.y);
canvas.graphics.lineTo(m_p.x, m_p.y);
canvas.graphics.lineTo(p1.x, p2.y);
canvas.graphics.lineTo(p2.x, p2.y);
}
canvas.graphics.endFill();

// Draw angle
var p:Point = Point.polar( 50, m_a ).add( m_p );
canvas.graphics.lineStyle(30, 0xC2A84E);
canvas.graphics.moveTo(m_p.x, m_p.y);
canvas.graphics.lineTo(p.x, p.y);

// Draw lines
canvas.graphics.lineStyle(3, 0x968034 );
canvas.graphics.moveTo(p1.x, p1.y);
canvas.graphics.lineTo(p2.x, p2.y);
canvas.graphics.moveTo(p2.x, p1.y);
canvas.graphics.lineTo(p1.x, p2.y);
canvas.graphics.lineStyle(4, 0xC2A84E );
canvas.graphics.drawRect(p1.x, p1.y, m_w, m_h);

} // debugDraw
} // class
} // package
import flash.display.Sprite;
import flash.geom.Point;
class DragPoint extends Sprite
{
public function get point():Point { return new Point(x, y); }
public function DragPoint(c:uint, l:uint)
{
graphics.lineStyle(4, l );
graphics.beginFill(c);
graphics.drawCircle(0, 0, 14);
buttonMode = useHandCursor = true;
var down:Boolean = false;
if ( down ) return; down = true;
function drag(_e:*):void{
x = stage.mouseX;
y = stage.mouseY;
alpha = 0.5;
};
function stop(_e:*):void{
down = false;
stage.removeEventListener('mouseUp', stop);
removeEventListener('enterFrame', drag );
alpha = 1;
};