forked from: forked from: リマソン第2弾 (定義編)
forked from forked from: リマソン第2弾 (定義編) (diff: 25)
ActionScript3 source code
/**
* Copyright bradsedito ( http://wonderfl.net/user/bradsedito )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/tueI
*/
package
{
import flash.display.Sprite;
import flash.events.Event;
import flash.text.TextField;
import flash.net.navigateToURL;
import flash.net.URLRequest;
import flash.events.MouseEvent;
import net.wonderfl.utils.WonderflSWFUrl;
public class Main extends Sprite
{
private var _banner:TextField;
private var _tf:TextField;
private var Li:Limacon;
private var Ray:Sprite;
public function Main():void
{
[SWF(width="465",height="465",backgroundcolor="#000000")]
Li = new Limacon(232, 90, 0);
Li.color = 0x800000;
Li.thickness = 2;
Li.x = 232;
Li.y = 232;
Li.showCircle = true;
Li.circleColor = 0x000000;
Li.draw();
addChild(Li);
// ガイド用の直線
Ray = new Sprite();
Ray.graphics.clear();
addChild(Ray);
// 見出し用テキストフィールド
_banner = new TextField();
_banner.background = true;
_banner.backgroundColor = 0x00ffff;
_banner.text = "Can Anyone create a Flash SVG or HPGL plot file read view example ?!\n " ;//+ String() + "";
_banner.x = 10;
_banner.y = 2;
_banner.textColor = 0x800000;
_banner.width = 360;
_banner.height = 20;
_banner.alpha = 0.6
addChild(_banner);
var sp:Sprite = new Sprite;
var tf = new TextField;
tf.selectable = false;
tf.mouseEnabled = false;
tf.width = 200;
tf.htmlText = "<u><b>Http://CStep.Luberth.com</b></u>";
tf.y = 420;
tf.x = 300;
sp.graphics.beginFill(0, 0);
sp.buttonMode = true;
sp.graphics.drawRect(0, 0, tf.width, tf.height);
sp.addEventListener(MouseEvent.CLICK, function () {
navigateToURL(new URLRequest("Http://cstep.luberth.com"), "_blank");
});
sp.addChild(tf);
addChild(sp);
var sp:Sprite = new Sprite;
var tf = new TextField;
tf.selectable = false;
tf.mouseEnabled = false;
tf.width = 200;
tf.htmlText = "<u><b>Fork it & play with the source\nWonderFl build flash online\nClean my messy code</b></u>";
tf.y = 420;
tf.x = 30;
sp.graphics.beginFill(0, 0);
sp.buttonMode = true;
sp.graphics.drawRect(0, 0, tf.width, tf.height);
sp.addEventListener(MouseEvent.CLICK, function () {
navigateToURL(new URLRequest("http://wonderfl.net/c/eDHa/fork"),"_blank");
});
sp.addChild(tf);
addChild(sp);
_tf = new TextField();
_tf.text = "";
_tf.x = 16;
_tf.y = 40;
_tf.width = 200;
_tf.textColor = 0x000080;
addChild(_tf);
addEventListener(Event.ENTER_FRAME, _as_time_passes);
}
private function draw_ray():void {
var dx:Number = mouseX - 232; // <dx,dy> is the orientation of the line
var dy:Number = mouseY - 232;
var nx:Number; // <nx,ny> is the orthogonal direction
var ny:Number;
var Ax:Number; // at <Ax,Ay>, the line crosses the boundary.
var Ay:Number;
var Bx:Number; // <Bx,By> is the other cross point.
var By:Number;
var compasx:Number;
var compasy:Number;
var deg:int;
var rang:Number;
var radius:Number;
Ray.graphics.clear();
Ray.graphics.lineStyle(1,0xff0000);
// Draw only if <dx,dy> is not the zero vector...
if (( dx != 0 ) || (dy != 0)) {
Ray.graphics.moveTo(232,232);
Ray.graphics.lineTo(mouseX,mouseY);
Ray.graphics.lineTo(mouseX,232);
Ray.graphics.lineTo(232,232);
//now i want to draw a second compas like line
//that is drawn by the degrees given by the mouse
//so in top left screen a compas line
//calculated from degrees given bij mouse
Ray.graphics.moveTo(232+175-30,232-175);
Ray.graphics.lineTo(232+175+30,232-175);
Ray.graphics.moveTo(232+175,232-175+30);
Ray.graphics.lineTo(232+175,232-175-30);
Ray.graphics.moveTo(232+175-30,232+150);
Ray.graphics.lineTo(232+175+30,232+150);
Ray.graphics.moveTo(232+175,232+150+30);
Ray.graphics.lineTo(232+175,232+150-30);
//now i want to draw a second compas like line
//that is drawn by the degrees given by the mouse
//so in top left screen a compas line
//calculated from degrees given bij mouse
//next draws top left compas from degrees given
deg = Math.round(Math.atan2(-(mouseY-232), mouseX-232) / Math.PI*180);
if (deg < 0) deg = deg + 360; // no negative degint
rang = - deg * Math.PI*2 / 360;
radius = 30;
compasx = radius * Math.cos(rang);
compasy = radius * Math.sin(rang);
//draw compas line compasx compasy
Ray.graphics.moveTo(232+175,232-175);
Ray.graphics.lineTo(232+175+compasx,232-175+compasy);
rang = deg * Math.PI*2 / 360;
radius = 30;
compasx = radius * Math.cos(rang);
compasy = radius * Math.sin(rang);
Ray.graphics.moveTo(232+175,232+150);
Ray.graphics.lineTo(232+175+compasx,232+150+compasy);
}
}
// マウスがステージにあれば原点から直線を引き、
// 方向(角度)をテキストフィールドに表示します
private function _as_time_passes(e:Event):void {
var deg:int;
//public var compasx;
//public var compasy;
//var radius;
//var rang;
draw_ray();
deg = Math.round(Math.atan2(-(mouseY-232), mouseX-232) / Math.PI*180);
if (deg < 0) deg = deg + 360; // no negative degree
_tf.text = "direction = " + String(deg) + " deg \n"
+ "X = " + String(mouseX-232) + "\n"
+ "Y = " + String(-mouseY+232)+ "\n"
+ "Lenght = " + String( Math.sqrt((mouseX-232) * (mouseX-232) + (-mouseY+232) * (-mouseY+232))) + "\n";
}
} // end of class Main
} // end of package
/* ===================== */
import flash.display.Sprite;
class Limacon extends Sprite {
public var d:Number; // Set by the constructor.
public var a:Number; // ditto.
public var phi:Number; // ditto. These three parameters are mandatory.
public var thickness:uint; // default: 2
public var color:uint; // default: 0x000000 ( black )
public var showCircle:Boolean=true; // Want the circle displayed? (defalut: false)
public var showLine:Boolean; // Want the diameter displayed? (defalut: false)
public var circleColor:uint; // default: 0xffffff ( white )
public var lineColor:uint; // default: 0xffffff ( white )
// Draws the curve using given parameters
public var compasx:Number;
public var compasy:Number;
public var deg:int;
public var rang:Number;
public var radius:Number;
public function draw():void {
var i:int;
var t:Number;
var r:Number;
this.graphics.clear();
this.graphics.lineStyle(thickness, color);
//if ( showCircle ) {
this.circleColor = 0xbbbbbb;
this.graphics.lineStyle(1, this.circleColor);
this.graphics.drawCircle(0 , 0, 100);
this.graphics.drawCircle(0 , 0, 100*Math.sqrt(2));
this.showCircle = true;
// }
}
// Constructor...
public function Limacon(_d:Number, _a:Number, _phi:Number):void {
//this.d = _d;
//this.a = _a;
//this.phi = _phi;
// this.thickness = 0;
this.showCircle = false;
// this.showLine = false;
this.color = 0x00ff00;
this.circleColor = 0x333333;
// this.lineColor = 0xff00ff;
}
}