flash on 2011-7-24
/**
* Copyright nibru ( http://wonderfl.net/user/nibru )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/zO8X
*/
package
{
import flash.display.Sprite;
import flash.display.Shape;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.text.TextField;
public class Arnyekos extends Sprite
{
public var Falak:Array;
public var Nap:Object;
public var Logo:Shape;
public var Arnyek:Shape;
public var EgysegTav:Number;
public var EszakiSz:Number;
public var Placc:Sprite;
public var AlapNegyzet:Shape;
public var Leiras:TextField;
///////napotBeallit(////////////////////////////////////////
public function napotBeallit(ora:Number, nap:Number):void
{
var oSz:Number = (ora - 12)/12 * Math.PI;
var eSz:Number = (23.45 / 180 * Math.PI) * Math.sin(2*Math.PI * ((284+nap) / 365.25));
Nap.mSz = Math.asin(Math.sin(eSz) * Math.sin(EszakiSz) + Math.cos(oSz) * Math.cos(eSz) * Math.cos(EszakiSz));
Nap.sSz = Math.asin((Math.sin(oSz) * Math.cos(eSz)) / Math.cos(Nap.mSz))
oSz += .01
Nap.mSz2 = Math.asin(Math.sin(eSz) * Math.sin(EszakiSz) + Math.cos(oSz) * Math.cos(eSz) * Math.cos(EszakiSz));
Nap.sSz2 = Math.asin((Math.sin(oSz) * Math.cos(eSz)) / Math.cos(Nap.mSz2))
if(Nap.sSz2 < Nap.sSz)
{
Nap.sSz *= -1
var ujSzog:Number = Math.PI / 2 + (Math.PI / 2 - Math.abs(Nap.sSz))
ujSzog *= Math.abs(Nap.sSz) / Nap.sSz * -1
Nap.sSz = ujSzog
}
//Math.asin(2*Math.sin(oSz) * Math.cos(eSz)) - Math.PI / 2
Leiras.textColor = 0xFFFFFF
Leiras.text = "óra: " + ora;
Leiras.appendText("\n nap: " + nap);
Leiras.appendText("\n oSz: " + oSz / Math.PI * 180 + "°");
Leiras.appendText("\n eSz: " + eSz / Math.PI * 180 + "°");
Leiras.appendText("\n ");
Leiras.appendText("\n Nap.mSz: " + Nap.mSz / Math.PI * 180 + "°");
Leiras.appendText("\n ");
Leiras.appendText("\n Math.sin(oSz) = "+ Math.sin(oSz));
Leiras.appendText("\n Math.cos(eSz) = "+ Math.cos(eSz));
Leiras.appendText("\n (Math.sin(oSz) * Math.cos(eSz)) = "+ ((Math.sin(oSz) * Math.cos(eSz))));
Leiras.appendText("\n Math.cos(Nap.mSz) = "+ (Math.cos(Nap.mSz)));
Leiras.appendText("\n (Math.sin(oSz) * Math.cos(eSz)) / Math.cos(Nap.mSz) = "+ ((Math.sin(oSz) * Math.cos(eSz)) / Math.cos(Nap.mSz)));
Leiras.appendText("\n Nap.sSz: " + Nap.sSz / Math.PI * 180 + "°");
Leiras.appendText("\n Nap.sSz2: " + Nap.sSz2 / Math.PI * 180 + "°");
Leiras.appendText("\n (Nap.sSz2 < Nap.sSz): " + (Nap.sSz2 < Nap.sSz));
Leiras.appendText("\n ");
Leiras.appendText("\n EszakiSz: " + EszakiSz / Math.PI * 180 + "°");
Nap.sSz -= Math.PI / 2
}
///////pontotMond////////////////////////////////////////
public function pontotMond(a:Array):Object
{
var eredmeny:Object = {};
var r:Number = a[2] / Math.tan(Nap.mSz);
eredmeny.x = a[0] + Math.cos(Nap.sSz) * r;
eredmeny.y = a[1] + Math.sin(Nap.sSz) * r;
return eredmeny;
}
public function Arnyekos():void
{
indit();
}
public function indit():void
{
Nap = {};
Logo = new Shape ;
Arnyek = new Shape ;
Placc = new Sprite ;
AlapNegyzet = new Shape;
Placc.graphics.beginFill(0x3311aa);
Placc.graphics.drawRect(-stage.stageWidth/2, -stage.stageHeight/2,
stage.stageWidth, stage.stageHeight);
AlapNegyzet.graphics.beginFill(0x000000);
AlapNegyzet.graphics.drawRect(-Placc.width/12, -Placc.height/12,
Placc.width/6, Placc.height/6);
AlapNegyzet.x = Placc.x = stage.stageWidth / 2;
AlapNegyzet.y = Placc.y = stage.stageHeight/2
;
Leiras = new TextField ;
Leiras.width = 800;
Leiras.height = 800;
Leiras.wordWrap = true;
EgysegTav = AlapNegyzet.width / 12;
AlapNegyzet.visible = false;
EszakiSz = 47.5 / 180 * Math.PI;
addChild(Placc);
addChild(Arnyek);
addChild(Logo);
addChild(Leiras);
Falak = falakatMond();
logotRajzol();
addEventListener(MouseEvent.MOUSE_MOVE, egeretMozgat);
}
public function torles():void
{
removeEventListener(MouseEvent.MOUSE_MOVE, egeretMozgat);
removeChild(Arnyek);
removeChild(Logo);
Logo = null;
Arnyek = null;
}
public function egeretMozgat(e:Event):void
{
napotBeallit(stage.mouseX / Placc.width * 24,
stage.mouseY / Placc.height * 365.25);
render();
}
public function render():void
{
arnyekotRajzol();
logotRajzol();
addChild(Leiras);
}
public function arnyekotRajzol():void
{
var p:Object;
Arnyek.graphics.clear();
for (var i:int = 0; i < Falak.length; i++)
{
if ((i == Falak.length - 2 && Math.abs(Nap.sSz-Math.PI) < Math.PI/2) ||
(i == Falak.length - 1 && Math.abs(Nap.sSz-Math.PI) > Math.PI/2))
{
}
else
{
p = pontotMond(Falak[i][0]);
Arnyek.graphics.beginFill(0x333333);
Arnyek.graphics.moveTo(p.x, p.y);
for (var j:int = 1; j < Falak[i].length; j++)
{
p = pontotMond(Falak[i][j]);
Arnyek.graphics.lineTo(p.x, p.y);
}
p = pontotMond(Falak[i][0]);
Arnyek.graphics.lineTo(p.x, p.y);
Arnyek.graphics.endFill();
}
}
}
public function logotRajzol():void
{
var szin:int = 0x000000;//szurketMond(int(255 * (Nap.mSz / (Math.PI/2))))
/*szin *= 200
if(szin > 255){ szin = 255 }*/
Logo.graphics.clear();
for (var i:int = 0; i < 2; i++)
{
Logo.graphics.beginFill(szin);
Logo.graphics.moveTo(Falak[i][0][0], Falak[i][0][1]);
for (var j:int = 1; j < Falak[i].length; j++)
{
Logo.graphics.lineTo(Falak[i][j][0], Falak[i][j][1]);
}
Logo.graphics.lineTo(Falak[i][0][0], Falak[i][0][1]);
Logo.graphics.endFill();
}
}
public function falakatFelszoroz():void
{
for (var i:int = 0; i < Falak.length; i++)
{
for (var j:int = 0; j < Falak[i].length; j++)
{
for (var k:int = 0; k < Falak[i][j].length; k++)
{
Falak[i][j][k] *= EgysegTav;
}
}
}
}
public function szurketMond(ertek:Number):int
{
var szin:* = [ertek];
szin[1] = szin[0] % 16;
szin[0] = int(szin[0] / 16);
szin[2] = 0
;
for (var i:int = 0; i < 6; i++)
{
szin[2] += szin[(i+1)%2] * Math.pow(16, i);
}
return szin[2];
}
public function falakatMond():Array
{
var e:Number = 6;
var m1:Number = 4.25;
var m2:Number = 3.5;
var m3:Number = 3;
var m4:Number = 2.9;
var m5:Number = .75;
var t1:Number = 6.6;
var t2:Number = 4.2;
var t3:Number = 1.2;
var eredmeny:Array = [
[[-e,-e,m1], [e,-e,m1-.02], [e,-e+t2,m2], [-e,-e+t1,m2]], //t1
[[-e,e-t3,m3], [e,e-t3,m3-.02], [e,e,m4-.02], [-e,e,m4]], //t2
[[e,-e,m1-.02], [e,-e+t2,m2], [e,-e+t2,0], [e,-e,0]], //f1a
[[e,e-t3,m3-.02], [e,e,m4-.02], [e,e,0], [e,e-t3,0]], //f1b
[[-e,e,m4], [e,e,m4-.02], [e,e,0], [-e,e,0]], //f2
[[-e,-e,m1], [-e,-e+t1,m2], [-e,-e+t1,0], [-e,-e,0]], //f3a
[[-e,e-t3,m3], [-e,e,m4], [-e,e,0], [-e,e-t3,0]], //f3b
[[-e,-e,m1], [e,-e,m1-.02], [e,-e,0], [-e,-e,0]], //f4
[[e,-e,m5], [e,e,m5], [e,e,0], [e,-e,0]], //k1
[[-e,-e,m5], [-e,e,m5], [-e,e,0], [-e,-e,0]] //k2
];
for (var i:int = 0; i < eredmeny.length; i++)
{
for (var j:int = 0; j < eredmeny[i].length; j++)
{
for (var k:int = 0; k < eredmeny[i][j].length; k++)
{
eredmeny[i][j][k] *= EgysegTav;
}
eredmeny[i][j][0] += Placc.width / 2
eredmeny[i][j][1] += Placc.height / 2
}
}
return eredmeny;
}
}
}