# ひも理論 forked from: 多重連結バネ

```/**
* Copyright kawamura ( http://wonderfl.net/user/kawamura )
*/

package  {
import net.hires.debug.Stats;
import flash.display.MovieClip;
import flash.display.Sprite;
import flash.display.Graphics;
import flash.events.Event;
[SWF(width = "465", height = "465", backgroundColor = "0xFFFFFF", frameRate = "60")]
public class Main extends MovieClip {
private var canvas:MovieClip;
private var scx:Number;
private var scy:Number;
public function Main() {
var i:uint;
var stats:Stats=new Stats();
canvas=new MovieClip();
// constructor code
scx = stage.stageWidth*.5;
scy = stage.stageHeight*.5;
//
canvas.x = scx;
canvas.y = scy;
/*
var mp:MousePoint=new MousePoint();
*/
for(i=0;i<24;i++){
var himo:Himo=new Himo();
himo.x = 150*Math.cos(2*Math.PI*i/24);
himo.y = 150*Math.sin(2*Math.PI*i/24);
}

//canvas.scaleX=0.3
//canvas.scaleY=canvas.scaleX
//var g:Graphics=maru.graphics;
}
private function ent(event:Event):void{
//cnt+=0.01;
//canvas.scaleX=0.6+0.4*Math.cos(cnt);
//canvas.scaleY=canvas.scaleX;
//canvas.rotation ダメ絶対！！
/*
var d:Number=Math.sqrt(Math.pow(mouseX-scx,2)+Math.pow(mouseY-scy,2))
var lastScale:Number=1-0.01*Math.abs(d);
if(lastScale<0){
lastScale=0;
}
var ds:Number=lastScale-canvas.scaleX;
canvas.scaleX+=ds*0.02;
canvas.scaleY=canvas.scaleX
*/
}
//
}
}

import flash.display.MovieClip;
import flash.events.Event;
class Himo extends MovieClip{
private var mi_ar:Array;
private var spx:Number;
private var spy:Number;
private var color:Number
public function Himo(){
var h:Number=20;
var i:uint=0;
mi_ar=new Array();
var lx:Number=mouseX;
var ly:Number=mouseY;
var pin:Pin=new Pin();
pin.x=0;
pin.y=0;
mi_ar.push(pin);
var p:MovieClip
for(i=1;i<h;i++){
p=new Mi();
p.x= lx *i/h
p.y= ly *i/h
mi_ar.push(p)
}
var mp:MousePoint=new MousePoint();
mi_ar.push(mp);
//
for(i=1;i<mi_ar.length-1;i++){
p=mi_ar[i];
p.init([mi_ar[i-1],mi_ar[i+1]])
}
//
//
}
private function ent(evt:Event):void{
var i:uint;
var g:Graphics=this.graphics;
g.clear()
g.lineStyle(1,0xFF0000);
g.moveTo(mi_ar[i].x,mi_ar[i].y);
for(i=1;i<mi_ar.length;i++){
g.lineTo(mi_ar[i].x,mi_ar[i].y);
}
}
//
}

import flash.display.Graphics;
import flash.display.MovieClip;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.geom.Point;

class Mi extends MovieClip {
private var m:Number=1
private var k:Number=0.08;
private var t:Number=0.1;
private var g:Number=0.3*0.98;
private var m_ar:Array

private var ax:Number;
private var ay:Number;
private var vx:Number;
private var vy:Number;
private var px:Number;
private var py:Number;
public function Mi() {

}
public function init(_ar:Array):void{
m_ar=_ar;
ax=0;
vx=0;
ay=0;
vy=0;
px=m_ar[0].x;
py=m_ar[0].y;
}
//
private function ent(evt:Event):void{

var i:uint
var dx:Number=0;
var dy:Number=0;
var thisPoint:Point=new Point(this.x,this.y)
//var thisGoint:Point=globalToLocal(thisPoint)
var thisGoint:Point=localToGlobal(thisPoint)

for(i=0;i<m_ar.length;i++){
var mc:MovieClip=m_ar[i];
var mcPoint:Point=new Point(mc.x,mc.y);
//var mcGoint:Point=globalToLocal(mcPoint);
var mcGoint:Point=localToGlobal(mcPoint);
dx+=mcGoint.x-thisGoint.x;
dy+=mcGoint.y-thisGoint.y;
}
ax=k*dx//
ay=k*dy+g//
vx+=ax-t*vx;
vy+=ay-t*vy;
this.x+=vx;
this.y+=vy;
}
}

import flash.display.MovieClip;
import flash.display.Graphics;
class Pin extends MovieClip {
public function Pin() {
// constructor code
var g:Graphics=this.graphics;
g.beginFill(0x000000);
g.drawCircle(0,0,2);
}
}

class MousePoint extends Pin {
public function MousePoint() {