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

Dead Code Preservation :: Archived AS3 works from wonderfl.net

パスカルのリマソン

dkgkAs さんの 「サイン・コサインを使った円運動」に
インスパイアされて作りました
http://wonderfl.net/code/f39581f3651295921f511ed37d118ef0a95a6a56
アニメーションの意味:
 第1円の周上に第2円の中心を置き
 第2円を第1円の2倍の速さで回転させるなら
 第2円上の点はリマソン(蝸牛線)を描く
次にはリマソンの本来の定義との関連を描き込まなくちゃ
Get Adobe Flash player
by tenasaku 03 Mar 2010
/**
 * Copyright tenasaku ( http://wonderfl.net/user/tenasaku )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/nqp5
 */

package {
	
	// dkgkAs さんの 「サイン・コサインを使った円運動」に
	// インスパイアされて作りました
	// http://wonderfl.net/code/f39581f3651295921f511ed37d118ef0a95a6a56

	// アニメーションの意味:
	//  第1円の周上に第2円の中心を置き
	//  第2円を第1円の2倍の速さで回転させるなら
	//  第2円上の点はリマソン(蝸牛線)を描く

	// 次にはリマソンの本来の定義との関連を描き込まなくちゃ
	
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.text.TextField;
    [SWF(width="465",height="465",backgroundColor="0xffffff",frameRate="25")]
    public class FlashTest extends Sprite {
    		private const _cx:Number = stage.stageWidth/2;
    		private const _cy:Number = stage.stageHeight/2;
    		private var _wh1:Wheel; // first coorinate system
	    private var _wh2:Wheel; // second cooridnate system
	    private const _radius1:Number = 80;
	    private const _radius2:Number = _radius1;
//	    private var _tf:TextField;
        public function FlashTest() {
        		draw_limacon();
        		_wh1 = new Wheel(_radius1);
        		_wh1.showAxis = true;
        		_wh1.circColor = 0x808080;
        		_wh1.armColor = 0x006699;
        		_wh1.dotColor = 0x006699;
        		_wh1.redraw();
        		_wh1.x = _cx;
        		_wh1.y = _cy;
        		addChild(_wh1);
        		_wh2 = new Wheel(_radius2);
        		_wh2.showAxis = true;
        		_wh2.circColor = 0x006699;
        		_wh2.armColor = 0x006699;
        		_wh2.dotColor = 0x006699;
        		_wh2.redraw();
        		_wh2.x = _wh1.x + _wh1.vX();
        		_wh2.y = _wh1.y + _wh1.vY();
        		addChild(_wh2);
        		stage.addEventListener(Event.ENTER_FRAME,turn_wheels);
//        		_tf = new TextField();
//        		_tf.x = 3;
//        		_tf.y = 11;
//        		addChild(_tf);
        }
        private function turn_wheels(e:Event):void {
        		_wh1.theta += Math.PI/180;
        		while (_wh1.theta >= 2*Math.PI) { _wh1.theta -= 2*Math.PI; }
        		_wh1.redraw();
        		_wh2.theta = 2*_wh1.theta;
        		_wh2.x = _wh1.x + _wh1.vX();
        		_wh2.y = _wh1.y + _wh1.vY();
        		_wh2.redraw();
//        		_tf.text = String(_wh1.theta);
        }
        private function draw_limacon():void {
        		var i:int;
        		var px:Number;
        		var py:Number;
        		var t:Number;
        		for (i = 0; i<=360; ++i) {
        			t = i*Math.PI/180;
        			px = _cx + _radius1*Math.cos(t)+_radius2*Math.cos(t*2);
        			py = _cy - _radius1*Math.sin(t)-_radius2*Math.sin(t*2);
        			if ( i == 0 ) {
        				this.graphics.lineStyle(2,0x990000);
        				this.graphics.moveTo(px,py);
        			}
        			else {
        				this.graphics.lineTo(px,py);
        			}
        		}
        }
    }
}
import flash.display.Sprite;
class Wheel extends Sprite {
	private const dot_r:Number = 3;
	private const arm_thick:Number = 2;
	private const axisColor:uint = 0x808080;
	public var radius:Number;
	public var theta:Number;
	public var dotColor:uint;
	public var armColor:uint;
	public var circColor:uint;
	public var showAxis:Boolean;
	public function Wheel(_rad:Number):void {
		dotColor = 0x000000;
		armColor = 0x000000;
		circColor = 0x000000;
		theta = 0;
		radius = _rad;
		showAxis = false;
	}
	public function vX():Number {
		return this.radius*Math.cos(this.theta);
	}
	public function vY():Number {
		return  -(this.radius*Math.sin(this.theta));
	}
	public function redraw():void {
		var px:Number = this.vX();
		var py:Number = this.vY();
		this.graphics.clear();
		if (this.showAxis) {
			this.graphics.lineStyle(1,axisColor);
			this.graphics.moveTo(0,-2.1*this.radius);
			this.graphics.lineTo(0,+2.1*this.radius); // Y軸
			this.graphics.moveTo(-2.1*this.radius,0);
			this.graphics.lineTo(+2.1*this.radius,0); // X軸
		}
		this.graphics.lineStyle(1,this.circColor);
		this.graphics.drawCircle(0,0,this.radius);
		this.graphics.lineStyle(arm_thick,this.armColor);
		this.graphics.moveTo(0,0);
		this.graphics.lineTo(px,py);
		this.graphics.lineStyle(0,this.dotColor);
		this.graphics.beginFill(this.dotColor);
		this.graphics.drawCircle(px,py,dot_r);
		this.graphics.endFill();
	}
}