flash on 2013-11-14
Followup to: http://wonderfl.net/c/Aguw
Same thing but without using sqrt or atan2
♥0 |
Line 67 |
Modified 2013-11-14 23:24:28 |
MIT License
archived:2017-03-30 11:54:56
ActionScript3 source code
/**
* Copyright mutantleg ( http://wonderfl.net/user/mutantleg )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/gEbX
*/
package {
import flash.events.Event;
import flash.text.TextField;
import flash.display.Sprite;
public class FlashTest extends Sprite {
public function FlashTest() {
deb = new TextField();
addChild(deb);
stage.addEventListener(Event.ENTER_FRAME, onEnter);
}//ctor
public var deb:TextField;
public function onEnter(e:Event):void
{
graphics.clear();
graphics.lineStyle(2,0);
var mx:Number;
var my:Number;
var ax:Number;
var ay:Number;
var ang:Number;
var ang2:Number;
var ang3:Number;
mx = stage.mouseX;
my = stage.mouseY;
ax = 200;
ay = 200;
ang = Math.atan2(my-ay,mx-ax);
//ang3 = getAng(my-ay,mx-ax)*1.57075;
ang = getAng(my-ay,mx-ax);
//graphics.drawCircle(ax,ay,7);
graphics.moveTo(ax,ay);
graphics.lineTo(ax+Math.cos(ang)*16,ay+Math.sin(ang)*16);
ang2 = 0;
ang2 = 0.3; //1.57;
ang2 = 6.2;
graphics.moveTo(ax,ay);
graphics.lineTo(ax+Math.cos(ang2)*16,ay+Math.sin(ang2)*16);
graphics.moveTo(ax,ay);
graphics.lineTo(ax+Math.cos(ang2+0.785)*160,ay+Math.sin(ang2+0.785)*160);
graphics.moveTo(ax,ay);
graphics.lineTo(ax+Math.cos(ang2-0.785)*160,ay+Math.sin(ang2-0.785)*160);
var str:String;
str = ""+ang;
str+="\n"+ang2;
// str+="\n"+ang3;
var d:Number;
d = ang - ang2;
if (d > 3.14) { d-= 6.28; }
if (d < -3.14) { d +=6.28;}
str += "\n "+d;
var see:Boolean;
d = ((d < 0) ? -d : d);
see = d < (3.1415*0.25);
if (see)
{
graphics.lineStyle(1,0);
graphics.moveTo(ax,ay);
graphics.lineTo(mx,my);
}
deb.text = str;
}//onenter
//based on
//http://stackoverflow.com/questions/16542042/fastest-way-to-sort-vectors-by-angle-without-actually-computing-that-angle
public function getAng(dy:Number, dx:Number):Number
{
var a:Number;
a = dx / ((dy<0?-dy:dy)+(dx<0?-dx:dx));
if (dy < 0) { return (a-1)*1.57075; }
return (1-a)*1.57075;
}//getang
}//classend
}