From 342a5744b33b469dc26e02a37c80689882d9158b Mon Sep 17 00:00:00 2001 From: "Stringer.Sean" Date: Wed, 14 May 2014 12:45:18 -0700 Subject: [PATCH 01/23] New Google Closure Repo URL --- bin/lime.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/lime.py b/bin/lime.py index 6c36bd89..6a4c35da 100755 --- a/bin/lime.py +++ b/bin/lime.py @@ -85,7 +85,7 @@ def checkDependencies(): print ('Closure Library not found. Downloading to %s' % closure_dir) print ('Please wait...') - retcode = subprocess.Popen(subprocess.list2cmdline(["git","clone","https://code.google.com/p/closure-library/",closure_dir]),shell=True).wait() + retcode = subprocess.Popen(subprocess.list2cmdline(["git","clone","https://github.com/google/closure-library.git",closure_dir]),shell=True).wait() if(retcode!=0): print ('Failed to clone Closure Library via Git. Discontinuing.') From a0600adaf317e3016506b6846d85f724e422be93 Mon Sep 17 00:00:00 2001 From: "Stringer.Sean" Date: Wed, 14 May 2014 14:07:35 -0700 Subject: [PATCH 02/23] Removed CSSTransitions From LimeJS --- lime/demos/roundball/board.js | 2 +- lime/demos/roundball/multimove.js | 2 +- lime/demos/roundball/rb.js | 2 +- lime/demos/tests/anim1.js | 4 +- lime/demos/tests/anim2.js | 2 +- lime/demos/tests/anim3.js | 2 +- lime/demos/tests/anim4.js | 4 +- lime/demos/tests/canvas2.js | 4 +- lime/demos/tests/opacity.js | 4 +- lime/demos/zlizer/bubble.js | 2 +- lime/demos/zlizer/game.js | 4 +- lime/demos/zlizer/zlizer.js | 4 +- lime/src/animation/animation.js | 36 +--------- lime/src/animation/fadeto.js | 17 ----- lime/src/animation/moveby.js | 20 ------ lime/src/animation/moveto.js | 19 ----- lime/src/animation/rotateby.js | 18 ----- lime/src/animation/rotateto.js | 19 +---- lime/src/animation/scaleby.js | 18 ----- lime/src/animation/scaleto.js | 18 ----- lime/src/events/drag.js | 2 +- lime/src/node.js | 115 +----------------------------- lime/src/renderer/canvas.js | 25 ++----- lime/src/renderer/dom.js | 28 ++------ lime/src/transitions/dissolve.js | 2 +- lime/src/ui/scroller.js | 4 +- 26 files changed, 39 insertions(+), 338 deletions(-) diff --git a/lime/demos/roundball/board.js b/lime/demos/roundball/board.js index 409e1b17..63ab5885 100644 --- a/lime/demos/roundball/board.js +++ b/lime/demos/roundball/board.js @@ -140,7 +140,7 @@ rb.Board.prototype.checkSolutions = function() { var action = new lime.animation.Spawn( new lime.animation.ScaleTo(0), new lime.animation.FadeTo(0).setDuration(.8) - ).enableOptimizations(); + ); goog.array.removeDuplicates(solutions); diff --git a/lime/demos/roundball/multimove.js b/lime/demos/roundball/multimove.js index 25826185..d3b44c74 100644 --- a/lime/demos/roundball/multimove.js +++ b/lime/demos/roundball/multimove.js @@ -40,7 +40,7 @@ rb.MultiMove.prototype.play = function(opt_static) { var action, longest_action, longest_duration = 0; for (var i in this.requests_) { var req = this.requests_[i]; - action = new lime.animation.MoveBy(req[0][1]).setSpeed(.3).enableOptimizations(); + action = new lime.animation.MoveBy(req[0][1]).setSpeed(.3); if (longest_duration < action.getDuration()) { longest_action = action; longest_duration = action.getDuration(); diff --git a/lime/demos/roundball/rb.js b/lime/demos/roundball/rb.js index d4558e0f..52065b6b 100644 --- a/lime/demos/roundball/rb.js +++ b/lime/demos/roundball/rb.js @@ -57,7 +57,7 @@ rb.loadMenu = function() { var btns = new lime.Layer().setPosition(0, 430); layer.appendChild(btns); - var move = new lime.animation.MoveBy(-rb.WIDTH, 0).enableOptimizations(); + var move = new lime.animation.MoveBy(-rb.WIDTH, 0); var btn = rb.makeButton('Play Classic').setPosition(0, 200); goog.events.listen(btn, 'click', function() { diff --git a/lime/demos/tests/anim1.js b/lime/demos/tests/anim1.js index 8b1b4995..bdaf8bad 100644 --- a/lime/demos/tests/anim1.js +++ b/lime/demos/tests/anim1.js @@ -57,8 +57,8 @@ test.start = function() { layer.appendChild(sprite); var anim = new lime.animation.Spawn( - new lime.animation.RotateBy(-90).setDuration(3).enableOptimizations(), - new lime.animation.MoveBy(300, 0).setDuration(3).enableOptimizations() + new lime.animation.RotateBy(-90).setDuration(3), + new lime.animation.MoveBy(300, 0).setDuration(3) ); var a2 = new lime.animation.Sequence(anim, anim.reverse()); sprite.runAction(new lime.animation.Loop(a2).setLimit(5)); diff --git a/lime/demos/tests/anim2.js b/lime/demos/tests/anim2.js index 82e7e0cc..4a956d88 100644 --- a/lime/demos/tests/anim2.js +++ b/lime/demos/tests/anim2.js @@ -61,7 +61,7 @@ test.start = function() { .setPosition(300, 100) .setScale(.3); - var flame_x = flame.getPosition().x; + //var flame_x = flame.getPosition().x; flameLayer.appendChild(flame); diff --git a/lime/demos/tests/anim3.js b/lime/demos/tests/anim3.js index ec544968..32c1aa65 100644 --- a/lime/demos/tests/anim3.js +++ b/lime/demos/tests/anim3.js @@ -38,7 +38,7 @@ test.start = function() { flameLayer.appendChild(flame); flame.setFill(100, 0, 0).setPosition(0, 100).setSize(100, 100); - var move = new lime.animation.MoveBy(700, 0).setDuration(5).enableOptimizations() + var move = new lime.animation.MoveBy(700, 0).setDuration(5) .setEasing(lime.animation.Easing.EASEINOUT); move.addTarget(flame); move.play(); diff --git a/lime/demos/tests/anim4.js b/lime/demos/tests/anim4.js index 3f927921..96f5a07e 100644 --- a/lime/demos/tests/anim4.js +++ b/lime/demos/tests/anim4.js @@ -66,10 +66,10 @@ test.start = function() { scene.appendChild(circle2); var moveRight2 = new lime.animation.MoveTo(874, 200) - .setDuration(774/100).setEasing(lime.animation.Easing.LINEAR).enableOptimizations(); + .setDuration(774/100).setEasing(lime.animation.Easing.LINEAR); var moveLeft2 = new lime.animation.MoveTo(100, 200) - .setDuration(774/100).setEasing(lime.animation.Easing.LINEAR).enableOptimizations(); + .setDuration(774/100).setEasing(lime.animation.Easing.LINEAR); circle2.runAction(new lime.animation.Loop( new lime.animation.Sequence( diff --git a/lime/demos/tests/canvas2.js b/lime/demos/tests/canvas2.js index 06e6443a..9245f012 100644 --- a/lime/demos/tests/canvas2.js +++ b/lime/demos/tests/canvas2.js @@ -68,8 +68,8 @@ test.makeLayerOfStuff = function(){ layer.appendChild(rrect); var anim = new lime.animation.Spawn( - new lime.animation.ScaleBy(.3).setDuration(3).enableOptimizations(), - new lime.animation.MoveBy(0,-30).setDuration(3).enableOptimizations() + new lime.animation.ScaleBy(.3).setDuration(3), + new lime.animation.MoveBy(0,-30).setDuration(3) ); rrect.runAction( diff --git a/lime/demos/tests/opacity.js b/lime/demos/tests/opacity.js index 4fd010da..fa306ba9 100644 --- a/lime/demos/tests/opacity.js +++ b/lime/demos/tests/opacity.js @@ -37,8 +37,8 @@ test.start = function() { ball.setPosition(50, 100).setSize(100, 100); ball.runAction(new lime.animation.Loop(new lime.animation.Sequence( - new lime.animation.FadeTo(0).setDuration(3).enableOptimizations(), - new lime.animation.FadeTo(1).setDuration(3).enableOptimizations() + new lime.animation.FadeTo(0).setDuration(3), + new lime.animation.FadeTo(1).setDuration(3) ))); diff --git a/lime/demos/zlizer/bubble.js b/lime/demos/zlizer/bubble.js index f51a85f6..1c64b27b 100644 --- a/lime/demos/zlizer/bubble.js +++ b/lime/demos/zlizer/bubble.js @@ -38,6 +38,6 @@ zlizer.Bubble.prototype.updateFloatingSpeed = function() { var delta = this.v.clone().scale(zlizer.BUBBLE_SPEED); - this.move = new lime.animation.MoveBy(delta.x, delta.y).setDuration(20).enableOptimizations().setEasing(lime.animation.Easing.LINEAR); + this.move = new lime.animation.MoveBy(delta.x, delta.y).setDuration(20).setEasing(lime.animation.Easing.LINEAR); this.runAction(this.move); }; diff --git a/lime/demos/zlizer/game.js b/lime/demos/zlizer/game.js index 81deb82f..53491c7d 100644 --- a/lime/demos/zlizer/game.js +++ b/lime/demos/zlizer/game.js @@ -467,8 +467,8 @@ zlizer.Game.prototype.combine = function(bubs) { sumcoord[1] /= bubs.length; var anim = new lime.animation.Spawn( - new lime.animation.MoveTo(sumcoord[0], sumcoord[1]).enableOptimizations(), - new lime.animation.FadeTo(0).enableOptimizations() + new lime.animation.MoveTo(sumcoord[0], sumcoord[1]), + new lime.animation.FadeTo(0) ); for (var i = 0; i < bubs.length; i++) { anim.addTarget(bubs[i]); diff --git a/lime/demos/zlizer/zlizer.js b/lime/demos/zlizer/zlizer.js index 8bbbe11e..d6299d4c 100644 --- a/lime/demos/zlizer/zlizer.js +++ b/lime/demos/zlizer/zlizer.js @@ -66,7 +66,7 @@ zlizer.loadMenuScene = function(opt_transition) { var btn_levels = new zlizer.Button('PICK LEVEL').setPosition(0, 480).setSize(250, 100); contents.appendChild(btn_levels); goog.events.listen(btn_levels, lime.Button.Event.CLICK, function() { - contents.runAction(new lime.animation.MoveTo(0, -255).enableOptimizations()); + contents.runAction(new lime.animation.MoveTo(0, -255)); }); var levels = new lime.Layer().setPosition(0, 690); @@ -98,7 +98,7 @@ zlizer.loadMenuScene = function(opt_transition) { var btn_main = new zlizer.Button('Back to Menu').setSize(400, 80).setPosition(250, r * 90); btns_layer.appendChild(btn_main); goog.events.listen(btn_main, lime.Button.Event.CLICK, function() { - contents.runAction(new lime.animation.MoveTo(0, 280).enableOptimizations()); + contents.runAction(new lime.animation.MoveTo(0, 280)); },false, num); }; diff --git a/lime/src/animation/animation.js b/lime/src/animation/animation.js index 79075d67..5706f1a0 100644 --- a/lime/src/animation/animation.js +++ b/lime/src/animation/animation.js @@ -135,13 +135,6 @@ lime.animation.Animation.prototype.play = function() { */ lime.animation.Animation.prototype.stop = function() { if (this.status_ != 0) { - var targets = this.initTargets_; - if (this.useTransitions() && this.clearTransition) { - var i = targets.length; - while (--i >= 0) { - this.clearTransition(targets[i]); - } - } this.initTargets_ = []; this.targetProp_ = {}; this.status_ = 0; @@ -239,33 +232,6 @@ lime.animation.Animation.prototype.updateAll = function(t,targets){ return t; }; -/** - * Returns true if CSS transitions are used to make the animation. - * Performes better on iOS devices. - * @return {boolean} Transitions are being used? - */ -lime.animation.Animation.prototype.useTransitions = function() { - // Basically everything except Mobile/Desktop Safari seems broken. - return lime.userAgent.IOS && this.duration_ > 0 && - lime.style.isTransitionsSupported && this.optimizations_; - /* - // goog.userAgent.MOBILE && // I see no boost on mac, only on iOS - !lime.userAgent.ANDROID && // bug in 2.2 http://code.google.com/p/android/issues/detail?id=12451 - !goog.userAgent.GECKO; // still many bugs on FF4Beta Mac when hardware acceleration in ON*/ -}; - -/** - * Enable CSS3 transitions to make animation. Usually performes better - * but is limited to single parallel transform action. - * @param {boolean=} opt_value Enable or disable. - * @return {lime.animation.Animation} object itself. - */ -lime.animation.Animation.prototype.enableOptimizations = function(opt_value) { - var bool = goog.isDef(opt_value) ? opt_value : true; - this.optimizations_ = bool; - return this; -}; - /** * Update targets to new values * @param {number} t Time position of animation[0-1]. @@ -278,7 +244,7 @@ lime.animation.Animation.prototype.update = goog.abstractMethod; * @protected */ lime.animation.Animation.prototype.cloneParam = function(origin){ - return this.setDuration(origin.getDuration()).enableOptimizations(origin.optimizations_); + return this.setDuration(origin.getDuration()); }; /** diff --git a/lime/src/animation/fadeto.js b/lime/src/animation/fadeto.js index e70b98ad..2b1dbaa1 100644 --- a/lime/src/animation/fadeto.js +++ b/lime/src/animation/fadeto.js @@ -29,13 +29,7 @@ lime.animation.FadeTo.prototype.scope = 'fade'; */ lime.animation.FadeTo.prototype.makeTargetProp = function(target) { var op = target.getOpacity(); - if (this.useTransitions()) { - target.addTransition(lime.Transition.OPACITY, - this.opacity_, - this.duration_, this.getEasing()); - target.setDirty(lime.Dirty.ALPHA); - } return {startOpacity: op, delta: this.opacity_ - op }; }; @@ -51,14 +45,3 @@ lime.animation.FadeTo.prototype.update = function(t, target) { }; -/** - * Clear transistion when animation is stoped. - * @param {lime.Node} target The target to clear transistion for. - */ -lime.animation.FadeTo.prototype.clearTransition = function(target) { - if (this.useTransitions()) { - target.clearTransition(lime.Transition.OPACITY); - target.setDirty(lime.Dirty.ALPHA); - } -}; - diff --git a/lime/src/animation/moveby.js b/lime/src/animation/moveby.js index aa42b1b3..4d1a3287 100644 --- a/lime/src/animation/moveby.js +++ b/lime/src/animation/moveby.js @@ -49,12 +49,6 @@ lime.animation.MoveBy.prototype.setSpeed = function(speed) { * @see lime.animation.Animation#makeTargetProp */ lime.animation.MoveBy.prototype.makeTargetProp = function(target) { - if (this.useTransitions()) { - target.addTransition(lime.Transition.POSITION, - goog.math.Coordinate.sum(target.getPosition(), this.delta_), - this.duration_, this.getEasing()); - target.setDirty(lime.Dirty.POSITION); - } return {startpos: target.getPosition()}; }; @@ -86,20 +80,6 @@ lime.animation.MoveBy.prototype.update = function(t, target) { }; -/** - * Clear previously set transition values. - * @param {lime.Node} target Target node. - */ -lime.animation.MoveBy.prototype.clearTransition = function(target) { - - if (this.useTransitions()) { - target.clearTransition(lime.Transition.POSITION); - target.setDirty(lime.Dirty.POSITION); - } - - -}; - /** * @inheritDoc * @see lime.animation.Animation#reverse diff --git a/lime/src/animation/moveto.js b/lime/src/animation/moveto.js index 7d7948fd..3d21390f 100644 --- a/lime/src/animation/moveto.js +++ b/lime/src/animation/moveto.js @@ -51,13 +51,6 @@ lime.animation.MoveTo.prototype.makeTargetProp = function(target) { var delta = new goog.math.Coordinate( this.position_.x - start.x, this.position_.y - start.y); - - if (this.useTransitions()) { - target.addTransition(lime.Transition.POSITION, - this.position_, - this.duration_, this.getEasing()); - target.setDirty(lime.Dirty.POSITION); - } return {startpos: start, delta: delta}; }; @@ -94,15 +87,3 @@ lime.animation.MoveTo.prototype.update = function(t, target) { ); }; -/** - * Clear transistion when animation is stoped. - * @see lime.animation.Animation#clearTransition - * @param {lime.Node} target The target to clear transistion for. - */ -lime.animation.MoveTo.prototype.clearTransition = function(target) { - if (this.useTransitions()) { - target.clearTransition(lime.Transition.POSITION); - target.setDirty(lime.Dirty.POSITION); - } -}; - diff --git a/lime/src/animation/rotateby.js b/lime/src/animation/rotateby.js index 9d0ef82c..9eb7c1c6 100644 --- a/lime/src/animation/rotateby.js +++ b/lime/src/animation/rotateby.js @@ -29,13 +29,6 @@ lime.animation.RotateBy.prototype.scope = 'rotate'; * @see lime.animation.Animation#makeTargetProp */ lime.animation.RotateBy.prototype.makeTargetProp = function(target) { - if (this.useTransitions()) { - target.addTransition(lime.Transition.ROTATION, - target.getRotation() + this.angle_, - this.duration_, this.getEasing() - ); - target.setDirty(lime.Dirty.POSITION); - } return {startRot: target.getRotation() }; }; @@ -49,17 +42,6 @@ lime.animation.RotateBy.prototype.update = function(t, target) { target.setRotation(prop.startRot + this.angle_ * t); }; -/** - * Clear transistion when animation is stoped. - * @param {lime.Node} target The target to clear transistion for. - */ -lime.animation.RotateBy.prototype.clearTransition = function(target) { - if (this.useTransitions()) { - target.clearTransition(lime.Transition.ROTATION); - target.setDirty(lime.Dirty.POSITION); - } -}; - /** * @inheritDoc * @see lime.animation.Animation#reverse diff --git a/lime/src/animation/rotateto.js b/lime/src/animation/rotateto.js index efd9a721..b05d014e 100644 --- a/lime/src/animation/rotateto.js +++ b/lime/src/animation/rotateto.js @@ -29,13 +29,7 @@ lime.animation.RotateTo.prototype.scope = 'rotate'; */ lime.animation.RotateTo.prototype.makeTargetProp = function(target) { var rot = target.getRotation(); - if (this.useTransitions()) { - target.addTransition(lime.Transition.ROTATION, - this.angle_, - this.duration_, this.getEasing() - ); - target.setDirty(lime.Dirty.POSITION); - } + return {startRot: rot, delta: this.angle_ - rot }; }; @@ -48,14 +42,3 @@ lime.animation.RotateTo.prototype.update = function(t, target) { var prop = this.getTargetProp(target); target.setRotation(prop.startRot + prop.delta * t); }; - -/** - * @inheritDoc - * @see lime.animation.Animation#clearTransition - */ -lime.animation.RotateTo.prototype.clearTransition = function(target) { - if (this.useTransitions()) { - target.clearTransition(lime.Transition.ROTATION); - target.setDirty(lime.Dirty.POSITION); - } -}; diff --git a/lime/src/animation/scaleby.js b/lime/src/animation/scaleby.js index 17a1fa2b..5d81ae46 100644 --- a/lime/src/animation/scaleby.js +++ b/lime/src/animation/scaleby.js @@ -41,13 +41,6 @@ lime.animation.ScaleBy.prototype.makeTargetProp = function(target) { delta = new goog.math.Vec2(scale.x * this.factor_.x - scale.x, scale.y * this.factor_.y - scale.y); - if (this.useTransitions()) { - target.addTransition(lime.Transition.SCALE, - new goog.math.Vec2(scale.x + delta.x, scale.y + delta.y), - this.duration_, this.getEasing()); - target.setDirty(lime.Dirty.SCALE); - } - return {startScale: scale, delta: delta}; }; @@ -66,17 +59,6 @@ lime.animation.ScaleBy.prototype.update = function(t, target) { ); }; -/** - * @inheritDoc - * @see lime.animation.Animation#clearTransition - */ -lime.animation.ScaleBy.prototype.clearTransition = function(target) { - if (this.useTransitions()) { - target.clearTransition(lime.Transition.SCALE); - target.setDirty(lime.Dirty.SCALE); - } -}; - /** * @inheritDoc * @see lime.animation.Animation#reverse diff --git a/lime/src/animation/scaleto.js b/lime/src/animation/scaleto.js index 8ab34122..f2cbeb47 100644 --- a/lime/src/animation/scaleto.js +++ b/lime/src/animation/scaleto.js @@ -42,13 +42,6 @@ lime.animation.ScaleTo.prototype.makeTargetProp = function(target) { delta = new goog.math.Vec2(this.scale_.x - scale.x, this.scale_.y - scale.y); - if (this.useTransitions()) { - target.addTransition(lime.Transition.SCALE, - new goog.math.Vec2(scale.x + delta.x, scale.y + delta.y), - this.duration_, this.getEasing()); - target.setDirty(lime.Dirty.SCALE); - } - return {startScale: scale, delta: delta}; }; @@ -67,14 +60,3 @@ lime.animation.ScaleTo.prototype.update = function(t, target) { ); }; -/** - * Clear transistion when animation is stoped. - * @param {lime.Node} target The target to clear transistion for. - */ -lime.animation.ScaleTo.prototype.clearTransition = function(target) { - if (this.useTransitions()) { - target.clearTransition(lime.Transition.SCALE); - target.setDirty(lime.Dirty.SCALE); - } -}; - diff --git a/lime/src/events/drag.js b/lime/src/events/drag.js index ab92a1a5..2ccdefe2 100644 --- a/lime/src/events/drag.js +++ b/lime/src/events/drag.js @@ -210,7 +210,7 @@ lime.events.Drag.prototype.releaseHandler_ = function(e) { var pos = ev.activeDropTarget.getParent().localToNode( ev.activeDropTarget.getPosition(), this.target.getParent()); var move = new lime.animation.MoveTo(pos) - .setDuration(.5).enableOptimizations(); + .setDuration(.5); this.target.runAction(move); if (goog.isFunction(ev.moveEndedCallback)) { goog.events.listen(move, lime.animation.Event.STOP, diff --git a/lime/src/node.js b/lime/src/node.js index 715a2a41..4b8a1cd3 100644 --- a/lime/src/node.js +++ b/lime/src/node.js @@ -26,13 +26,6 @@ lime.Node = function() { this.parent_ = null; - /** type {Object.} */ - this.transitionsAdd_ = {}; - this.transitionsActive_ = {}; - this.transitionsActiveSet_ = {}; - /** type {Object.} */ - this.transitionsClear_ = {}; - /** * Allow translate3d and other css optimizations * @type {boolean} @@ -257,7 +250,6 @@ lime.Node.prototype.setScale = function(value, opt_y) { else { this.scale_ = value; } - if (this.transitionsActive_[lime.Transition.SCALE]) return this; return this.setDirty(lime.Dirty.SCALE); }; @@ -282,7 +274,7 @@ lime.Node.prototype.setPosition = function(value, opt_y) { else { this.position_ = value; } - if (this.transitionsActive_[lime.Transition.POSITION]) return this; + return this.setDirty(lime.Dirty.POSITION); }; @@ -360,8 +352,6 @@ lime.Node.prototype.setRotation = function(value) { this.rotation_ = value; - if (this.transitionsActive_[lime.Transition.ROTATION]) return this; - return this.setDirty(lime.Dirty.POSITION); }; @@ -615,10 +605,6 @@ lime.Node.prototype.setOpacity = function(value) { this.setHidden(false); } - if (goog.isDef(this.transitionsActive_[lime.Transition.OPACITY])){ - return this; - } - this.setDirty(lime.Dirty.ALPHA); return this; }; @@ -714,102 +700,13 @@ lime.Node.prototype.updateLayout = function() { * @param {number=} opt_pass Pass number. */ lime.Node.prototype.update = function(opt_pass) { - // if (!this.renderer) return; - var property, - value; + var pass = opt_pass || 0; - var uid = goog.getUid(this); if (this.dirty_ & lime.Dirty.LAYOUT) { this.updateLayout(); } - var do_draw = this.renderer.getType() == lime.Renderer.DOM || pass; - - if (do_draw) { - - //clear transitions in the queue - for (var i in this.transitionsClear_) { - delete this.transitionsActive_[i]; - delete this.transitionsActiveSet_[i]; - property = lime.Node.getPropertyForTransition(parseInt(i, 10)); - lime.style.clearTransition(this.domElement, property); - if (this.domElement != this.containerElement) { - lime.style.clearTransition(this.continerElement, property); - } - } - - // predraw is a check that elements are correctly drawn before the - // transition. if not then transition is started in the next frame not now. - var only_predraw = 0; - for (i in this.transitionsAdd_) { - value = this.transitionsAdd_[i]; - - // 3rd is an "already_activated" flag - if (!value[3]) { - value[3] = 1; - - if (i == lime.Transition.POSITION && - this.positionDrawn_ != this.position_) { - this.setDirty(lime.Dirty.POSITION, 0, true); - only_predraw = 1; - } - - if (i == lime.Transition.SCALE && - this.scaleDrawn_ != this.scale_) { - this.setDirty(lime.Dirty.SCALE, 0, true); - only_predraw = 1; - } - - if (i == lime.Transition.OPACITY && - this.opacityDrawn_ != this.opacity_) { - this.setDirty(lime.Dirty.ALPHA, 0, true); - only_predraw = 1; - } - if (i == lime.Transition.ROTATION && - this.rotationDrawn_ != this.rotation_) { - this.setDirty(lime.Dirty.ROTATION, 0, true); - only_predraw = 1; - } - - } - } - - // activate the transitions - if(!only_predraw) - for (i in this.transitionsAdd_) { - value = this.transitionsAdd_[i]; - property = lime.Node.getPropertyForTransition(parseInt(i, 10)); - - if(this.renderer.getType()==lime.Renderer.DOM || property!='opacity'){ - - this.transitionsActive_[i] = value[0]; - lime.style.setTransition(this.domElement, - property, value[1], value[2]); - - if (this.domElement != this.containerElement && - property == lime.style.transformProperty) { - - lime.style.setTransition(this.containerElement, - property, value[1], value[2]); - - } - } - delete this.transitionsAdd_[i]; - } - - // cache last drawn values to for predraw check - this.positionDrawn_ = this.position_; - this.scaleDrawn_ = this.scale_; - this.opacityDrawn_ = this.opacity_; - this.rotationDrawn_ = this.rotation_; - - - this.transitionsClear_ = {}; - - } - - if (pass) { this.renderer.drawCanvas.call(this); } @@ -828,14 +725,6 @@ lime.Node.prototype.update = function(opt_pass) { } - // set flags that transitions have been draw. - if(do_draw) - for (i in this.transitionsActive_) { - if (this.transitionsActive_[i]) { - this.transitionsActiveSet_[i] = true; - } - } - if(this.dependencies_){ for(var i=0;i Date: Wed, 14 May 2014 16:31:16 -0700 Subject: [PATCH 03/23] removed setPrescision --- lime/src/helper/style.js | 35 ++++------------------------------- lime/src/renderer/canvas.js | 2 +- lime/src/renderer/dom.js | 7 ++----- lime/tests/style.htm | 2 +- 4 files changed, 8 insertions(+), 38 deletions(-) diff --git a/lime/src/helper/style.js b/lime/src/helper/style.js index d03ff85f..c24b8014 100644 --- a/lime/src/helper/style.js +++ b/lime/src/helper/style.js @@ -69,15 +69,10 @@ lime.style.setBorderRadius = (function() { /** * Object representing CSS Transform. * @constructor - * @param {number=} opt_precision Default precision. */ -lime.style.Transform = function(opt_precision) { +lime.style.Transform = function() { this.values = []; - this.precision = 1; this.enable3D_ = true; - if (this.opt_precision) { - this.setPrecision(/** @type {number} */ (opt_precision)); - } }; /** @@ -131,48 +126,26 @@ lime.style.Transform.prototype.rotate = function(angle, opt_unit) { */ lime.style.Transform.prototype.translate = function(tx, ty, opt_tz) { - var p = 1 / this.precision; var val = 'translate'; if (this.enable3D_ && (lime.userAgent.CHROME || lime.userAgent.IOS || lime.userAgent.PLAYBOOK)) { val += '3d'; } - val += '(' + (tx * p) + 'px,' + (ty * p) + 'px'; + val += '(' + (tx) + 'px,' + (ty) + 'px'; if (this.enable3D_ && (lime.userAgent.CHROME || lime.userAgent.IOS || lime.userAgent.PLAYBOOK)) { - val += ',' + ((opt_tz ? opt_tz : 0) * p) + 'px'; + val += ',' + ((opt_tz ? opt_tz : 0)) + 'px'; } this.values.push(val + ')'); return this; }; -/** - * Set the current precision of transform. This is handled as a - * state machine so it's added when called not when done. - * @param {number} p Precision(Lowest value to make a difference). - * @return {lime.style.Transform} object itself. - */ -lime.style.Transform.prototype.setPrecision = function(p) { - if (this.precision != 1) { - var opposite = 1 / this.precision; - this.scale(opposite, opposite); - this.precision = 1; - } - if (p != 1) { - this.scale(p, p); - this.precision = p; - } - return this; -}; - /** * Return CSS transform string from the object * @return {string} CSS value string. */ lime.style.Transform.prototype.toString = function() { - if (this.precision != 1) { - this.setPrecision(1); - } + return this.values.join(' '); }; diff --git a/lime/src/renderer/canvas.js b/lime/src/renderer/canvas.js index 7b9a90b1..b9913038 100644 --- a/lime/src/renderer/canvas.js +++ b/lime/src/renderer/canvas.js @@ -109,7 +109,7 @@ lime.Renderer.CANVAS.drawCanvas = function() { var rotation = -this.getRotation(); lime.style.setTransform(this.domElement, - new lime.style.Transform().setPrecision(.1).translate(pos.x, pos.y). + new lime.style.Transform().translate(pos.x, pos.y). scale(realScale.x, realScale.y).rotate(rotation)); diff --git a/lime/src/renderer/dom.js b/lime/src/renderer/dom.js index 5c62a8de..94728706 100644 --- a/lime/src/renderer/dom.js +++ b/lime/src/renderer/dom.js @@ -93,14 +93,12 @@ lime.Renderer.DOM.drawSizePosition = function () { } var transform = new lime.style.Transform() - .setPrecision(0.1) .set3DAllowed(enable3D); if (this.mask_) { lime.Renderer.DOM.calculateMaskPosition.call(this.mask_); - transform.setPrecision(0.1) - .translate(-this.mask_.mX - ax, -this.mask_.mY - ay) - .rotate(this.mask_.mRot, 'rad').translate(ax, ay).setPrecision(1); + transform.translate(-this.mask_.mX - ax, -this.mask_.mY - ay) + .rotate(this.mask_.mRot, 'rad').translate(ax, ay); } var rotation = -this.getRotation(); @@ -183,7 +181,6 @@ lime.Renderer.DOM.calculateMaskPosition = function() { goog.style.setSize(el, this.mWidth, this.mHeight); lime.style.setTransform(el, new lime.style.Transform() - .setPrecision(0.1) .set3DAllowed(this.getCSS3DTransformsAllowed()) .translate(tl.x, tl.y).rotate(-rot, 'rad')); } diff --git a/lime/tests/style.htm b/lime/tests/style.htm index 6f95b039..d92671d5 100644 --- a/lime/tests/style.htm +++ b/lime/tests/style.htm @@ -124,7 +124,7 @@ lime.style.setTransform(stage,tf); assertEquals('Translated matrix','1, 0, 0, 1, 100, -50',getMatrix()); - lime.style.setTransform(stage,tf.scale(1.5,1.5).setPrecision(Math.random())); + lime.style.setTransform(stage,tf.scale(1.5,1.5)); assertEquals('Scaled matrix','1.5, 0, 0, 1.5, 100, -50',getMatrix()); lime.style.setTransform(stage,tf.rotate(2)); From 663c7a1978660ff442050cd963d26a70c6a2c2af Mon Sep 17 00:00:00 2001 From: "Stringer.Sean" Date: Wed, 14 May 2014 16:37:54 -0700 Subject: [PATCH 04/23] removed set3dtransform --- lime/src/helper/style.js | 17 +++-------------- lime/src/node.js | 28 ---------------------------- lime/src/renderer/dom.js | 8 ++------ 3 files changed, 5 insertions(+), 48 deletions(-) diff --git a/lime/src/helper/style.js b/lime/src/helper/style.js index c24b8014..ff37823c 100644 --- a/lime/src/helper/style.js +++ b/lime/src/helper/style.js @@ -72,17 +72,6 @@ lime.style.setBorderRadius = (function() { */ lime.style.Transform = function() { this.values = []; - this.enable3D_ = true; -}; - -/** - * Sets 3D enabling flag for css hardware acceleration (on by default) - * @param {Boolean} value - * @return {lime.style.Transform} object itself. - */ -lime.style.Transform.prototype.set3DAllowed = function(value) { - this.enable3D_ = value; - return this; }; /** @@ -106,7 +95,7 @@ lime.style.Transform.prototype.scale = function(sx, sy) { lime.style.Transform.prototype.rotate = function(angle, opt_unit) { var rot_str; - if (this.enable3D_ && (lime.userAgent.IOS || lime.userAgent.PLAYBOOK)) { + if (lime.userAgent.IOS || lime.userAgent.PLAYBOOK) { rot_str = 'rotate3d(0, 0, 1, ' + angle + (opt_unit ? opt_unit : 'deg') + ')'; } else { rot_str = 'rotate(' + angle + (opt_unit ? opt_unit : 'deg') + ')'; @@ -128,11 +117,11 @@ lime.style.Transform.prototype.translate = function(tx, ty, opt_tz) { var val = 'translate'; - if (this.enable3D_ && (lime.userAgent.CHROME || lime.userAgent.IOS || lime.userAgent.PLAYBOOK)) { + if (lime.userAgent.CHROME || lime.userAgent.IOS || lime.userAgent.PLAYBOOK) { val += '3d'; } val += '(' + (tx) + 'px,' + (ty) + 'px'; - if (this.enable3D_ && (lime.userAgent.CHROME || lime.userAgent.IOS || lime.userAgent.PLAYBOOK)) { + if (lime.userAgent.CHROME || lime.userAgent.IOS || lime.userAgent.PLAYBOOK) { val += ',' + ((opt_tz ? opt_tz : 0)) + 'px'; } this.values.push(val + ')'); diff --git a/lime/src/node.js b/lime/src/node.js index 4b8a1cd3..f466cc2d 100644 --- a/lime/src/node.js +++ b/lime/src/node.js @@ -26,12 +26,6 @@ lime.Node = function() { this.parent_ = null; - /** - * Allow translate3d and other css optimizations - * @type {boolean} - */ - this.allow3DCSSTransform_ = true; - /** * Node has been added to DOM tree * @type {boolean} @@ -466,28 +460,6 @@ lime.Node.prototype.setAutoResize = function(value) { return this.setDirty(lime.Dirty.ALL); }; -/** - * Sets css 3d transforms rule (for DOM renderer). - * XXX: This hack is required to fix a mobile Safari rendering bug. - * It should only be used on nodes that are affected by the bug! - * 3D acceleration in css transforms is enabled by default and applied - * for iOS and Playbook. - * - * @param {boolean} value allow(true) or disable(false). - * @return {lime.Node} object itself. - */ -lime.Node.prototype.setAllow3DCSSTransforms = function(value) { - this.allow3DCSSTransform_ = value; - return this; -}; - -/** - * Returns css 3d transforms flag - * @return {boolean} - */ -lime.Node.prototype.getCSS3DTransformsAllowed = function() { - return this.allow3DCSSTransform_; -}; /** * Convert screen coordinate to node coordinate space diff --git a/lime/src/renderer/dom.js b/lime/src/renderer/dom.js index 94728706..13520c8a 100644 --- a/lime/src/renderer/dom.js +++ b/lime/src/renderer/dom.js @@ -48,8 +48,7 @@ lime.Renderer.DOM.updateLayout = function() { lime.Renderer.DOM.drawSizePosition = function () { var size = this.getSize(), position = this.getPosition(), - scale = this.getScale(), - enable3D = this.getCSS3DTransformsAllowed(); + scale = this.getScale(); var width = size.width; var height = size.height; @@ -78,7 +77,6 @@ lime.Renderer.DOM.drawSizePosition = function () { lime.style.setTransform(this.containerElement, new lime.style.Transform() - .set3DAllowed(enable3D) .translate(ax-so, ay-so)); } @@ -92,8 +90,7 @@ lime.Renderer.DOM.drawSizePosition = function () { } } - var transform = new lime.style.Transform() - .set3DAllowed(enable3D); + var transform = new lime.style.Transform(); if (this.mask_) { lime.Renderer.DOM.calculateMaskPosition.call(this.mask_); @@ -181,7 +178,6 @@ lime.Renderer.DOM.calculateMaskPosition = function() { goog.style.setSize(el, this.mWidth, this.mHeight); lime.style.setTransform(el, new lime.style.Transform() - .set3DAllowed(this.getCSS3DTransformsAllowed()) .translate(tl.x, tl.y).rotate(-rot, 'rad')); } From e0e4ebecb84955d1d42ac28ae54d95df3596754c Mon Sep 17 00:00:00 2001 From: "Stringer.Sean" Date: Wed, 14 May 2014 16:56:32 -0700 Subject: [PATCH 05/23] fix for non-uniform scales and rotations --- lime/src/renderer/dom.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lime/src/renderer/dom.js b/lime/src/renderer/dom.js index 71d31b4b..0c682a5a 100644 --- a/lime/src/renderer/dom.js +++ b/lime/src/renderer/dom.js @@ -114,7 +114,7 @@ lime.Renderer.DOM.drawSizePosition = function () { rotation = -this.transitionsActive_[lime.Transition.ROTATION]; } - transform.translate(px, py).scale(realScale.x, realScale.y).rotate(rotation); + transform.translate(px, py).rotate(rotation).scale(realScale.x, realScale.y); if (!this.transitionsActiveSet_[lime.Transition.POSITION] && !this.transitionsActiveSet_[lime.Transition.SCALE] && !this.transitionsActiveSet_[lime.Transition.ROTATION]) { // console.log('transform',this.transition_position_set_,this.transition_position_); From 51e1f2f311e3489799fcc76d157ce3a02486e406 Mon Sep 17 00:00:00 2001 From: "Stringer.Sean" Date: Thu, 15 May 2014 10:37:10 -0700 Subject: [PATCH 06/23] missed an instance where transforms were multiplied in the wrong order. --- lime/src/renderer/canvas.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lime/src/renderer/canvas.js b/lime/src/renderer/canvas.js index 8086da8a..c2bb6ec3 100644 --- a/lime/src/renderer/canvas.js +++ b/lime/src/renderer/canvas.js @@ -121,7 +121,7 @@ lime.Renderer.CANVAS.drawCanvas = function() { } lime.style.setTransform(this.domElement, new lime.style.Transform().setPrecision(.1).translate(pos.x, pos.y). - scale(realScale.x, realScale.y).rotate(rotation)); + rotate(rotation).scale(realScale.x, realScale.y)); } if (this.redraw_) { From 2c6c8aa4512e97ea3fb065fe5bf86a9b613efedd Mon Sep 17 00:00:00 2001 From: "Stringer.Sean" Date: Thu, 15 May 2014 20:56:29 -0700 Subject: [PATCH 07/23] matrix3d working --- lime/src/helper/style.js | 31 ++++++++++++++++++++++ lime/src/renderer/canvas.js | 21 ++++++++++----- lime/src/renderer/dom.js | 52 +++++++++++++++++++++++++------------ 3 files changed, 80 insertions(+), 24 deletions(-) diff --git a/lime/src/helper/style.js b/lime/src/helper/style.js index ff37823c..c229ec30 100644 --- a/lime/src/helper/style.js +++ b/lime/src/helper/style.js @@ -156,6 +156,37 @@ lime.style.setTransform = (function() { }; })(); +lime.style.setAffineTransform = (function () { + var stylename = lime.style.getCSSproperty('Transform'); + return function (el, transform) { + var value = 'matrix3d(' + + [ transform.m00_, + transform.m10_, + 0, + 0, + transform.m01_, + transform.m11_, + 0, + 0, + 0, + 0, + 1, + 0, + transform.m02_, + transform.m12_, + 0, + 1].join( + ',') + + ')'; + + if (value != el.transform_cache_) { + el.style[stylename] = el.transform_cache_ = value; + } + lime.transformSet_=1; + + }; +})(); + /** * Set transform origin point for a DOM element. * @param {Element} el Element to change. diff --git a/lime/src/renderer/canvas.js b/lime/src/renderer/canvas.js index b9913038..ca08b8be 100644 --- a/lime/src/renderer/canvas.js +++ b/lime/src/renderer/canvas.js @@ -3,6 +3,7 @@ goog.provide('lime.Renderer.CANVAS'); goog.require('goog.math.Box.size'); goog.require('goog.math.Size.scaleVec2'); goog.require('lime.Renderer'); +goog.require('goog.graphics.AffineTransform'); /** * Canvas renderer. This renders as canvas element or just @@ -101,17 +102,23 @@ lime.Renderer.CANVAS.drawCanvas = function() { pos.x -= ap_offset.width + this.ax; pos.y -= ap_offset.height + this.ay; - lime.style.setTransformOrigin(this.domElement, - (this.ax + ap_offset.width) / pxsize.width * 100, - (this.ay + ap_offset.height) / pxsize.height * 100, true); + var ox = (this.ax + ap_offset.width) / pxsize.width * 100; + var oy = (this.ay + ap_offset.height) / pxsize.height * 100; + var rotation = -this.getRotation(); + var tx = goog.graphics.AffineTransform.getScaleInstance(1, 1); - var rotation = -this.getRotation(); + tx.translate(pos.x, pos.y); + + tx.translate(ox, oy); + + tx.rotate(rotation * (Math.PI / 180), 0, 0); + + tx.scale(realScale.x, realScale.y); - lime.style.setTransform(this.domElement, - new lime.style.Transform().translate(pos.x, pos.y). - scale(realScale.x, realScale.y).rotate(rotation)); + tx.translate(-ox, -oy); + lime.style.setAffineTransform(this.domElement, tx); if (this.redraw_) { var context = this.domElement.getContext('2d'); diff --git a/lime/src/renderer/dom.js b/lime/src/renderer/dom.js index 25cdd0e1..b6701b40 100644 --- a/lime/src/renderer/dom.js +++ b/lime/src/renderer/dom.js @@ -3,6 +3,7 @@ goog.provide('lime.Renderer.DOM'); goog.require('goog.dom'); goog.require('lime.Renderer'); goog.require('lime.style'); +goog.require('goog.graphics.AffineTransform'); /** * DOM renderer. This renders as div dom elements and @@ -53,13 +54,6 @@ lime.Renderer.DOM.drawSizePosition = function () { var width = size.width; var height = size.height; - var realScale = scale.clone(); - - lime.style.setSize(this.domElement, width, height); - - lime.style.setTransformOrigin(this.domElement, - this.anchorPoint_.x * 100, this.anchorPoint_.y * 100, true); - var ax = this.anchorPoint_.x * width; var ay = this.anchorPoint_.y * height; @@ -75,9 +69,9 @@ lime.Renderer.DOM.drawSizePosition = function () { if (this.domElement != this.containerElement) { - lime.style.setTransform(this.containerElement, - new lime.style.Transform() - .translate(ax-so, ay-so)); + var containerTransform = goog.graphics.AffineTransform.getTranslateInstance(ax-so, ay-so); + + lime.style.setAffineTransform(this.containerElement, containerTransform); } if (this.mask_ != this.activeMask_) { @@ -90,19 +84,37 @@ lime.Renderer.DOM.drawSizePosition = function () { } } - var transform = new lime.style.Transform(); + lime.style.setSize(this.domElement, width, height); + + // --- Start with the Identity + var tx = goog.graphics.AffineTransform.getScaleInstance(1, 1); if (this.mask_) { + lime.Renderer.DOM.calculateMaskPosition.call(this.mask_); - transform.translate(-this.mask_.mX - ax, -this.mask_.mY - ay) - .rotate(this.mask_.mRot, 'rad').translate(ax, ay); + + tx.translate(-this.mask_.mX - ax, -this.mask_.mY - ay); + + tx.rotate(this.mask_.mRot, ax, ay); + + tx.translate(ax, ay); + } + var rotation = -this.getRotation(); - transform.translate(px, py).rotate(rotation).scale(realScale.x, realScale.y); + tx.translate(px, py); + + tx.translate(ax, ay); + + tx.rotate(rotation * (Math.PI / 180), 0, 0); + + tx.scale(scale.x, scale.y); - lime.style.setTransform(this.domElement, transform); + tx.translate(-ax, -ay); + + lime.style.setAffineTransform(this.domElement, tx); }; @@ -177,8 +189,14 @@ lime.Renderer.DOM.calculateMaskPosition = function() { //todo: can be optimized goog.style.setSize(el, this.mWidth, this.mHeight); - lime.style.setTransform(el, new lime.style.Transform() - .translate(tl.x, tl.y).rotate(-rot, 'rad')); + var maskTransform = goog.graphics.AffineTransform.getScaleInstance(1, 1); + + maskTransform.translate(tl.x, tl.y); + + maskTransform.rotate(-rot, 0, 0); + + lime.style.setAffineTransform(el, maskTransform); + } if (this.renderer.getType() == lime.Renderer.DOM) { From 1e3783a69ce9b5f0ddf52dd07ec53f53fc57f59f Mon Sep 17 00:00:00 2001 From: "Stringer.Sean" Date: Thu, 15 May 2014 21:00:05 -0700 Subject: [PATCH 08/23] backface visibility turned on. This has shown a 2x perf increase on Android. --- lime/css/lime.css.soy | 2 ++ lime/css/lime.css.soy.js | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/lime/css/lime.css.soy b/lime/css/lime.css.soy index e4ec3ca6..eba346a2 100644 --- a/lime/css/lime.css.soy +++ b/lime/css/lime.css.soy @@ -12,6 +12,8 @@ -o-transform-origin: 0 0; image-rendering: optimizeSpeed; overflow: hidden; + -webkit-backface-visibility:hidden; /* Chrome, Safari, Opera */ + backface-visibility:hidden; {rb} .{css lime-director} div, diff --git a/lime/css/lime.css.soy.js b/lime/css/lime.css.soy.js index 17ee7af1..a4b055d6 100644 --- a/lime/css/lime.css.soy.js +++ b/lime/css/lime.css.soy.js @@ -8,5 +8,5 @@ goog.require('soydata'); lime.css.css = function(opt_data, opt_ignored) { - return '.' + goog.getCssName('lime-director') + ' {position:absolute; -webkit-transform-origin: 0 0; -moz-transform-origin: 0 0; -o-transform-origin: 0 0; image-rendering: optimizeSpeed; overflow: hidden;}.' + goog.getCssName('lime-director') + ' div, .' + goog.getCssName('lime-director') + ' img, .' + goog.getCssName('lime-director') + ' canvas {-webkit-transform-origin: 0 0; -moz-transform-origin: 0 0; -o-transform-origin: 0 0; position: absolute; -moz-box-sizing: border-box; -webkit-box-sizing: border-box; box-sizing: border-box; -moz-user-select: none; -webkit-user-select: none; -webkit-user-drag: none;}.' + goog.getCssName('lime-scene') + ' {position:absolute; width:100%; height:100%; left: 0px; top: 0px; overflow: hidden; -moz-box-sizing: border-box; -webkit-box-sizing: border-box; box-sizing: border-box;}.' + goog.getCssName('lime-fps') + ' {float: left; background: #333; color: #fff; position: absolute; top:0px; left: 0px; padding:2px 4px;}div.' + goog.getCssName('lime-layer') + ' {position: absolute; left: 0px; top: 0px; width:0px; height:0px; border: none !important;}.' + goog.getCssName('lime-cover') + ' {position: absolute; left: 0px; top: 0px;}.' + goog.getCssName('lime-button') + ' {cursor: pointer;}'; + return '.' + goog.getCssName('lime-director') + ' {position:absolute; -webkit-transform-origin: 0 0; -moz-transform-origin: 0 0; -o-transform-origin: 0 0; image-rendering: optimizeSpeed; overflow: hidden; -webkit-backface-visibility:hidden; backface-visibility:hidden;}.' + goog.getCssName('lime-director') + ' div, .' + goog.getCssName('lime-director') + ' img, .' + goog.getCssName('lime-director') + ' canvas {-webkit-transform-origin: 0 0; -moz-transform-origin: 0 0; -o-transform-origin: 0 0; position: absolute; -moz-box-sizing: border-box; -webkit-box-sizing: border-box; box-sizing: border-box; -moz-user-select: none; -webkit-user-select: none; -webkit-user-drag: none;}.' + goog.getCssName('lime-scene') + ' {position:absolute; width:100%; height:100%; left: 0px; top: 0px; overflow: hidden; -moz-box-sizing: border-box; -webkit-box-sizing: border-box; box-sizing: border-box;}.' + goog.getCssName('lime-fps') + ' {float: left; background: #333; color: #fff; position: absolute; top:0px; left: 0px; padding:2px 4px;}div.' + goog.getCssName('lime-layer') + ' {position: absolute; left: 0px; top: 0px; width:0px; height:0px; border: none !important;}.' + goog.getCssName('lime-cover') + ' {position: absolute; left: 0px; top: 0px;}.' + goog.getCssName('lime-button') + ' {cursor: pointer;}'; }; From c0d9dadc45b05d61b9d988dd2cd2cef54846e033 Mon Sep 17 00:00:00 2001 From: "Stringer.Sean" Date: Thu, 15 May 2014 21:00:05 -0700 Subject: [PATCH 09/23] backface visibility turned on. This has shown a 2x perf increase on Android. --- lime/css/lime.css.soy | 2 ++ lime/css/lime.css.soy.js | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/lime/css/lime.css.soy b/lime/css/lime.css.soy index e4ec3ca6..eba346a2 100644 --- a/lime/css/lime.css.soy +++ b/lime/css/lime.css.soy @@ -12,6 +12,8 @@ -o-transform-origin: 0 0; image-rendering: optimizeSpeed; overflow: hidden; + -webkit-backface-visibility:hidden; /* Chrome, Safari, Opera */ + backface-visibility:hidden; {rb} .{css lime-director} div, diff --git a/lime/css/lime.css.soy.js b/lime/css/lime.css.soy.js index 17ee7af1..a4b055d6 100644 --- a/lime/css/lime.css.soy.js +++ b/lime/css/lime.css.soy.js @@ -8,5 +8,5 @@ goog.require('soydata'); lime.css.css = function(opt_data, opt_ignored) { - return '.' + goog.getCssName('lime-director') + ' {position:absolute; -webkit-transform-origin: 0 0; -moz-transform-origin: 0 0; -o-transform-origin: 0 0; image-rendering: optimizeSpeed; overflow: hidden;}.' + goog.getCssName('lime-director') + ' div, .' + goog.getCssName('lime-director') + ' img, .' + goog.getCssName('lime-director') + ' canvas {-webkit-transform-origin: 0 0; -moz-transform-origin: 0 0; -o-transform-origin: 0 0; position: absolute; -moz-box-sizing: border-box; -webkit-box-sizing: border-box; box-sizing: border-box; -moz-user-select: none; -webkit-user-select: none; -webkit-user-drag: none;}.' + goog.getCssName('lime-scene') + ' {position:absolute; width:100%; height:100%; left: 0px; top: 0px; overflow: hidden; -moz-box-sizing: border-box; -webkit-box-sizing: border-box; box-sizing: border-box;}.' + goog.getCssName('lime-fps') + ' {float: left; background: #333; color: #fff; position: absolute; top:0px; left: 0px; padding:2px 4px;}div.' + goog.getCssName('lime-layer') + ' {position: absolute; left: 0px; top: 0px; width:0px; height:0px; border: none !important;}.' + goog.getCssName('lime-cover') + ' {position: absolute; left: 0px; top: 0px;}.' + goog.getCssName('lime-button') + ' {cursor: pointer;}'; + return '.' + goog.getCssName('lime-director') + ' {position:absolute; -webkit-transform-origin: 0 0; -moz-transform-origin: 0 0; -o-transform-origin: 0 0; image-rendering: optimizeSpeed; overflow: hidden; -webkit-backface-visibility:hidden; backface-visibility:hidden;}.' + goog.getCssName('lime-director') + ' div, .' + goog.getCssName('lime-director') + ' img, .' + goog.getCssName('lime-director') + ' canvas {-webkit-transform-origin: 0 0; -moz-transform-origin: 0 0; -o-transform-origin: 0 0; position: absolute; -moz-box-sizing: border-box; -webkit-box-sizing: border-box; box-sizing: border-box; -moz-user-select: none; -webkit-user-select: none; -webkit-user-drag: none;}.' + goog.getCssName('lime-scene') + ' {position:absolute; width:100%; height:100%; left: 0px; top: 0px; overflow: hidden; -moz-box-sizing: border-box; -webkit-box-sizing: border-box; box-sizing: border-box;}.' + goog.getCssName('lime-fps') + ' {float: left; background: #333; color: #fff; position: absolute; top:0px; left: 0px; padding:2px 4px;}div.' + goog.getCssName('lime-layer') + ' {position: absolute; left: 0px; top: 0px; width:0px; height:0px; border: none !important;}.' + goog.getCssName('lime-cover') + ' {position: absolute; left: 0px; top: 0px;}.' + goog.getCssName('lime-button') + ' {cursor: pointer;}'; }; From 68298848a987e4fe9b51742a30849de93dda9fbe Mon Sep 17 00:00:00 2001 From: "Stringer.Sean" Date: Thu, 15 May 2014 22:12:23 -0700 Subject: [PATCH 10/23] removed lime.style.Transform as it is not needed anymore --- lime/src/helper/style.js | 75 ---------------------------------------- 1 file changed, 75 deletions(-) diff --git a/lime/src/helper/style.js b/lime/src/helper/style.js index c229ec30..e4725929 100644 --- a/lime/src/helper/style.js +++ b/lime/src/helper/style.js @@ -63,81 +63,6 @@ lime.style.setBorderRadius = (function() { }; })(); -// There are classes like CSSMatrix in some browsers. -// Maybe this would make more sense. - -/** - * Object representing CSS Transform. - * @constructor - */ -lime.style.Transform = function() { - this.values = []; -}; - -/** - * Scale current transform object - * @param {number} sx X-axis scale factor. - * @param {number} sy y-axis scale factor. - * @return {lime.style.Transform} object itself. - */ -lime.style.Transform.prototype.scale = function(sx, sy) { - //if(sx!=1 && sy!=1) - this.values.push('scale(' + sx + ',' + sy + ')'); - return this; -}; - -/** - * Rotate current transform object - * @param {number} angle Angle to rotate. - * @param {string=} opt_unit Units. Defaults to degrees. - * @return {lime.style.Transform} object itself. - */ -lime.style.Transform.prototype.rotate = function(angle, opt_unit) { - var rot_str; - - if (lime.userAgent.IOS || lime.userAgent.PLAYBOOK) { - rot_str = 'rotate3d(0, 0, 1, ' + angle + (opt_unit ? opt_unit : 'deg') + ')'; - } else { - rot_str = 'rotate(' + angle + (opt_unit ? opt_unit : 'deg') + ')'; - } - if (angle != 0) - this.values.push(rot_str); - - return this; -}; - -/** - * Translate(move) current transform object - * @param {number} tx Offset in x-axis. - * @param {number} ty Offset in y-axis. - * @param {number=} opt_tz Offset in z-axis. - * @return {lime.style.Transform} object itself. - */ -lime.style.Transform.prototype.translate = function(tx, ty, opt_tz) { - - var val = 'translate'; - - if (lime.userAgent.CHROME || lime.userAgent.IOS || lime.userAgent.PLAYBOOK) { - val += '3d'; - } - val += '(' + (tx) + 'px,' + (ty) + 'px'; - if (lime.userAgent.CHROME || lime.userAgent.IOS || lime.userAgent.PLAYBOOK) { - val += ',' + ((opt_tz ? opt_tz : 0)) + 'px'; - } - this.values.push(val + ')'); - - return this; -}; - -/** - * Return CSS transform string from the object - * @return {string} CSS value string. - */ -lime.style.Transform.prototype.toString = function() { - - return this.values.join(' '); -}; - /** * Set transform to a DOM element. * @param {Element} el Element to change. From f2a267ac7395d6855d48c12f774252ffc3e7f4f3 Mon Sep 17 00:00:00 2001 From: "Stringer.Sean" Date: Wed, 21 May 2014 16:44:48 -0700 Subject: [PATCH 11/23] removed containerElement --- lime/src/renderer/dom.js | 36 ++++++++++++++++++++++-------------- 1 file changed, 22 insertions(+), 14 deletions(-) diff --git a/lime/src/renderer/dom.js b/lime/src/renderer/dom.js index b6701b40..ec6e9c2e 100644 --- a/lime/src/renderer/dom.js +++ b/lime/src/renderer/dom.js @@ -31,6 +31,7 @@ lime.Renderer.DOM.updateLayout = function() { goog.dom.removeNode(el); } lime.Renderer.DOM.appendAt_(this.containerElement, el, j++); + j++; continue; } } @@ -60,20 +61,6 @@ lime.Renderer.DOM.drawSizePosition = function () { var px = position.x - ax, py = position.y - ay; - var so = this.stroke_ ? this.stroke_.width_ : 0; - - if (((ax-so) != 0 || (ay-so) != 0) && this.domElement == this.containerElement && - this.children_.length) { - lime.Renderer.DOM.makeContainer.call(this); - } - - if (this.domElement != this.containerElement) { - - var containerTransform = goog.graphics.AffineTransform.getTranslateInstance(ax-so, ay-so); - - lime.style.setAffineTransform(this.containerElement, containerTransform); - } - if (this.mask_ != this.activeMask_) { if (this.activeMask_) { lime.Renderer.DOM.removeMask.call(this); @@ -102,6 +89,27 @@ lime.Renderer.DOM.drawSizePosition = function () { } + // --- Begin removing of container Node + + var parentAnchorX = 0; + var parentAnchorY = 0; + + var parent = this.getParent(); + + if (parent) { + var parentAnchor = parent.getAnchorPoint(); + var parentSize = parent.getSize(); + + parentAnchorX = parentAnchor.x * parentSize.width; + parentAnchorY = parentAnchor.y * parentSize.height; + + tx.translate(parentAnchorX, parentAnchorY); + } + + + // --- End of removing container Node + + var rotation = -this.getRotation(); tx.translate(px, py); From d51ddfb15ccbc36102367b174a1dddc9629d2a0b Mon Sep 17 00:00:00 2001 From: "Stringer.Sean" Date: Sun, 1 Jun 2014 13:30:40 -0700 Subject: [PATCH 12/23] trig tables for sine and cosine --- lime/demos/tests/anim1.js | 13 +- lime/src/math/affinetransform.js | 589 +++++++++++++++++++++++++++++++ lime/src/math/trigtables.js | 84 +++++ lime/src/node.js | 16 +- lime/src/renderer/canvas.js | 4 +- lime/src/renderer/dom.js | 11 +- 6 files changed, 700 insertions(+), 17 deletions(-) create mode 100644 lime/src/math/affinetransform.js create mode 100644 lime/src/math/trigtables.js diff --git a/lime/demos/tests/anim1.js b/lime/demos/tests/anim1.js index bdaf8bad..02cb0654 100644 --- a/lime/demos/tests/anim1.js +++ b/lime/demos/tests/anim1.js @@ -33,11 +33,16 @@ test.start = function() { var menuscene = new lime.Scene; - var layer = (new lime.Layer).setPosition(100, 100); + var layer = (new lime.Layer).setPosition(0, 0); menuscene.appendChild(layer); - var sprite = new lime.Sprite().setFill(100,0,0).setSize(50, 50).setRenderer(lime.Renderer.CANVAS); + var sprite = new lime.Sprite().setFill(100,0,0).setSize(50, 50); + + var sprite2 = new lime.Sprite().setFill(100,100,0).setSize(25, 25); + + sprite.appendChild(sprite2); + layer.appendChild(sprite); var anim = new lime.animation.Sequence(new lime.animation.Spawn( @@ -51,7 +56,7 @@ test.start = function() { new lime.animation.ColorTo(200,0,0) )); - sprite.runAction(new lime.animation.Loop(anim).setLimit(5)); + //sprite.runAction(new lime.animation.Loop(anim).setLimit(5)); var sprite = new lime.Sprite().setFill('#0c0').setSize(50, 50).setPosition(0, 100).setRenderer(lime.Renderer.CANVAS); layer.appendChild(sprite); @@ -61,7 +66,7 @@ test.start = function() { new lime.animation.MoveBy(300, 0).setDuration(3) ); var a2 = new lime.animation.Sequence(anim, anim.reverse()); - sprite.runAction(new lime.animation.Loop(a2).setLimit(5)); + //sprite.runAction(new lime.animation.Loop(a2).setLimit(5)); // set active scene test.director.replaceScene(menuscene); diff --git a/lime/src/math/affinetransform.js b/lime/src/math/affinetransform.js new file mode 100644 index 00000000..64a34915 --- /dev/null +++ b/lime/src/math/affinetransform.js @@ -0,0 +1,589 @@ +// Copyright 2008 The Closure Library Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS-IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + + +/** + * @fileoverview Provides an object representation of an AffineTransform and + * methods for working with it. + */ + + +goog.provide('lime.math.AffineTransform'); + +goog.require('goog.math'); +goog.require('lime.math.TrigTable'); + + + +/** + * Creates a 2D affine transform. An affine transform performs a linear + * mapping from 2D coordinates to other 2D coordinates that preserves the + * "straightness" and "parallelness" of lines. + * + * Such a coordinate transformation can be represented by a 3 row by 3 column + * matrix with an implied last row of [ 0 0 1 ]. This matrix transforms source + * coordinates (x,y) into destination coordinates (x',y') by considering them + * to be a column vector and multiplying the coordinate vector by the matrix + * according to the following process: + *
+ *      [ x']   [  m00  m01  m02  ] [ x ]   [ m00x + m01y + m02 ]
+ *      [ y'] = [  m10  m11  m12  ] [ y ] = [ m10x + m11y + m12 ]
+ *      [ 1 ]   [   0    0    1   ] [ 1 ]   [         1         ]
+ * 
+ * + * This class is optimized for speed and minimizes calculations based on its + * knowledge of the underlying matrix (as opposed to say simply performing + * matrix multiplication). + * + * @param {number=} opt_m00 The m00 coordinate of the transform. + * @param {number=} opt_m10 The m10 coordinate of the transform. + * @param {number=} opt_m01 The m01 coordinate of the transform. + * @param {number=} opt_m11 The m11 coordinate of the transform. + * @param {number=} opt_m02 The m02 coordinate of the transform. + * @param {number=} opt_m12 The m12 coordinate of the transform. + * @constructor + * @final + */ +lime.math.AffineTransform = function(opt_m00, opt_m10, opt_m01, + opt_m11, opt_m02, opt_m12) { + if (arguments.length == 6) { + this.setTransform(/** @type {number} */ (opt_m00), + /** @type {number} */ (opt_m10), + /** @type {number} */ (opt_m01), + /** @type {number} */ (opt_m11), + /** @type {number} */ (opt_m02), + /** @type {number} */ (opt_m12)); + } else if (arguments.length != 0) { + throw Error('Insufficient matrix parameters'); + } else { + this.m00_ = this.m11_ = 1; + this.m10_ = this.m01_ = this.m02_ = this.m12_ = 0; + } +}; + + +/** + * @return {boolean} Whether this transform is the identity transform. + */ +lime.math.AffineTransform.prototype.isIdentity = function() { + return this.m00_ == 1 && this.m10_ == 0 && this.m01_ == 0 && + this.m11_ == 1 && this.m02_ == 0 && this.m12_ == 0; +}; + + +/** + * @return {!lime.math.AffineTransform} A copy of this transform. + */ +lime.math.AffineTransform.prototype.clone = function() { + return new lime.math.AffineTransform(this.m00_, this.m10_, this.m01_, + this.m11_, this.m02_, this.m12_); +}; + + +/** + * Sets this transform to the matrix specified by the 6 values. + * + * @param {number} m00 The m00 coordinate of the transform. + * @param {number} m10 The m10 coordinate of the transform. + * @param {number} m01 The m01 coordinate of the transform. + * @param {number} m11 The m11 coordinate of the transform. + * @param {number} m02 The m02 coordinate of the transform. + * @param {number} m12 The m12 coordinate of the transform. + * @return {!lime.math.AffineTransform} This affine transform. + */ +lime.math.AffineTransform.prototype.setTransform = function(m00, m10, m01, + m11, m02, m12) { + if (!goog.isNumber(m00) || !goog.isNumber(m10) || !goog.isNumber(m01) || + !goog.isNumber(m11) || !goog.isNumber(m02) || !goog.isNumber(m12)) { + throw Error('Invalid transform parameters'); + } + this.m00_ = m00; + this.m10_ = m10; + this.m01_ = m01; + this.m11_ = m11; + this.m02_ = m02; + this.m12_ = m12; + return this; +}; + + +/** + * Sets this transform to be identical to the given transform. + * + * @param {!lime.math.AffineTransform} tx The transform to copy. + * @return {!lime.math.AffineTransform} This affine transform. + */ +lime.math.AffineTransform.prototype.copyFrom = function(tx) { + this.m00_ = tx.m00_; + this.m10_ = tx.m10_; + this.m01_ = tx.m01_; + this.m11_ = tx.m11_; + this.m02_ = tx.m02_; + this.m12_ = tx.m12_; + return this; +}; + + +/** + * Concatenates this transform with a scaling transformation. + * + * @param {number} sx The x-axis scaling factor. + * @param {number} sy The y-axis scaling factor. + * @return {!lime.math.AffineTransform} This affine transform. + */ +lime.math.AffineTransform.prototype.scale = function(sx, sy) { + this.m00_ *= sx; + this.m10_ *= sx; + this.m01_ *= sy; + this.m11_ *= sy; + return this; +}; + + +/** + * Pre-concatenates this transform with a scaling transformation, + * i.e. calculates the following matrix product: + * + *
+ * [sx  0 0] [m00 m01 m02]
+ * [ 0 sy 0] [m10 m11 m12]
+ * [ 0  0 1] [  0   0   1]
+ * 
+ * + * @param {number} sx The x-axis scaling factor. + * @param {number} sy The y-axis scaling factor. + * @return {!lime.math.AffineTransform} This affine transform. + */ +lime.math.AffineTransform.prototype.preScale = function(sx, sy) { + this.m00_ *= sx; + this.m01_ *= sx; + this.m02_ *= sx; + this.m10_ *= sy; + this.m11_ *= sy; + this.m12_ *= sy; + return this; +}; + + +/** + * Concatenates this transform with a translate transformation. + * + * @param {number} dx The distance to translate in the x direction. + * @param {number} dy The distance to translate in the y direction. + * @return {!lime.math.AffineTransform} This affine transform. + */ +lime.math.AffineTransform.prototype.translate = function(dx, dy) { + this.m02_ += dx * this.m00_ + dy * this.m01_; + this.m12_ += dx * this.m10_ + dy * this.m11_; + return this; +}; + + +/** + * Pre-concatenates this transform with a translate transformation, + * i.e. calculates the following matrix product: + * + *
+ * [1 0 dx] [m00 m01 m02]
+ * [0 1 dy] [m10 m11 m12]
+ * [0 0  1] [  0   0   1]
+ * 
+ * + * @param {number} dx The distance to translate in the x direction. + * @param {number} dy The distance to translate in the y direction. + * @return {!lime.math.AffineTransform} This affine transform. + */ +lime.math.AffineTransform.prototype.preTranslate = function(dx, dy) { + this.m02_ += dx; + this.m12_ += dy; + return this; +}; + + +/** + * Concatenates this transform with a rotation transformation around an anchor + * point. + * + * @param {number} theta The angle of rotation measured in radians. + * @param {number} x The x coordinate of the anchor point. + * @param {number} y The y coordinate of the anchor point. + * @return {!lime.math.AffineTransform} This affine transform. + */ +lime.math.AffineTransform.prototype.rotate = function(theta, x, y) { + return this.concatenate( + lime.math.AffineTransform.getRotateInstance(theta, x, y)); +}; + + +/** + * Pre-concatenates this transform with a rotation transformation around an + * anchor point. + * + * @param {number} theta The angle of rotation measured in radians. + * @param {number} x The x coordinate of the anchor point. + * @param {number} y The y coordinate of the anchor point. + * @return {!lime.math.AffineTransform} This affine transform. + */ +lime.math.AffineTransform.prototype.preRotate = function(theta, x, y) { + return this.preConcatenate( + lime.math.AffineTransform.getRotateInstance(theta, x, y)); +}; + + +/** + * Concatenates this transform with a shear transformation. + * + * @param {number} shx The x shear factor. + * @param {number} shy The y shear factor. + * @return {!lime.math.AffineTransform} This affine transform. + */ +lime.math.AffineTransform.prototype.shear = function(shx, shy) { + var m00 = this.m00_; + var m10 = this.m10_; + this.m00_ += shy * this.m01_; + this.m10_ += shy * this.m11_; + this.m01_ += shx * m00; + this.m11_ += shx * m10; + return this; +}; + + +/** + * Pre-concatenates this transform with a shear transformation. + * i.e. calculates the following matrix product: + * + *
+ * [  1 shx 0] [m00 m01 m02]
+ * [shy   1 0] [m10 m11 m12]
+ * [  0   0 1] [  0   0   1]
+ * 
+ * + * @param {number} shx The x shear factor. + * @param {number} shy The y shear factor. + * @return {!lime.math.AffineTransform} This affine transform. + */ +lime.math.AffineTransform.prototype.preShear = function(shx, shy) { + var m00 = this.m00_; + var m01 = this.m01_; + var m02 = this.m02_; + this.m00_ += shx * this.m10_; + this.m01_ += shx * this.m11_; + this.m02_ += shx * this.m12_; + this.m10_ += shy * m00; + this.m11_ += shy * m01; + this.m12_ += shy * m02; + return this; +}; + + +/** + * @return {string} A string representation of this transform. The format of + * of the string is compatible with SVG matrix notation, i.e. + * "matrix(a,b,c,d,e,f)". + * @override + */ +lime.math.AffineTransform.prototype.toString = function() { + return 'matrix(' + + [this.m00_, this.m10_, this.m01_, this.m11_, this.m02_, this.m12_].join( + ',') + + ')'; +}; + + +/** + * @return {number} The scaling factor in the x-direction (m00). + */ +lime.math.AffineTransform.prototype.getScaleX = function() { + return this.m00_; +}; + + +/** + * @return {number} The scaling factor in the y-direction (m11). + */ +lime.math.AffineTransform.prototype.getScaleY = function() { + return this.m11_; +}; + + +/** + * @return {number} The translation in the x-direction (m02). + */ +lime.math.AffineTransform.prototype.getTranslateX = function() { + return this.m02_; +}; + + +/** + * @return {number} The translation in the y-direction (m12). + */ +lime.math.AffineTransform.prototype.getTranslateY = function() { + return this.m12_; +}; + + +/** + * @return {number} The shear factor in the x-direction (m01). + */ +lime.math.AffineTransform.prototype.getShearX = function() { + return this.m01_; +}; + + +/** + * @return {number} The shear factor in the y-direction (m10). + */ +lime.math.AffineTransform.prototype.getShearY = function() { + return this.m10_; +}; + + +/** + * Concatenates an affine transform to this transform. + * + * @param {!lime.math.AffineTransform} tx The transform to concatenate. + * @return {!lime.math.AffineTransform} This affine transform. + */ +lime.math.AffineTransform.prototype.concatenate = function(tx) { + var m0 = this.m00_; + var m1 = this.m01_; + this.m00_ = tx.m00_ * m0 + tx.m10_ * m1; + this.m01_ = tx.m01_ * m0 + tx.m11_ * m1; + this.m02_ += tx.m02_ * m0 + tx.m12_ * m1; + + m0 = this.m10_; + m1 = this.m11_; + this.m10_ = tx.m00_ * m0 + tx.m10_ * m1; + this.m11_ = tx.m01_ * m0 + tx.m11_ * m1; + this.m12_ += tx.m02_ * m0 + tx.m12_ * m1; + return this; +}; + + +/** + * Pre-concatenates an affine transform to this transform. + * + * @param {!lime.math.AffineTransform} tx The transform to preconcatenate. + * @return {!lime.math.AffineTransform} This affine transform. + */ +lime.math.AffineTransform.prototype.preConcatenate = function(tx) { + var m0 = this.m00_; + var m1 = this.m10_; + this.m00_ = tx.m00_ * m0 + tx.m01_ * m1; + this.m10_ = tx.m10_ * m0 + tx.m11_ * m1; + + m0 = this.m01_; + m1 = this.m11_; + this.m01_ = tx.m00_ * m0 + tx.m01_ * m1; + this.m11_ = tx.m10_ * m0 + tx.m11_ * m1; + + m0 = this.m02_; + m1 = this.m12_; + this.m02_ = tx.m00_ * m0 + tx.m01_ * m1 + tx.m02_; + this.m12_ = tx.m10_ * m0 + tx.m11_ * m1 + tx.m12_; + return this; +}; + + +/** + * Transforms an array of coordinates by this transform and stores the result + * into a destination array. + * + * @param {!Array.} src The array containing the source points + * as x, y value pairs. + * @param {number} srcOff The offset to the first point to be transformed. + * @param {!Array.} dst The array into which to store the transformed + * point pairs. + * @param {number} dstOff The offset of the location of the first transformed + * point in the destination array. + * @param {number} numPts The number of points to tranform. + */ +lime.math.AffineTransform.prototype.transform = function(src, srcOff, dst, + dstOff, numPts) { + var i = srcOff; + var j = dstOff; + var srcEnd = srcOff + 2 * numPts; + while (i < srcEnd) { + var x = src[i++]; + var y = src[i++]; + dst[j++] = x * this.m00_ + y * this.m01_ + this.m02_; + dst[j++] = x * this.m10_ + y * this.m11_ + this.m12_; + } +}; + + +/** + * @return {number} The determinant of this transform. + */ +lime.math.AffineTransform.prototype.getDeterminant = function() { + return this.m00_ * this.m11_ - this.m01_ * this.m10_; +}; + + +/** + * Returns whether the transform is invertible. A transform is not invertible + * if the determinant is 0 or any value is non-finite or NaN. + * + * @return {boolean} Whether the transform is invertible. + */ +lime.math.AffineTransform.prototype.isInvertible = function() { + var det = this.getDeterminant(); + return goog.math.isFiniteNumber(det) && + goog.math.isFiniteNumber(this.m02_) && + goog.math.isFiniteNumber(this.m12_) && + det != 0; +}; + + +/** + * @return {!lime.math.AffineTransform} An AffineTransform object + * representing the inverse transformation. + */ +lime.math.AffineTransform.prototype.createInverse = function() { + var det = this.getDeterminant(); + return new lime.math.AffineTransform( + this.m11_ / det, + -this.m10_ / det, + -this.m01_ / det, + this.m00_ / det, + (this.m01_ * this.m12_ - this.m11_ * this.m02_) / det, + (this.m10_ * this.m02_ - this.m00_ * this.m12_) / det); +}; + + +/** + * Creates a transform representing a scaling transformation. + * + * @param {number} sx The x-axis scaling factor. + * @param {number} sy The y-axis scaling factor. + * @return {!lime.math.AffineTransform} A transform representing a scaling + * transformation. + */ +lime.math.AffineTransform.getScaleInstance = function(sx, sy) { + return new lime.math.AffineTransform().setToScale(sx, sy); +}; + + +/** + * Creates a transform representing a translation transformation. + * + * @param {number} dx The distance to translate in the x direction. + * @param {number} dy The distance to translate in the y direction. + * @return {!lime.math.AffineTransform} A transform representing a + * translation transformation. + */ +lime.math.AffineTransform.getTranslateInstance = function(dx, dy) { + return new lime.math.AffineTransform().setToTranslation(dx, dy); +}; + + +/** + * Creates a transform representing a shearing transformation. + * + * @param {number} shx The x-axis shear factor. + * @param {number} shy The y-axis shear factor. + * @return {!lime.math.AffineTransform} A transform representing a shearing + * transformation. + */ +lime.math.AffineTransform.getShearInstance = function(shx, shy) { + return new lime.math.AffineTransform().setToShear(shx, shy); +}; + + +/** + * Creates a transform representing a rotation transformation. + * + * @param {number} theta The angle of rotation measured in radians. + * @param {number} x The x coordinate of the anchor point. + * @param {number} y The y coordinate of the anchor point. + * @return {!lime.math.AffineTransform} A transform representing a rotation + * transformation. + */ +lime.math.AffineTransform.getRotateInstance = function(theta, x, y) { + return new lime.math.AffineTransform().setToRotation(theta, x, y); +}; + + +/** + * Sets this transform to a scaling transformation. + * + * @param {number} sx The x-axis scaling factor. + * @param {number} sy The y-axis scaling factor. + * @return {!lime.math.AffineTransform} This affine transform. + */ +lime.math.AffineTransform.prototype.setToScale = function(sx, sy) { + return this.setTransform(sx, 0, 0, sy, 0, 0); +}; + + +/** + * Sets this transform to a translation transformation. + * + * @param {number} dx The distance to translate in the x direction. + * @param {number} dy The distance to translate in the y direction. + * @return {!lime.math.AffineTransform} This affine transform. + */ +lime.math.AffineTransform.prototype.setToTranslation = function(dx, dy) { + return this.setTransform(1, 0, 0, 1, dx, dy); +}; + + +/** + * Sets this transform to a shearing transformation. + * + * @param {number} shx The x-axis shear factor. + * @param {number} shy The y-axis shear factor. + * @return {!lime.math.AffineTransform} This affine transform. + */ +lime.math.AffineTransform.prototype.setToShear = function(shx, shy) { + return this.setTransform(1, shy, shx, 1, 0, 0); +}; + + +/** + * Sets this transform to a rotation transformation. + * + * @param {number} theta The angle of rotation measured in radians. + * @param {number} x The x coordinate of the anchor point. + * @param {number} y The y coordinate of the anchor point. + * @return {!lime.math.AffineTransform} This affine transform. + */ +lime.math.AffineTransform.prototype.setToRotation = function(theta, x, y) { + var cos = lime.math.TrigTable.getCosineFromRadians(theta); + var sin = lime.math.TrigTable.getSineFromRadians(theta); + return this.setTransform(cos, sin, -sin, cos, + x - x * cos + y * sin, y - x * sin - y * cos); +}; + + +/** + * Compares two affine transforms for equality. + * + * @param {lime.math.AffineTransform} tx The other affine transform. + * @return {boolean} whether the two transforms are equal. + */ +lime.math.AffineTransform.prototype.equals = function(tx) { + if (this == tx) { + return true; + } + if (!tx) { + return false; + } + return this.m00_ == tx.m00_ && + this.m01_ == tx.m01_ && + this.m02_ == tx.m02_ && + this.m10_ == tx.m10_ && + this.m11_ == tx.m11_ && + this.m12_ == tx.m12_; +}; diff --git a/lime/src/math/trigtables.js b/lime/src/math/trigtables.js new file mode 100644 index 00000000..206443d2 --- /dev/null +++ b/lime/src/math/trigtables.js @@ -0,0 +1,84 @@ +goog.provide('lime.math.TrigTable'); + +lime.math.TrigTable.init = function () { + + var len = lime.math.TrigTable.segments_; + + var sine = lime.math.TrigTable.sin_; + var cosine = lime.math.TrigTable.cos_; + + var twoPie = 2 * Math.PI; + var increment = twoPie / len; + var curvalue = 0; + + for (var i = 0; i < len; ++i) { + + sine[i] = Math.sin(curvalue); + cosine[i] = Math.cos(curvalue); + + curvalue += increment; + } +}; + +lime.math.TrigTable.segments_ = 4000; + +lime.math.TrigTable.sin_ = []; +lime.math.TrigTable.cos_ = []; + +lime.math.TrigTable.twoPie_ = 2 * Math.PI; +lime.math.TrigTable.radToDeg = 360 / lime.math.TrigTable.twoPie_; + + +lime.math.TrigTable.getSine = function (deg) { + + //var index = lime.math.TrigTable.getIndex(deg); + + // --- DUPLICATION for speed, these functions get call A LOT! + while (deg < 0) { + deg += 360; + } + + while (deg > lime.math.TrigTable.segments_) { + deg -= 360; + } + + var segments = lime.math.TrigTable.segments_; + var factor = segments / 360 ; + + var index = parseInt(Math.floor(deg * factor), 10); + // --- END DUPLICATION + + return lime.math.TrigTable.sin_[index]; +}; + +lime.math.TrigTable.getSineFromRadians = function (rad) { + var deg = lime.math.TrigTable.radToDeg * rad; + return lime.math.TrigTable.getSine(deg); +}; + +lime.math.TrigTable.getCosine = function (deg) { + + // --- DUPLICATION for speed, these functions get call A LOT! + while (deg < 0) { + deg += 360; + } + + while (deg > lime.math.TrigTable.segments_) { + deg -= 360; + } + + var segments = lime.math.TrigTable.segments_; + var factor = segments / 360 ; + + var index = parseInt(Math.floor(deg * factor), 10); + // --- END DUPLICATION + + return lime.math.TrigTable.cos_[index]; +}; + +lime.math.TrigTable.getCosineFromRadians = function (rad) { + var deg = lime.math.TrigTable.radToDeg * rad; + return lime.math.TrigTable.getCosine(deg); +}; + +lime.math.TrigTable.init(); \ No newline at end of file diff --git a/lime/src/node.js b/lime/src/node.js index ffc20b79..4c965c33 100644 --- a/lime/src/node.js +++ b/lime/src/node.js @@ -8,6 +8,7 @@ goog.require('goog.math.Size'); goog.require('goog.math.Vec2'); goog.require('lime'); goog.require('lime.DirtyObject'); +goog.require('lime.math.TrigTable'); goog.require('lime.Renderer.CANVAS'); goog.require('lime.Renderer.DOM'); @@ -490,11 +491,14 @@ lime.Node.prototype.parentToLocal = function(coord) { if (this.rotation_ != 0) { var c2 = coord.clone(), - rot = this.rotation_ * Math.PI / 180, - cos = Math.cos(rot), - sin = Math.sin(rot); + //rot = this.rotation_ * Math.PI / 180, + cos = lime.math.TrigTable.getCosine(this.rotation_), + sin = lime.math.TrigTable.getSine(this.rotation_); coord.x = cos * c2.x - sin * c2.y; coord.y = cos * c2.y + sin * c2.x; + + + console.log("Test: " + Math.cos(this.rotation_ * Math.PI / 180) + ' vs: tables: ' + cos); } return coord; @@ -522,9 +526,9 @@ lime.Node.prototype.localToParent = function(coord) { var newcoord = coord.clone(); if (this.rotation_ != 0) { - var rot = -this.rotation_ * Math.PI / 180, - cos = Math.cos(rot), - sin = Math.sin(rot); + //var rot = -this.rotation_ * Math.PI / 180, + var cos = lime.math.TrigTable.getCosine(-this.rotation_), + sin = lime.math.TrigTable.getSine(-this.rotation_); newcoord.x = cos * coord.x - sin * coord.y; newcoord.y = cos * coord.y + sin * coord.x; } diff --git a/lime/src/renderer/canvas.js b/lime/src/renderer/canvas.js index ca08b8be..9fb4235a 100644 --- a/lime/src/renderer/canvas.js +++ b/lime/src/renderer/canvas.js @@ -3,7 +3,7 @@ goog.provide('lime.Renderer.CANVAS'); goog.require('goog.math.Box.size'); goog.require('goog.math.Size.scaleVec2'); goog.require('lime.Renderer'); -goog.require('goog.graphics.AffineTransform'); +goog.require('lime.math.AffineTransform'); /** * Canvas renderer. This renders as canvas element or just @@ -106,7 +106,7 @@ lime.Renderer.CANVAS.drawCanvas = function() { var oy = (this.ay + ap_offset.height) / pxsize.height * 100; var rotation = -this.getRotation(); - var tx = goog.graphics.AffineTransform.getScaleInstance(1, 1); + var tx = lime.math.AffineTransform.getScaleInstance(1, 1); tx.translate(pos.x, pos.y); diff --git a/lime/src/renderer/dom.js b/lime/src/renderer/dom.js index ec6e9c2e..867a3bfa 100644 --- a/lime/src/renderer/dom.js +++ b/lime/src/renderer/dom.js @@ -3,7 +3,8 @@ goog.provide('lime.Renderer.DOM'); goog.require('goog.dom'); goog.require('lime.Renderer'); goog.require('lime.style'); -goog.require('goog.graphics.AffineTransform'); +goog.require('lime.math.AffineTransform'); +goog.require('lime.math.TrigTable'); /** * DOM renderer. This renders as div dom elements and @@ -74,7 +75,7 @@ lime.Renderer.DOM.drawSizePosition = function () { lime.style.setSize(this.domElement, width, height); // --- Start with the Identity - var tx = goog.graphics.AffineTransform.getScaleInstance(1, 1); + var tx = lime.math.AffineTransform.getScaleInstance(1, 1); if (this.mask_) { @@ -184,8 +185,8 @@ lime.Renderer.DOM.calculateMaskPosition = function() { var x2 = br.x - tr.x; var y2 = br.y - tr.y; - var cos = Math.cos(rot); - var sin = Math.sin(rot); + var cos = lime.math.TrigTable.getCosineFromRadians(rot); + var sin = lime.math.TrigTable.getSineFromRadians(rot); this.mWidth = Math.round(Math.sqrt(x1 * x1 + y1 * y1)); @@ -197,7 +198,7 @@ lime.Renderer.DOM.calculateMaskPosition = function() { //todo: can be optimized goog.style.setSize(el, this.mWidth, this.mHeight); - var maskTransform = goog.graphics.AffineTransform.getScaleInstance(1, 1); + var maskTransform = lime.math.AffineTransform.getScaleInstance(1, 1); maskTransform.translate(tl.x, tl.y); From 09b544139d9734b434bedf2e559dcfe665881bfa Mon Sep 17 00:00:00 2001 From: "Stringer.Sean" Date: Sun, 1 Jun 2014 13:31:41 -0700 Subject: [PATCH 13/23] don't updated the actual 'Mask' element as it is not used by the renderer. --- lime/src/renderer/dom.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lime/src/renderer/dom.js b/lime/src/renderer/dom.js index 867a3bfa..6d08955f 100644 --- a/lime/src/renderer/dom.js +++ b/lime/src/renderer/dom.js @@ -132,7 +132,7 @@ lime.Renderer.DOM.drawSizePosition = function () { * @this {lime.Node} */ lime.Renderer.DOM.update = function() { - if (!this.domElement) return; + if (!this.domElement || this.isMask) return; lime.Renderer.DOM.drawSizePosition.call(this); From 6484b7f9ea922eeebef15412fc58cc00657b4811 Mon Sep 17 00:00:00 2001 From: "Stringer.Sean" Date: Sun, 1 Jun 2014 13:33:55 -0700 Subject: [PATCH 14/23] reverted anim1 test changes --- lime/demos/tests/anim1.js | 57 ++++++++++++++++++--------------------- 1 file changed, 26 insertions(+), 31 deletions(-) diff --git a/lime/demos/tests/anim1.js b/lime/demos/tests/anim1.js index 02cb0654..a5870ac6 100644 --- a/lime/demos/tests/anim1.js +++ b/lime/demos/tests/anim1.js @@ -26,50 +26,45 @@ test.HEIGHT = 400; test.start = function() { - //director - test.director = new lime.Director(document.body, test.WIDTH, test.HEIGHT); - test.director.makeMobileWebAppCapable(); + //director + test.director = new lime.Director(document.body, test.WIDTH, test.HEIGHT); + test.director.makeMobileWebAppCapable(); - var menuscene = new lime.Scene; + var menuscene = new lime.Scene; - var layer = (new lime.Layer).setPosition(0, 0); - menuscene.appendChild(layer); + var layer = (new lime.Layer).setPosition(100, 100); + menuscene.appendChild(layer); - var sprite = new lime.Sprite().setFill(100,0,0).setSize(50, 50); + var sprite = new lime.Sprite().setFill(100,0,0).setSize(50, 50).setRenderer(lime.Renderer.CANVAS); + layer.appendChild(sprite); - var sprite2 = new lime.Sprite().setFill(100,100,0).setSize(25, 25); + var anim = new lime.animation.Sequence(new lime.animation.Spawn( + new lime.animation.MoveBy(200, 0).setDuration(1.5), + new lime.animation.ScaleBy(2), + new lime.animation.ColorTo(0,200,0) - sprite.appendChild(sprite2); + ), new lime.animation.Spawn( + new lime.animation.MoveBy(-200, 0).setDuration(1.5), + new lime.animation.ScaleBy(.5), + new lime.animation.ColorTo(200,0,0) - layer.appendChild(sprite); + )); + sprite.runAction(new lime.animation.Loop(anim).setLimit(5)); - var anim = new lime.animation.Sequence(new lime.animation.Spawn( - new lime.animation.MoveBy(200, 0).setDuration(1.5), - new lime.animation.ScaleBy(2), - new lime.animation.ColorTo(0,200,0) - - ), new lime.animation.Spawn( - new lime.animation.MoveBy(-200, 0).setDuration(1.5), - new lime.animation.ScaleBy(.5), - new lime.animation.ColorTo(200,0,0) + var sprite = new lime.Sprite().setFill('#0c0').setSize(50, 50).setPosition(0, 100).setRenderer(lime.Renderer.CANVAS); + layer.appendChild(sprite); - )); - //sprite.runAction(new lime.animation.Loop(anim).setLimit(5)); - - var sprite = new lime.Sprite().setFill('#0c0').setSize(50, 50).setPosition(0, 100).setRenderer(lime.Renderer.CANVAS); - layer.appendChild(sprite); - - var anim = new lime.animation.Spawn( - new lime.animation.RotateBy(-90).setDuration(3), - new lime.animation.MoveBy(300, 0).setDuration(3) + var anim = new lime.animation.Spawn( + new lime.animation.RotateBy(-90).setDuration(3), + new lime.animation.MoveBy(300, 0).setDuration(3) ); var a2 = new lime.animation.Sequence(anim, anim.reverse()); - //sprite.runAction(new lime.animation.Loop(a2).setLimit(5)); + sprite.runAction(new lime.animation.Loop(a2).setLimit(5)); - // set active scene - test.director.replaceScene(menuscene); + // set active scene + test.director.replaceScene(menuscene); }; From 77aebca6b1efa3d7c3f64a2ab90a3c12c73aa3aa Mon Sep 17 00:00:00 2001 From: "Stringer.Sean" Date: Sun, 1 Jun 2014 13:34:17 -0700 Subject: [PATCH 15/23] reverted extra logging --- lime/src/node.js | 3 --- 1 file changed, 3 deletions(-) diff --git a/lime/src/node.js b/lime/src/node.js index 4c965c33..1eca40e4 100644 --- a/lime/src/node.js +++ b/lime/src/node.js @@ -496,9 +496,6 @@ lime.Node.prototype.parentToLocal = function(coord) { sin = lime.math.TrigTable.getSine(this.rotation_); coord.x = cos * c2.x - sin * c2.y; coord.y = cos * c2.y + sin * c2.x; - - - console.log("Test: " + Math.cos(this.rotation_ * Math.PI / 180) + ' vs: tables: ' + cos); } return coord; From 489a22a65d5c66fdaf10b80a317aa058afe29da2 Mon Sep 17 00:00:00 2001 From: "Stringer.Sean" Date: Sun, 1 Jun 2014 20:17:03 -0700 Subject: [PATCH 16/23] removed double inc. accidently committed. --- lime/src/renderer/dom.js | 1 - 1 file changed, 1 deletion(-) diff --git a/lime/src/renderer/dom.js b/lime/src/renderer/dom.js index 6d08955f..89a86d72 100644 --- a/lime/src/renderer/dom.js +++ b/lime/src/renderer/dom.js @@ -32,7 +32,6 @@ lime.Renderer.DOM.updateLayout = function() { goog.dom.removeNode(el); } lime.Renderer.DOM.appendAt_(this.containerElement, el, j++); - j++; continue; } } From ede8c00d2e01c942d1bee53f1743706e510b90e3 Mon Sep 17 00:00:00 2001 From: "Stringer.Sean" Date: Sun, 1 Jun 2014 20:24:42 -0700 Subject: [PATCH 17/23] removed old function --- lime/src/renderer/dom.js | 16 ---------------- 1 file changed, 16 deletions(-) diff --git a/lime/src/renderer/dom.js b/lime/src/renderer/dom.js index 89a86d72..ff9f02c9 100644 --- a/lime/src/renderer/dom.js +++ b/lime/src/renderer/dom.js @@ -239,22 +239,6 @@ lime.Renderer.DOM.appendAt_ = function(p, c, opt_pos) { p.insertBefore(c, p.childNodes[opt_pos]); }; -/** - * Make separate container element for the childnodes - * @this {lime.Node} - */ -lime.Renderer.DOM.makeContainer = function() { - this.containerElement = goog.dom.createDom('div'); - var fragment = document.createDocumentFragment(), - child; - while ((child = this.domElement.firstChild)) { - this.domElement.removeChild(child); - fragment.appendChild(child); - } - this.containerElement.appendChild(fragment); - this.domElement.appendChild(this.containerElement); -}; - /** * Remove mask element relations * @this {lime.Node} From edf72d56fa6cd1c312d6b3f8dc86882948149e00 Mon Sep 17 00:00:00 2001 From: "Stringer.Sean" Date: Thu, 5 Jun 2014 09:39:01 -0700 Subject: [PATCH 18/23] SetPrecision after calculating the mask position. These numbers can have so much precision that further operations cause them to goto Scientific Notation and that's can't be used in the matrix3d style element. --- lime/src/renderer/dom.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lime/src/renderer/dom.js b/lime/src/renderer/dom.js index ff9f02c9..02aaff3d 100644 --- a/lime/src/renderer/dom.js +++ b/lime/src/renderer/dom.js @@ -214,9 +214,9 @@ lime.Renderer.DOM.calculateMaskPosition = function() { this.mPos = target.parentToLocal(tl.clone()); this.mSet = true; - this.mX = cos * tl.x - sin * tl.y; - this.mY = cos * tl.y + sin * tl.x; - this.mRot = rot; + this.mX = (cos * tl.x - sin * tl.y).toPrecision(8); + this.mY = (cos * tl.y + sin * tl.x).toPrecision(8); + this.mRot = rot.toPrecision(8); /* target.setDirty(lime.Dirty.POSITION); target.update(); From 233cc2eab4f5c3b40867072ce528b6789c7506b4 Mon Sep 17 00:00:00 2001 From: "Stringer.Sean" Date: Thu, 5 Jun 2014 09:40:51 -0700 Subject: [PATCH 19/23] match the behavior of Math.cos(undefined) and Math.sin(undefined) --- lime/src/math/trigtables.js | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/lime/src/math/trigtables.js b/lime/src/math/trigtables.js index 206443d2..c12146f8 100644 --- a/lime/src/math/trigtables.js +++ b/lime/src/math/trigtables.js @@ -31,6 +31,8 @@ lime.math.TrigTable.radToDeg = 360 / lime.math.TrigTable.twoPie_; lime.math.TrigTable.getSine = function (deg) { + if (deg === undefined) { return NaN; } + //var index = lime.math.TrigTable.getIndex(deg); // --- DUPLICATION for speed, these functions get call A LOT! @@ -52,12 +54,17 @@ lime.math.TrigTable.getSine = function (deg) { }; lime.math.TrigTable.getSineFromRadians = function (rad) { + + if (rad === undefined) { return NaN; } + var deg = lime.math.TrigTable.radToDeg * rad; return lime.math.TrigTable.getSine(deg); }; lime.math.TrigTable.getCosine = function (deg) { + if (deg === undefined) { return NaN; } + // --- DUPLICATION for speed, these functions get call A LOT! while (deg < 0) { deg += 360; @@ -77,6 +84,9 @@ lime.math.TrigTable.getCosine = function (deg) { }; lime.math.TrigTable.getCosineFromRadians = function (rad) { + + if (rad === undefined) { return NaN; } + var deg = lime.math.TrigTable.radToDeg * rad; return lime.math.TrigTable.getCosine(deg); }; From d97424dcbf6b10050775b7268b97261ac374a00a Mon Sep 17 00:00:00 2001 From: "Stringer.Sean" Date: Fri, 13 Jun 2014 10:29:08 -0700 Subject: [PATCH 20/23] Main fix for borders/strokes - Strokes affect the child. --- lime/src/renderer/dom.js | 6 ++++++ lime/src/sprite.js | 6 ++++++ 2 files changed, 12 insertions(+) diff --git a/lime/src/renderer/dom.js b/lime/src/renderer/dom.js index 02aaff3d..206e4904 100644 --- a/lime/src/renderer/dom.js +++ b/lime/src/renderer/dom.js @@ -104,6 +104,12 @@ lime.Renderer.DOM.drawSizePosition = function () { parentAnchorY = parentAnchor.y * parentSize.height; tx.translate(parentAnchorX, parentAnchorY); + + + // --- Fix for Stroke + if (parent.stroke_) { + tx.translate(-parent.stroke_.width_, -parent.stroke_.width_) + } } diff --git a/lime/src/sprite.js b/lime/src/sprite.js index 22ab4350..37d0d346 100755 --- a/lime/src/sprite.js +++ b/lime/src/sprite.js @@ -90,6 +90,12 @@ lime.Sprite.prototype.setStroke = function(stroke){ } this.stroke_ = stroke; this.setDirty(lime.Dirty.CONTENT); + + // --- Strokes affect attach point of children, we must dirty the children + for (var i = 0; i < this.children_.length; ++i) { + this.children_[i].setDirty(lime.Dirty.POSITION); + } + return this; }; From 6fe4962d9373ac86dd36fe338a73f822fe8b395d Mon Sep 17 00:00:00 2001 From: "Stringer.Sean" Date: Fri, 13 Jun 2014 10:37:03 -0700 Subject: [PATCH 21/23] Modified stroke2 test to include a rounded rect. --- lime/demos/tests/shapes2.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lime/demos/tests/shapes2.js b/lime/demos/tests/shapes2.js index d2405fee..d4f998ed 100644 --- a/lime/demos/tests/shapes2.js +++ b/lime/demos/tests/shapes2.js @@ -8,6 +8,7 @@ goog.require('lime.Label'); goog.require('lime.Layer'); goog.require('lime.Scene'); goog.require('lime.animation.MoveBy'); +goog.require('lime.RoundedRect'); test.WIDTH = 600; @@ -41,7 +42,7 @@ test.start = function() { flameLayer.appendChild(box); - var box2 = new lime.Sprite().setFill('#0c0').setSize(70, 70).setAnchorPoint(1, 1).setRotation(0).setPosition(0, 0); + var box2 = new lime.RoundedRect().setFill('#0c0').setSize(70, 70).setAnchorPoint(1, 1).setRotation(0).setPosition(0, 0); goog.events.listen(box2, ['mousedown', 'touchstart'], dragFunc); box.appendChild(box2); From 449a256952a774b7d0f45324b27aed44a2f2fab7 Mon Sep 17 00:00:00 2001 From: "Stringer.Sean" Date: Fri, 13 Jun 2014 11:06:03 -0700 Subject: [PATCH 22/23] Pregenerate the Trig Tables, use them at runtime --- lime/src/math/trigtables.js | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/lime/src/math/trigtables.js b/lime/src/math/trigtables.js index c12146f8..4d12e7b0 100644 --- a/lime/src/math/trigtables.js +++ b/lime/src/math/trigtables.js @@ -1,6 +1,9 @@ goog.provide('lime.math.TrigTable'); -lime.math.TrigTable.init = function () { +/* + * Not used at runtime...this is only used to generate new tables + */ +lime.math.TrigTable.generateNewTable = function () { var len = lime.math.TrigTable.segments_; @@ -13,17 +16,18 @@ lime.math.TrigTable.init = function () { for (var i = 0; i < len; ++i) { - sine[i] = Math.sin(curvalue); - cosine[i] = Math.cos(curvalue); + sine[i] = Math.sin(curvalue).toFixed(7); + cosine[i] = Math.cos(curvalue).toFixed(7); curvalue += increment; } + + console.log("sin: " + sine); + console.log("cos: " + cosine); }; lime.math.TrigTable.segments_ = 4000; -lime.math.TrigTable.sin_ = []; -lime.math.TrigTable.cos_ = []; lime.math.TrigTable.twoPie_ = 2 * Math.PI; lime.math.TrigTable.radToDeg = 360 / lime.math.TrigTable.twoPie_; @@ -91,4 +95,5 @@ lime.math.TrigTable.getCosineFromRadians = function (rad) { return lime.math.TrigTable.getCosine(deg); }; -lime.math.TrigTable.init(); \ No newline at end of file +lime.math.TrigTable.sin_ = [0.0000000,0.0015708,0.0031416,0.0047124,0.0062831,0.0078539,0.0094246,0.0109954,0.0125660,0.0141367,0.0157073,0.0172779,0.0188484,0.0204189,0.0219894,0.0235598,0.0251301,0.0267004,0.0282706,0.0298407,0.0314108,0.0329807,0.0345506,0.0361205,0.0376902,0.0392598,0.0408294,0.0423988,0.0439681,0.0455373,0.0471065,0.0486754,0.0502443,0.0518131,0.0533817,0.0549502,0.0565185,0.0580867,0.0596548,0.0612227,0.0627905,0.0643581,0.0659256,0.0674929,0.0690600,0.0706270,0.0721938,0.0737604,0.0753268,0.0768930,0.0784591,0.0800250,0.0815906,0.0831561,0.0847213,0.0862864,0.0878512,0.0894158,0.0909802,0.0925444,0.0941083,0.0956720,0.0972355,0.0987987,0.1003617,0.1019245,0.1034869,0.1050492,0.1066112,0.1081729,0.1097343,0.1112955,0.1128564,0.1144170,0.1159773,0.1175374,0.1190972,0.1206566,0.1222158,0.1237747,0.1253332,0.1268915,0.1284494,0.1300071,0.1315644,0.1331213,0.1346780,0.1362343,0.1377903,0.1393459,0.1409012,0.1424562,0.1440108,0.1455650,0.1471189,0.1486724,0.1502256,0.1517784,0.1533308,0.1548828,0.1564345,0.1579857,0.1595366,0.1610871,0.1626372,0.1641868,0.1657361,0.1672850,0.1688334,0.1703815,0.1719291,0.1734763,0.1750231,0.1765694,0.1781153,0.1796607,0.1812058,0.1827503,0.1842944,0.1858381,0.1873813,0.1889241,0.1904663,0.1920081,0.1935495,0.1950903,0.1966307,0.1981706,0.1997100,0.2012489,0.2027873,0.2043252,0.2058626,0.2073995,0.2089359,0.2104718,0.2120071,0.2135419,0.2150762,0.2166100,0.2181432,0.2196759,0.2212081,0.2227397,0.2242708,0.2258013,0.2273312,0.2288606,0.2303894,0.2319177,0.2334454,0.2349725,0.2364990,0.2380249,0.2395503,0.2410751,0.2425992,0.2441228,0.2456458,0.2471681,0.2486899,0.2502110,0.2517315,0.2532514,0.2547707,0.2562894,0.2578074,0.2593248,0.2608415,0.2623576,0.2638730,0.2653878,0.2669020,0.2684155,0.2699283,0.2714404,0.2729519,0.2744627,0.2759729,0.2774823,0.2789911,0.2804992,0.2820066,0.2835133,0.2850193,0.2865246,0.2880291,0.2895330,0.2910362,0.2925386,0.2940403,0.2955413,0.2970416,0.2985411,0.3000399,0.3015380,0.3030353,0.3045318,0.3060276,0.3075227,0.3090170,0.3105105,0.3120033,0.3134953,0.3149865,0.3164770,0.3179666,0.3194555,0.3209436,0.3224309,0.3239174,0.3254031,0.3268880,0.3283721,0.3298554,0.3313379,0.3328195,0.3343004,0.3357804,0.3372596,0.3387379,0.3402154,0.3416921,0.3431679,0.3446429,0.3461171,0.3475903,0.3490628,0.3505343,0.3520050,0.3534748,0.3549438,0.3564119,0.3578791,0.3593454,0.3608108,0.3622754,0.3637390,0.3652018,0.3666636,0.3681246,0.3695846,0.3710437,0.3725019,0.3739592,0.3754156,0.3768710,0.3783255,0.3797791,0.3812317,0.3826834,0.3841342,0.3855840,0.3870328,0.3884807,0.3899277,0.3913737,0.3928187,0.3942627,0.3957058,0.3971479,0.3985890,0.4000291,0.4014683,0.4029064,0.4043436,0.4057798,0.4072149,0.4086491,0.4100822,0.4115144,0.4129455,0.4143756,0.4158047,0.4172327,0.4186597,0.4200857,0.4215107,0.4229346,0.4243575,0.4257793,0.4272001,0.4286198,0.4300384,0.4314560,0.4328726,0.4342880,0.4357024,0.4371158,0.4385280,0.4399392,0.4413492,0.4427582,0.4441661,0.4455729,0.4469786,0.4483832,0.4497867,0.4511891,0.4525904,0.4539905,0.4553895,0.4567874,0.4581842,0.4595799,0.4609744,0.4623678,0.4637600,0.4651511,0.4665410,0.4679298,0.4693175,0.4707039,0.4720893,0.4734734,0.4748564,0.4762382,0.4776188,0.4789983,0.4803766,0.4817537,0.4831296,0.4845043,0.4858778,0.4872501,0.4886212,0.4899912,0.4913599,0.4927273,0.4940936,0.4954587,0.4968225,0.4981851,0.4995465,0.5009066,0.5022655,0.5036232,0.5049796,0.5063348,0.5076887,0.5090414,0.5103928,0.5117430,0.5130919,0.5144395,0.5157859,0.5171310,0.5184748,0.5198173,0.5211586,0.5224986,0.5238372,0.5251746,0.5265107,0.5278455,0.5291790,0.5305112,0.5318421,0.5331716,0.5344999,0.5358268,0.5371524,0.5384767,0.5397996,0.5411213,0.5424415,0.5437605,0.5450781,0.5463943,0.5477093,0.5490228,0.5503350,0.5516459,0.5529554,0.5542635,0.5555702,0.5568756,0.5581796,0.5594823,0.5607835,0.5620834,0.5633819,0.5646790,0.5659746,0.5672689,0.5685619,0.5698533,0.5711434,0.5724321,0.5737194,0.5750053,0.5762897,0.5775727,0.5788543,0.5801345,0.5814132,0.5826905,0.5839663,0.5852408,0.5865137,0.5877853,0.5890553,0.5903239,0.5915911,0.5928568,0.5941211,0.5953838,0.5966451,0.5979050,0.5991633,0.6004202,0.6016756,0.6029295,0.6041820,0.6054329,0.6066824,0.6079303,0.6091767,0.6104217,0.6116651,0.6129071,0.6141475,0.6153864,0.6166238,0.6178596,0.6190939,0.6203268,0.6215580,0.6227878,0.6240160,0.6252427,0.6264678,0.6276914,0.6289134,0.6301339,0.6313528,0.6325702,0.6337860,0.6350002,0.6362129,0.6374240,0.6386335,0.6398415,0.6410479,0.6422527,0.6434559,0.6446575,0.6458575,0.6470560,0.6482528,0.6494480,0.6506417,0.6518337,0.6530242,0.6542130,0.6554002,0.6565858,0.6577697,0.6589521,0.6601328,0.6613119,0.6624893,0.6636651,0.6648393,0.6660119,0.6671828,0.6683520,0.6695196,0.6706856,0.6718499,0.6730125,0.6741735,0.6753328,0.6764905,0.6776464,0.6788007,0.6799534,0.6811043,0.6822536,0.6834012,0.6845471,0.6856913,0.6868338,0.6879747,0.6891138,0.6902512,0.6913870,0.6925210,0.6936533,0.6947839,0.6959128,0.6970400,0.6981654,0.6992891,0.7004112,0.7015314,0.7026500,0.7037668,0.7048819,0.7059952,0.7071068,0.7082166,0.7093247,0.7104311,0.7115357,0.7126385,0.7137396,0.7148389,0.7159365,0.7170323,0.7181263,0.7192185,0.7203090,0.7213977,0.7224846,0.7235698,0.7246531,0.7257347,0.7268145,0.7278924,0.7289686,0.7300430,0.7311156,0.7321864,0.7332553,0.7343225,0.7353879,0.7364514,0.7375131,0.7385730,0.7396311,0.7406873,0.7417418,0.7427944,0.7438451,0.7448941,0.7459411,0.7469864,0.7480298,0.7490714,0.7501111,0.7511489,0.7521849,0.7532191,0.7542514,0.7552818,0.7563104,0.7573371,0.7583619,0.7593849,0.7604060,0.7614252,0.7624425,0.7634580,0.7644715,0.7654832,0.7664930,0.7675009,0.7685069,0.7695110,0.7705132,0.7715136,0.7725120,0.7735085,0.7745031,0.7754957,0.7764865,0.7774754,0.7784623,0.7794473,0.7804304,0.7814116,0.7823908,0.7833681,0.7843435,0.7853169,0.7862884,0.7872580,0.7882256,0.7891913,0.7901550,0.7911168,0.7920766,0.7930345,0.7939904,0.7949444,0.7958963,0.7968464,0.7977944,0.7987405,0.7996847,0.8006268,0.8015670,0.8025052,0.8034414,0.8043756,0.8053079,0.8062381,0.8071664,0.8080927,0.8090170,0.8099393,0.8108596,0.8117779,0.8126942,0.8136084,0.8145207,0.8154310,0.8163393,0.8172455,0.8181497,0.8190519,0.8199521,0.8208503,0.8217464,0.8226405,0.8235326,0.8244226,0.8253107,0.8261966,0.8270806,0.8279625,0.8288423,0.8297201,0.8305959,0.8314696,0.8323413,0.8332109,0.8340784,0.8349439,0.8358074,0.8366687,0.8375280,0.8383853,0.8392405,0.8400936,0.8409446,0.8417935,0.8426404,0.8434852,0.8443279,0.8451686,0.8460071,0.8468436,0.8476779,0.8485102,0.8493404,0.8501685,0.8509945,0.8518184,0.8526402,0.8534599,0.8542774,0.8550929,0.8559063,0.8567175,0.8575267,0.8583337,0.8591386,0.8599414,0.8607420,0.8615406,0.8623370,0.8631313,0.8639234,0.8647134,0.8655013,0.8662871,0.8670707,0.8678522,0.8686315,0.8694087,0.8701838,0.8709567,0.8717274,0.8724960,0.8732625,0.8740267,0.8747889,0.8755489,0.8763067,0.8770623,0.8778158,0.8785672,0.8793163,0.8800633,0.8808081,0.8815508,0.8822912,0.8830295,0.8837656,0.8844996,0.8852313,0.8859609,0.8866883,0.8874134,0.8881364,0.8888573,0.8895759,0.8902923,0.8910065,0.8917186,0.8924284,0.8931360,0.8938414,0.8945446,0.8952456,0.8959444,0.8966410,0.8973354,0.8980276,0.8987175,0.8994053,0.9000908,0.9007741,0.9014551,0.9021340,0.9028106,0.9034850,0.9041571,0.9048271,0.9054947,0.9061602,0.9068234,0.9074844,0.9081432,0.9087997,0.9094539,0.9101060,0.9107557,0.9114033,0.9120486,0.9126916,0.9133324,0.9139709,0.9146072,0.9152412,0.9158729,0.9165024,0.9171297,0.9177546,0.9183773,0.9189978,0.9196159,0.9202318,0.9208455,0.9214568,0.9220659,0.9226727,0.9232773,0.9238795,0.9244795,0.9250772,0.9256726,0.9262658,0.9268566,0.9274452,0.9280314,0.9286154,0.9291971,0.9297765,0.9303536,0.9309284,0.9315009,0.9320711,0.9326390,0.9332046,0.9337679,0.9343289,0.9348876,0.9354440,0.9359981,0.9365499,0.9370993,0.9376465,0.9381913,0.9387339,0.9392741,0.9398120,0.9403475,0.9408808,0.9414117,0.9419403,0.9424666,0.9429905,0.9435122,0.9440315,0.9445484,0.9450631,0.9455754,0.9460854,0.9465930,0.9470983,0.9476013,0.9481019,0.9486002,0.9490961,0.9495898,0.9500810,0.9505699,0.9510565,0.9515407,0.9520226,0.9525022,0.9529793,0.9534542,0.9539267,0.9543968,0.9548645,0.9553300,0.9557930,0.9562537,0.9567121,0.9571680,0.9576216,0.9580729,0.9585218,0.9589683,0.9594125,0.9598543,0.9602937,0.9607307,0.9611654,0.9615977,0.9620277,0.9624552,0.9628804,0.9633032,0.9637237,0.9641417,0.9645574,0.9649707,0.9653816,0.9657902,0.9661963,0.9666001,0.9670015,0.9674005,0.9677971,0.9681913,0.9685832,0.9689726,0.9693597,0.9697443,0.9701266,0.9705065,0.9708840,0.9712590,0.9716317,0.9720020,0.9723699,0.9727354,0.9730985,0.9734592,0.9738175,0.9741734,0.9745269,0.9748780,0.9752266,0.9755729,0.9759168,0.9762582,0.9765973,0.9769339,0.9772681,0.9775999,0.9779293,0.9782563,0.9785809,0.9789031,0.9792228,0.9795401,0.9798551,0.9801675,0.9804776,0.9807853,0.9810905,0.9813933,0.9816937,0.9819917,0.9822873,0.9825804,0.9828711,0.9831594,0.9834452,0.9837286,0.9840096,0.9842882,0.9845643,0.9848380,0.9851093,0.9853782,0.9856446,0.9859086,0.9861701,0.9864293,0.9866859,0.9869402,0.9871920,0.9874414,0.9876883,0.9879328,0.9881749,0.9884146,0.9886517,0.9888865,0.9891188,0.9893487,0.9895761,0.9898011,0.9900237,0.9902438,0.9904614,0.9906766,0.9908894,0.9910997,0.9913076,0.9915131,0.9917161,0.9919166,0.9921147,0.9923104,0.9925036,0.9926943,0.9928826,0.9930685,0.9932519,0.9934328,0.9936113,0.9937874,0.9939610,0.9941321,0.9943008,0.9944670,0.9946308,0.9947921,0.9949510,0.9951074,0.9952614,0.9954129,0.9955620,0.9957086,0.9958527,0.9959944,0.9961336,0.9962704,0.9964047,0.9965365,0.9966659,0.9967929,0.9969173,0.9970393,0.9971589,0.9972760,0.9973906,0.9975028,0.9976125,0.9977198,0.9978245,0.9979269,0.9980267,0.9981241,0.9982191,0.9983115,0.9984016,0.9984891,0.9985742,0.9986568,0.9987370,0.9988146,0.9988899,0.9989626,0.9990329,0.9991008,0.9991661,0.9992290,0.9992895,0.9993474,0.9994029,0.9994560,0.9995066,0.9995547,0.9996003,0.9996435,0.9996842,0.9997224,0.9997582,0.9997915,0.9998224,0.9998507,0.9998766,0.9999001,0.9999210,0.9999395,0.9999556,0.9999692,0.9999803,0.9999889,0.9999951,0.9999988,1.0000000,0.9999988,0.9999951,0.9999889,0.9999803,0.9999692,0.9999556,0.9999395,0.9999210,0.9999001,0.9998766,0.9998507,0.9998224,0.9997915,0.9997582,0.9997224,0.9996842,0.9996435,0.9996003,0.9995547,0.9995066,0.9994560,0.9994029,0.9993474,0.9992895,0.9992290,0.9991661,0.9991008,0.9990329,0.9989626,0.9988899,0.9988146,0.9987370,0.9986568,0.9985742,0.9984891,0.9984016,0.9983115,0.9982191,0.9981241,0.9980267,0.9979269,0.9978245,0.9977198,0.9976125,0.9975028,0.9973906,0.9972760,0.9971589,0.9970393,0.9969173,0.9967929,0.9966659,0.9965365,0.9964047,0.9962704,0.9961336,0.9959944,0.9958527,0.9957086,0.9955620,0.9954129,0.9952614,0.9951074,0.9949510,0.9947921,0.9946308,0.9944670,0.9943008,0.9941321,0.9939610,0.9937874,0.9936113,0.9934328,0.9932519,0.9930685,0.9928826,0.9926943,0.9925036,0.9923104,0.9921147,0.9919166,0.9917161,0.9915131,0.9913076,0.9910997,0.9908894,0.9906766,0.9904614,0.9902438,0.9900237,0.9898011,0.9895761,0.9893487,0.9891188,0.9888865,0.9886517,0.9884146,0.9881749,0.9879328,0.9876883,0.9874414,0.9871920,0.9869402,0.9866859,0.9864293,0.9861701,0.9859086,0.9856446,0.9853782,0.9851093,0.9848380,0.9845643,0.9842882,0.9840096,0.9837286,0.9834452,0.9831594,0.9828711,0.9825804,0.9822873,0.9819917,0.9816937,0.9813933,0.9810905,0.9807853,0.9804776,0.9801675,0.9798551,0.9795401,0.9792228,0.9789031,0.9785809,0.9782563,0.9779293,0.9775999,0.9772681,0.9769339,0.9765973,0.9762582,0.9759168,0.9755729,0.9752266,0.9748780,0.9745269,0.9741734,0.9738175,0.9734592,0.9730985,0.9727354,0.9723699,0.9720020,0.9716317,0.9712590,0.9708840,0.9705065,0.9701266,0.9697443,0.9693597,0.9689726,0.9685832,0.9681913,0.9677971,0.9674005,0.9670015,0.9666001,0.9661963,0.9657902,0.9653816,0.9649707,0.9645574,0.9641417,0.9637237,0.9633032,0.9628804,0.9624552,0.9620277,0.9615977,0.9611654,0.9607307,0.9602937,0.9598543,0.9594125,0.9589683,0.9585218,0.9580729,0.9576216,0.9571680,0.9567121,0.9562537,0.9557930,0.9553300,0.9548645,0.9543968,0.9539267,0.9534542,0.9529793,0.9525022,0.9520226,0.9515407,0.9510565,0.9505699,0.9500810,0.9495898,0.9490961,0.9486002,0.9481019,0.9476013,0.9470983,0.9465930,0.9460854,0.9455754,0.9450631,0.9445484,0.9440315,0.9435122,0.9429905,0.9424666,0.9419403,0.9414117,0.9408808,0.9403475,0.9398120,0.9392741,0.9387339,0.9381913,0.9376465,0.9370993,0.9365499,0.9359981,0.9354440,0.9348876,0.9343289,0.9337679,0.9332046,0.9326390,0.9320711,0.9315009,0.9309284,0.9303536,0.9297765,0.9291971,0.9286154,0.9280314,0.9274452,0.9268566,0.9262658,0.9256726,0.9250772,0.9244795,0.9238795,0.9232773,0.9226727,0.9220659,0.9214568,0.9208455,0.9202318,0.9196159,0.9189978,0.9183773,0.9177546,0.9171297,0.9165024,0.9158729,0.9152412,0.9146072,0.9139709,0.9133324,0.9126916,0.9120486,0.9114033,0.9107557,0.9101060,0.9094539,0.9087997,0.9081432,0.9074844,0.9068234,0.9061602,0.9054947,0.9048271,0.9041571,0.9034850,0.9028106,0.9021340,0.9014551,0.9007741,0.9000908,0.8994053,0.8987175,0.8980276,0.8973354,0.8966410,0.8959444,0.8952456,0.8945446,0.8938414,0.8931360,0.8924284,0.8917186,0.8910065,0.8902923,0.8895759,0.8888573,0.8881364,0.8874134,0.8866883,0.8859609,0.8852313,0.8844996,0.8837656,0.8830295,0.8822912,0.8815508,0.8808081,0.8800633,0.8793163,0.8785672,0.8778158,0.8770623,0.8763067,0.8755489,0.8747889,0.8740267,0.8732625,0.8724960,0.8717274,0.8709567,0.8701838,0.8694087,0.8686315,0.8678522,0.8670707,0.8662871,0.8655013,0.8647134,0.8639234,0.8631313,0.8623370,0.8615406,0.8607420,0.8599414,0.8591386,0.8583337,0.8575267,0.8567175,0.8559063,0.8550929,0.8542774,0.8534599,0.8526402,0.8518184,0.8509945,0.8501685,0.8493404,0.8485102,0.8476779,0.8468436,0.8460071,0.8451686,0.8443279,0.8434852,0.8426404,0.8417935,0.8409446,0.8400936,0.8392405,0.8383853,0.8375280,0.8366687,0.8358074,0.8349439,0.8340784,0.8332109,0.8323413,0.8314696,0.8305959,0.8297201,0.8288423,0.8279625,0.8270806,0.8261966,0.8253107,0.8244226,0.8235326,0.8226405,0.8217464,0.8208503,0.8199521,0.8190519,0.8181497,0.8172455,0.8163393,0.8154310,0.8145207,0.8136084,0.8126942,0.8117779,0.8108596,0.8099393,0.8090170,0.8080927,0.8071664,0.8062381,0.8053079,0.8043756,0.8034414,0.8025052,0.8015670,0.8006268,0.7996847,0.7987405,0.7977944,0.7968464,0.7958963,0.7949444,0.7939904,0.7930345,0.7920766,0.7911168,0.7901550,0.7891913,0.7882256,0.7872580,0.7862884,0.7853169,0.7843435,0.7833681,0.7823908,0.7814116,0.7804304,0.7794473,0.7784623,0.7774754,0.7764865,0.7754957,0.7745031,0.7735085,0.7725120,0.7715136,0.7705132,0.7695110,0.7685069,0.7675009,0.7664930,0.7654832,0.7644715,0.7634580,0.7624425,0.7614252,0.7604060,0.7593849,0.7583619,0.7573371,0.7563104,0.7552818,0.7542514,0.7532191,0.7521849,0.7511489,0.7501111,0.7490714,0.7480298,0.7469864,0.7459411,0.7448941,0.7438451,0.7427944,0.7417418,0.7406873,0.7396311,0.7385730,0.7375131,0.7364514,0.7353879,0.7343225,0.7332553,0.7321864,0.7311156,0.7300430,0.7289686,0.7278924,0.7268145,0.7257347,0.7246531,0.7235698,0.7224846,0.7213977,0.7203090,0.7192185,0.7181263,0.7170323,0.7159365,0.7148389,0.7137396,0.7126385,0.7115357,0.7104311,0.7093247,0.7082166,0.7071068,0.7059952,0.7048819,0.7037668,0.7026500,0.7015314,0.7004112,0.6992891,0.6981654,0.6970400,0.6959128,0.6947839,0.6936533,0.6925210,0.6913870,0.6902512,0.6891138,0.6879747,0.6868338,0.6856913,0.6845471,0.6834012,0.6822536,0.6811043,0.6799534,0.6788007,0.6776464,0.6764905,0.6753328,0.6741735,0.6730125,0.6718499,0.6706856,0.6695196,0.6683520,0.6671828,0.6660119,0.6648393,0.6636651,0.6624893,0.6613119,0.6601328,0.6589521,0.6577697,0.6565858,0.6554002,0.6542130,0.6530242,0.6518337,0.6506417,0.6494480,0.6482528,0.6470560,0.6458575,0.6446575,0.6434559,0.6422527,0.6410479,0.6398415,0.6386335,0.6374240,0.6362129,0.6350002,0.6337860,0.6325702,0.6313528,0.6301339,0.6289134,0.6276914,0.6264678,0.6252427,0.6240160,0.6227878,0.6215580,0.6203268,0.6190939,0.6178596,0.6166238,0.6153864,0.6141475,0.6129071,0.6116651,0.6104217,0.6091767,0.6079303,0.6066824,0.6054329,0.6041820,0.6029295,0.6016756,0.6004202,0.5991633,0.5979050,0.5966451,0.5953838,0.5941211,0.5928568,0.5915911,0.5903239,0.5890553,0.5877853,0.5865137,0.5852408,0.5839663,0.5826905,0.5814132,0.5801345,0.5788543,0.5775727,0.5762897,0.5750053,0.5737194,0.5724321,0.5711434,0.5698533,0.5685619,0.5672689,0.5659746,0.5646790,0.5633819,0.5620834,0.5607835,0.5594823,0.5581796,0.5568756,0.5555702,0.5542635,0.5529554,0.5516459,0.5503350,0.5490228,0.5477093,0.5463943,0.5450781,0.5437605,0.5424415,0.5411213,0.5397996,0.5384767,0.5371524,0.5358268,0.5344999,0.5331716,0.5318421,0.5305112,0.5291790,0.5278455,0.5265107,0.5251746,0.5238372,0.5224986,0.5211586,0.5198173,0.5184748,0.5171310,0.5157859,0.5144395,0.5130919,0.5117430,0.5103928,0.5090414,0.5076887,0.5063348,0.5049796,0.5036232,0.5022655,0.5009066,0.4995465,0.4981851,0.4968225,0.4954587,0.4940936,0.4927273,0.4913599,0.4899912,0.4886212,0.4872501,0.4858778,0.4845043,0.4831296,0.4817537,0.4803766,0.4789983,0.4776188,0.4762382,0.4748564,0.4734734,0.4720893,0.4707039,0.4693175,0.4679298,0.4665410,0.4651511,0.4637600,0.4623678,0.4609744,0.4595799,0.4581842,0.4567874,0.4553895,0.4539905,0.4525904,0.4511891,0.4497867,0.4483832,0.4469786,0.4455729,0.4441661,0.4427582,0.4413492,0.4399392,0.4385280,0.4371158,0.4357024,0.4342880,0.4328726,0.4314560,0.4300384,0.4286198,0.4272001,0.4257793,0.4243575,0.4229346,0.4215107,0.4200857,0.4186597,0.4172327,0.4158047,0.4143756,0.4129455,0.4115144,0.4100822,0.4086491,0.4072149,0.4057798,0.4043436,0.4029064,0.4014683,0.4000291,0.3985890,0.3971479,0.3957058,0.3942627,0.3928187,0.3913737,0.3899277,0.3884807,0.3870328,0.3855840,0.3841342,0.3826834,0.3812317,0.3797791,0.3783255,0.3768710,0.3754156,0.3739592,0.3725019,0.3710437,0.3695846,0.3681246,0.3666636,0.3652018,0.3637390,0.3622754,0.3608108,0.3593454,0.3578791,0.3564119,0.3549438,0.3534748,0.3520050,0.3505343,0.3490628,0.3475903,0.3461171,0.3446429,0.3431679,0.3416921,0.3402154,0.3387379,0.3372596,0.3357804,0.3343004,0.3328195,0.3313379,0.3298554,0.3283721,0.3268880,0.3254031,0.3239174,0.3224309,0.3209436,0.3194555,0.3179666,0.3164770,0.3149865,0.3134953,0.3120033,0.3105105,0.3090170,0.3075227,0.3060276,0.3045318,0.3030353,0.3015380,0.3000399,0.2985411,0.2970416,0.2955413,0.2940403,0.2925386,0.2910362,0.2895330,0.2880291,0.2865246,0.2850193,0.2835133,0.2820066,0.2804992,0.2789911,0.2774823,0.2759729,0.2744627,0.2729519,0.2714404,0.2699283,0.2684155,0.2669020,0.2653878,0.2638730,0.2623576,0.2608415,0.2593248,0.2578074,0.2562894,0.2547707,0.2532514,0.2517315,0.2502110,0.2486899,0.2471681,0.2456458,0.2441228,0.2425992,0.2410751,0.2395503,0.2380249,0.2364990,0.2349725,0.2334454,0.2319177,0.2303894,0.2288606,0.2273312,0.2258013,0.2242708,0.2227397,0.2212081,0.2196759,0.2181432,0.2166100,0.2150762,0.2135419,0.2120071,0.2104718,0.2089359,0.2073995,0.2058626,0.2043252,0.2027873,0.2012489,0.1997100,0.1981706,0.1966307,0.1950903,0.1935495,0.1920081,0.1904663,0.1889241,0.1873813,0.1858381,0.1842944,0.1827503,0.1812058,0.1796607,0.1781153,0.1765694,0.1750231,0.1734763,0.1719291,0.1703815,0.1688334,0.1672850,0.1657361,0.1641868,0.1626372,0.1610871,0.1595366,0.1579857,0.1564345,0.1548828,0.1533308,0.1517784,0.1502256,0.1486724,0.1471189,0.1455650,0.1440108,0.1424562,0.1409012,0.1393459,0.1377903,0.1362343,0.1346780,0.1331213,0.1315644,0.1300071,0.1284494,0.1268915,0.1253332,0.1237747,0.1222158,0.1206566,0.1190972,0.1175374,0.1159773,0.1144170,0.1128564,0.1112955,0.1097343,0.1081729,0.1066112,0.1050492,0.1034869,0.1019245,0.1003617,0.0987987,0.0972355,0.0956720,0.0941083,0.0925444,0.0909802,0.0894158,0.0878512,0.0862864,0.0847213,0.0831561,0.0815906,0.0800250,0.0784591,0.0768930,0.0753268,0.0737604,0.0721938,0.0706270,0.0690600,0.0674929,0.0659256,0.0643581,0.0627905,0.0612227,0.0596548,0.0580867,0.0565185,0.0549502,0.0533817,0.0518131,0.0502443,0.0486754,0.0471065,0.0455373,0.0439681,0.0423988,0.0408294,0.0392598,0.0376902,0.0361205,0.0345506,0.0329807,0.0314108,0.0298407,0.0282706,0.0267004,0.0251301,0.0235598,0.0219894,0.0204189,0.0188484,0.0172779,0.0157073,0.0141367,0.0125660,0.0109954,0.0094246,0.0078539,0.0062831,0.0047124,0.0031416,0.0015708,0.0000000,-0.0015708,-0.0031416,-0.0047124,-0.0062831,-0.0078539,-0.0094246,-0.0109954,-0.0125660,-0.0141367,-0.0157073,-0.0172779,-0.0188484,-0.0204189,-0.0219894,-0.0235598,-0.0251301,-0.0267004,-0.0282706,-0.0298407,-0.0314108,-0.0329807,-0.0345506,-0.0361205,-0.0376902,-0.0392598,-0.0408294,-0.0423988,-0.0439681,-0.0455373,-0.0471065,-0.0486754,-0.0502443,-0.0518131,-0.0533817,-0.0549502,-0.0565185,-0.0580867,-0.0596548,-0.0612227,-0.0627905,-0.0643581,-0.0659256,-0.0674929,-0.0690600,-0.0706270,-0.0721938,-0.0737604,-0.0753268,-0.0768930,-0.0784591,-0.0800250,-0.0815906,-0.0831561,-0.0847213,-0.0862864,-0.0878512,-0.0894158,-0.0909802,-0.0925444,-0.0941083,-0.0956720,-0.0972355,-0.0987987,-0.1003617,-0.1019245,-0.1034869,-0.1050492,-0.1066112,-0.1081729,-0.1097343,-0.1112955,-0.1128564,-0.1144170,-0.1159773,-0.1175374,-0.1190972,-0.1206566,-0.1222158,-0.1237747,-0.1253332,-0.1268915,-0.1284494,-0.1300071,-0.1315644,-0.1331213,-0.1346780,-0.1362343,-0.1377903,-0.1393459,-0.1409012,-0.1424562,-0.1440108,-0.1455650,-0.1471189,-0.1486724,-0.1502256,-0.1517784,-0.1533308,-0.1548828,-0.1564345,-0.1579857,-0.1595366,-0.1610871,-0.1626372,-0.1641868,-0.1657361,-0.1672850,-0.1688334,-0.1703815,-0.1719291,-0.1734763,-0.1750231,-0.1765694,-0.1781153,-0.1796607,-0.1812058,-0.1827503,-0.1842944,-0.1858381,-0.1873813,-0.1889241,-0.1904663,-0.1920081,-0.1935495,-0.1950903,-0.1966307,-0.1981706,-0.1997100,-0.2012489,-0.2027873,-0.2043252,-0.2058626,-0.2073995,-0.2089359,-0.2104718,-0.2120071,-0.2135419,-0.2150762,-0.2166100,-0.2181432,-0.2196759,-0.2212081,-0.2227397,-0.2242708,-0.2258013,-0.2273312,-0.2288606,-0.2303894,-0.2319177,-0.2334454,-0.2349725,-0.2364990,-0.2380249,-0.2395503,-0.2410751,-0.2425992,-0.2441228,-0.2456458,-0.2471681,-0.2486899,-0.2502110,-0.2517315,-0.2532514,-0.2547707,-0.2562894,-0.2578074,-0.2593248,-0.2608415,-0.2623576,-0.2638730,-0.2653878,-0.2669020,-0.2684155,-0.2699283,-0.2714404,-0.2729519,-0.2744627,-0.2759729,-0.2774823,-0.2789911,-0.2804992,-0.2820066,-0.2835133,-0.2850193,-0.2865246,-0.2880291,-0.2895330,-0.2910362,-0.2925386,-0.2940403,-0.2955413,-0.2970416,-0.2985411,-0.3000399,-0.3015380,-0.3030353,-0.3045318,-0.3060276,-0.3075227,-0.3090170,-0.3105105,-0.3120033,-0.3134953,-0.3149865,-0.3164770,-0.3179666,-0.3194555,-0.3209436,-0.3224309,-0.3239174,-0.3254031,-0.3268880,-0.3283721,-0.3298554,-0.3313379,-0.3328195,-0.3343004,-0.3357804,-0.3372596,-0.3387379,-0.3402154,-0.3416921,-0.3431679,-0.3446429,-0.3461171,-0.3475903,-0.3490628,-0.3505343,-0.3520050,-0.3534748,-0.3549438,-0.3564119,-0.3578791,-0.3593454,-0.3608108,-0.3622754,-0.3637390,-0.3652018,-0.3666636,-0.3681246,-0.3695846,-0.3710437,-0.3725019,-0.3739592,-0.3754156,-0.3768710,-0.3783255,-0.3797791,-0.3812317,-0.3826834,-0.3841342,-0.3855840,-0.3870328,-0.3884807,-0.3899277,-0.3913737,-0.3928187,-0.3942627,-0.3957058,-0.3971479,-0.3985890,-0.4000291,-0.4014683,-0.4029064,-0.4043436,-0.4057798,-0.4072149,-0.4086491,-0.4100822,-0.4115144,-0.4129455,-0.4143756,-0.4158047,-0.4172327,-0.4186597,-0.4200857,-0.4215107,-0.4229346,-0.4243575,-0.4257793,-0.4272001,-0.4286198,-0.4300384,-0.4314560,-0.4328726,-0.4342880,-0.4357024,-0.4371158,-0.4385280,-0.4399392,-0.4413492,-0.4427582,-0.4441661,-0.4455729,-0.4469786,-0.4483832,-0.4497867,-0.4511891,-0.4525904,-0.4539905,-0.4553895,-0.4567874,-0.4581842,-0.4595799,-0.4609744,-0.4623678,-0.4637600,-0.4651511,-0.4665410,-0.4679298,-0.4693175,-0.4707039,-0.4720893,-0.4734734,-0.4748564,-0.4762382,-0.4776188,-0.4789983,-0.4803766,-0.4817537,-0.4831296,-0.4845043,-0.4858778,-0.4872501,-0.4886212,-0.4899912,-0.4913599,-0.4927273,-0.4940936,-0.4954587,-0.4968225,-0.4981851,-0.4995465,-0.5009066,-0.5022655,-0.5036232,-0.5049796,-0.5063348,-0.5076887,-0.5090414,-0.5103928,-0.5117430,-0.5130919,-0.5144395,-0.5157859,-0.5171310,-0.5184748,-0.5198173,-0.5211586,-0.5224986,-0.5238372,-0.5251746,-0.5265107,-0.5278455,-0.5291790,-0.5305112,-0.5318421,-0.5331716,-0.5344999,-0.5358268,-0.5371524,-0.5384767,-0.5397996,-0.5411213,-0.5424415,-0.5437605,-0.5450781,-0.5463943,-0.5477093,-0.5490228,-0.5503350,-0.5516459,-0.5529554,-0.5542635,-0.5555702,-0.5568756,-0.5581796,-0.5594823,-0.5607835,-0.5620834,-0.5633819,-0.5646790,-0.5659746,-0.5672689,-0.5685619,-0.5698533,-0.5711434,-0.5724321,-0.5737194,-0.5750053,-0.5762897,-0.5775727,-0.5788543,-0.5801345,-0.5814132,-0.5826905,-0.5839663,-0.5852408,-0.5865137,-0.5877853,-0.5890553,-0.5903239,-0.5915911,-0.5928568,-0.5941211,-0.5953838,-0.5966451,-0.5979050,-0.5991633,-0.6004202,-0.6016756,-0.6029295,-0.6041820,-0.6054329,-0.6066824,-0.6079303,-0.6091767,-0.6104217,-0.6116651,-0.6129071,-0.6141475,-0.6153864,-0.6166238,-0.6178596,-0.6190939,-0.6203268,-0.6215580,-0.6227878,-0.6240160,-0.6252427,-0.6264678,-0.6276914,-0.6289134,-0.6301339,-0.6313528,-0.6325702,-0.6337860,-0.6350002,-0.6362129,-0.6374240,-0.6386335,-0.6398415,-0.6410479,-0.6422527,-0.6434559,-0.6446575,-0.6458575,-0.6470560,-0.6482528,-0.6494480,-0.6506417,-0.6518337,-0.6530242,-0.6542130,-0.6554002,-0.6565858,-0.6577697,-0.6589521,-0.6601328,-0.6613119,-0.6624893,-0.6636651,-0.6648393,-0.6660119,-0.6671828,-0.6683520,-0.6695196,-0.6706856,-0.6718499,-0.6730125,-0.6741735,-0.6753328,-0.6764905,-0.6776464,-0.6788007,-0.6799534,-0.6811043,-0.6822536,-0.6834012,-0.6845471,-0.6856913,-0.6868338,-0.6879747,-0.6891138,-0.6902512,-0.6913870,-0.6925210,-0.6936533,-0.6947839,-0.6959128,-0.6970400,-0.6981654,-0.6992891,-0.7004112,-0.7015314,-0.7026500,-0.7037668,-0.7048819,-0.7059952,-0.7071068,-0.7082166,-0.7093247,-0.7104311,-0.7115357,-0.7126385,-0.7137396,-0.7148389,-0.7159365,-0.7170323,-0.7181263,-0.7192185,-0.7203090,-0.7213977,-0.7224846,-0.7235698,-0.7246531,-0.7257347,-0.7268145,-0.7278924,-0.7289686,-0.7300430,-0.7311156,-0.7321864,-0.7332553,-0.7343225,-0.7353879,-0.7364514,-0.7375131,-0.7385730,-0.7396311,-0.7406873,-0.7417418,-0.7427944,-0.7438451,-0.7448941,-0.7459411,-0.7469864,-0.7480298,-0.7490714,-0.7501111,-0.7511489,-0.7521849,-0.7532191,-0.7542514,-0.7552818,-0.7563104,-0.7573371,-0.7583619,-0.7593849,-0.7604060,-0.7614252,-0.7624425,-0.7634580,-0.7644715,-0.7654832,-0.7664930,-0.7675009,-0.7685069,-0.7695110,-0.7705132,-0.7715136,-0.7725120,-0.7735085,-0.7745031,-0.7754957,-0.7764865,-0.7774754,-0.7784623,-0.7794473,-0.7804304,-0.7814116,-0.7823908,-0.7833681,-0.7843435,-0.7853169,-0.7862884,-0.7872580,-0.7882256,-0.7891913,-0.7901550,-0.7911168,-0.7920766,-0.7930345,-0.7939904,-0.7949444,-0.7958963,-0.7968464,-0.7977944,-0.7987405,-0.7996847,-0.8006268,-0.8015670,-0.8025052,-0.8034414,-0.8043756,-0.8053079,-0.8062381,-0.8071664,-0.8080927,-0.8090170,-0.8099393,-0.8108596,-0.8117779,-0.8126942,-0.8136084,-0.8145207,-0.8154310,-0.8163393,-0.8172455,-0.8181497,-0.8190519,-0.8199521,-0.8208503,-0.8217464,-0.8226405,-0.8235326,-0.8244226,-0.8253107,-0.8261966,-0.8270806,-0.8279625,-0.8288423,-0.8297201,-0.8305959,-0.8314696,-0.8323413,-0.8332109,-0.8340784,-0.8349439,-0.8358074,-0.8366687,-0.8375280,-0.8383853,-0.8392405,-0.8400936,-0.8409446,-0.8417935,-0.8426404,-0.8434852,-0.8443279,-0.8451686,-0.8460071,-0.8468436,-0.8476779,-0.8485102,-0.8493404,-0.8501685,-0.8509945,-0.8518184,-0.8526402,-0.8534599,-0.8542774,-0.8550929,-0.8559063,-0.8567175,-0.8575267,-0.8583337,-0.8591386,-0.8599414,-0.8607420,-0.8615406,-0.8623370,-0.8631313,-0.8639234,-0.8647134,-0.8655013,-0.8662871,-0.8670707,-0.8678522,-0.8686315,-0.8694087,-0.8701838,-0.8709567,-0.8717274,-0.8724960,-0.8732625,-0.8740267,-0.8747889,-0.8755489,-0.8763067,-0.8770623,-0.8778158,-0.8785672,-0.8793163,-0.8800633,-0.8808081,-0.8815508,-0.8822912,-0.8830295,-0.8837656,-0.8844996,-0.8852313,-0.8859609,-0.8866883,-0.8874134,-0.8881364,-0.8888573,-0.8895759,-0.8902923,-0.8910065,-0.8917186,-0.8924284,-0.8931360,-0.8938414,-0.8945446,-0.8952456,-0.8959444,-0.8966410,-0.8973354,-0.8980276,-0.8987175,-0.8994053,-0.9000908,-0.9007741,-0.9014551,-0.9021340,-0.9028106,-0.9034850,-0.9041571,-0.9048271,-0.9054947,-0.9061602,-0.9068234,-0.9074844,-0.9081432,-0.9087997,-0.9094539,-0.9101060,-0.9107557,-0.9114033,-0.9120486,-0.9126916,-0.9133324,-0.9139709,-0.9146072,-0.9152412,-0.9158729,-0.9165024,-0.9171297,-0.9177546,-0.9183773,-0.9189978,-0.9196159,-0.9202318,-0.9208455,-0.9214568,-0.9220659,-0.9226727,-0.9232773,-0.9238795,-0.9244795,-0.9250772,-0.9256726,-0.9262658,-0.9268566,-0.9274452,-0.9280314,-0.9286154,-0.9291971,-0.9297765,-0.9303536,-0.9309284,-0.9315009,-0.9320711,-0.9326390,-0.9332046,-0.9337679,-0.9343289,-0.9348876,-0.9354440,-0.9359981,-0.9365499,-0.9370993,-0.9376465,-0.9381913,-0.9387339,-0.9392741,-0.9398120,-0.9403475,-0.9408808,-0.9414117,-0.9419403,-0.9424666,-0.9429905,-0.9435122,-0.9440315,-0.9445484,-0.9450631,-0.9455754,-0.9460854,-0.9465930,-0.9470983,-0.9476013,-0.9481019,-0.9486002,-0.9490961,-0.9495898,-0.9500810,-0.9505699,-0.9510565,-0.9515407,-0.9520226,-0.9525022,-0.9529793,-0.9534542,-0.9539267,-0.9543968,-0.9548645,-0.9553300,-0.9557930,-0.9562537,-0.9567121,-0.9571680,-0.9576216,-0.9580729,-0.9585218,-0.9589683,-0.9594125,-0.9598543,-0.9602937,-0.9607307,-0.9611654,-0.9615977,-0.9620277,-0.9624552,-0.9628804,-0.9633032,-0.9637237,-0.9641417,-0.9645574,-0.9649707,-0.9653816,-0.9657902,-0.9661963,-0.9666001,-0.9670015,-0.9674005,-0.9677971,-0.9681913,-0.9685832,-0.9689726,-0.9693597,-0.9697443,-0.9701266,-0.9705065,-0.9708840,-0.9712590,-0.9716317,-0.9720020,-0.9723699,-0.9727354,-0.9730985,-0.9734592,-0.9738175,-0.9741734,-0.9745269,-0.9748780,-0.9752266,-0.9755729,-0.9759168,-0.9762582,-0.9765973,-0.9769339,-0.9772681,-0.9775999,-0.9779293,-0.9782563,-0.9785809,-0.9789031,-0.9792228,-0.9795401,-0.9798551,-0.9801675,-0.9804776,-0.9807853,-0.9810905,-0.9813933,-0.9816937,-0.9819917,-0.9822873,-0.9825804,-0.9828711,-0.9831594,-0.9834452,-0.9837286,-0.9840096,-0.9842882,-0.9845643,-0.9848380,-0.9851093,-0.9853782,-0.9856446,-0.9859086,-0.9861701,-0.9864293,-0.9866859,-0.9869402,-0.9871920,-0.9874414,-0.9876883,-0.9879328,-0.9881749,-0.9884146,-0.9886517,-0.9888865,-0.9891188,-0.9893487,-0.9895761,-0.9898011,-0.9900237,-0.9902438,-0.9904614,-0.9906766,-0.9908894,-0.9910997,-0.9913076,-0.9915131,-0.9917161,-0.9919166,-0.9921147,-0.9923104,-0.9925036,-0.9926943,-0.9928826,-0.9930685,-0.9932519,-0.9934328,-0.9936113,-0.9937874,-0.9939610,-0.9941321,-0.9943008,-0.9944670,-0.9946308,-0.9947921,-0.9949510,-0.9951074,-0.9952614,-0.9954129,-0.9955620,-0.9957086,-0.9958527,-0.9959944,-0.9961336,-0.9962704,-0.9964047,-0.9965365,-0.9966659,-0.9967929,-0.9969173,-0.9970393,-0.9971589,-0.9972760,-0.9973906,-0.9975028,-0.9976125,-0.9977198,-0.9978245,-0.9979269,-0.9980267,-0.9981241,-0.9982191,-0.9983115,-0.9984016,-0.9984891,-0.9985742,-0.9986568,-0.9987370,-0.9988146,-0.9988899,-0.9989626,-0.9990329,-0.9991008,-0.9991661,-0.9992290,-0.9992895,-0.9993474,-0.9994029,-0.9994560,-0.9995066,-0.9995547,-0.9996003,-0.9996435,-0.9996842,-0.9997224,-0.9997582,-0.9997915,-0.9998224,-0.9998507,-0.9998766,-0.9999001,-0.9999210,-0.9999395,-0.9999556,-0.9999692,-0.9999803,-0.9999889,-0.9999951,-0.9999988,-1.0000000,-0.9999988,-0.9999951,-0.9999889,-0.9999803,-0.9999692,-0.9999556,-0.9999395,-0.9999210,-0.9999001,-0.9998766,-0.9998507,-0.9998224,-0.9997915,-0.9997582,-0.9997224,-0.9996842,-0.9996435,-0.9996003,-0.9995547,-0.9995066,-0.9994560,-0.9994029,-0.9993474,-0.9992895,-0.9992290,-0.9991661,-0.9991008,-0.9990329,-0.9989626,-0.9988899,-0.9988146,-0.9987370,-0.9986568,-0.9985742,-0.9984891,-0.9984016,-0.9983115,-0.9982191,-0.9981241,-0.9980267,-0.9979269,-0.9978245,-0.9977198,-0.9976125,-0.9975028,-0.9973906,-0.9972760,-0.9971589,-0.9970393,-0.9969173,-0.9967929,-0.9966659,-0.9965365,-0.9964047,-0.9962704,-0.9961336,-0.9959944,-0.9958527,-0.9957086,-0.9955620,-0.9954129,-0.9952614,-0.9951074,-0.9949510,-0.9947921,-0.9946308,-0.9944670,-0.9943008,-0.9941321,-0.9939610,-0.9937874,-0.9936113,-0.9934328,-0.9932519,-0.9930685,-0.9928826,-0.9926943,-0.9925036,-0.9923104,-0.9921147,-0.9919166,-0.9917161,-0.9915131,-0.9913076,-0.9910997,-0.9908894,-0.9906766,-0.9904614,-0.9902438,-0.9900237,-0.9898011,-0.9895761,-0.9893487,-0.9891188,-0.9888865,-0.9886517,-0.9884146,-0.9881749,-0.9879328,-0.9876883,-0.9874414,-0.9871920,-0.9869402,-0.9866859,-0.9864293,-0.9861701,-0.9859086,-0.9856446,-0.9853782,-0.9851093,-0.9848380,-0.9845643,-0.9842882,-0.9840096,-0.9837286,-0.9834452,-0.9831594,-0.9828711,-0.9825804,-0.9822873,-0.9819917,-0.9816937,-0.9813933,-0.9810905,-0.9807853,-0.9804776,-0.9801675,-0.9798551,-0.9795401,-0.9792228,-0.9789031,-0.9785809,-0.9782563,-0.9779293,-0.9775999,-0.9772681,-0.9769339,-0.9765973,-0.9762582,-0.9759168,-0.9755729,-0.9752266,-0.9748780,-0.9745269,-0.9741734,-0.9738175,-0.9734592,-0.9730985,-0.9727354,-0.9723699,-0.9720020,-0.9716317,-0.9712590,-0.9708840,-0.9705065,-0.9701266,-0.9697443,-0.9693597,-0.9689726,-0.9685832,-0.9681913,-0.9677971,-0.9674005,-0.9670015,-0.9666001,-0.9661963,-0.9657902,-0.9653816,-0.9649707,-0.9645574,-0.9641417,-0.9637237,-0.9633032,-0.9628804,-0.9624552,-0.9620277,-0.9615977,-0.9611654,-0.9607307,-0.9602937,-0.9598543,-0.9594125,-0.9589683,-0.9585218,-0.9580729,-0.9576216,-0.9571680,-0.9567121,-0.9562537,-0.9557930,-0.9553300,-0.9548645,-0.9543968,-0.9539267,-0.9534542,-0.9529793,-0.9525022,-0.9520226,-0.9515407,-0.9510565,-0.9505699,-0.9500810,-0.9495898,-0.9490961,-0.9486002,-0.9481019,-0.9476013,-0.9470983,-0.9465930,-0.9460854,-0.9455754,-0.9450631,-0.9445484,-0.9440315,-0.9435122,-0.9429905,-0.9424666,-0.9419403,-0.9414117,-0.9408808,-0.9403475,-0.9398120,-0.9392741,-0.9387339,-0.9381913,-0.9376465,-0.9370993,-0.9365499,-0.9359981,-0.9354440,-0.9348876,-0.9343289,-0.9337679,-0.9332046,-0.9326390,-0.9320711,-0.9315009,-0.9309284,-0.9303536,-0.9297765,-0.9291971,-0.9286154,-0.9280314,-0.9274452,-0.9268566,-0.9262658,-0.9256726,-0.9250772,-0.9244795,-0.9238795,-0.9232773,-0.9226727,-0.9220659,-0.9214568,-0.9208455,-0.9202318,-0.9196159,-0.9189978,-0.9183773,-0.9177546,-0.9171297,-0.9165024,-0.9158729,-0.9152412,-0.9146072,-0.9139709,-0.9133324,-0.9126916,-0.9120486,-0.9114033,-0.9107557,-0.9101060,-0.9094539,-0.9087997,-0.9081432,-0.9074844,-0.9068234,-0.9061602,-0.9054947,-0.9048271,-0.9041571,-0.9034850,-0.9028106,-0.9021340,-0.9014551,-0.9007741,-0.9000908,-0.8994053,-0.8987175,-0.8980276,-0.8973354,-0.8966410,-0.8959444,-0.8952456,-0.8945446,-0.8938414,-0.8931360,-0.8924284,-0.8917186,-0.8910065,-0.8902923,-0.8895759,-0.8888573,-0.8881364,-0.8874134,-0.8866883,-0.8859609,-0.8852313,-0.8844996,-0.8837656,-0.8830295,-0.8822912,-0.8815508,-0.8808081,-0.8800633,-0.8793163,-0.8785672,-0.8778158,-0.8770623,-0.8763067,-0.8755489,-0.8747889,-0.8740267,-0.8732625,-0.8724960,-0.8717274,-0.8709567,-0.8701838,-0.8694087,-0.8686315,-0.8678522,-0.8670707,-0.8662871,-0.8655013,-0.8647134,-0.8639234,-0.8631313,-0.8623370,-0.8615406,-0.8607420,-0.8599414,-0.8591386,-0.8583337,-0.8575267,-0.8567175,-0.8559063,-0.8550929,-0.8542774,-0.8534599,-0.8526402,-0.8518184,-0.8509945,-0.8501685,-0.8493404,-0.8485102,-0.8476779,-0.8468436,-0.8460071,-0.8451686,-0.8443279,-0.8434852,-0.8426404,-0.8417935,-0.8409446,-0.8400936,-0.8392405,-0.8383853,-0.8375280,-0.8366687,-0.8358074,-0.8349439,-0.8340784,-0.8332109,-0.8323413,-0.8314696,-0.8305959,-0.8297201,-0.8288423,-0.8279625,-0.8270806,-0.8261966,-0.8253107,-0.8244226,-0.8235326,-0.8226405,-0.8217464,-0.8208503,-0.8199521,-0.8190519,-0.8181497,-0.8172455,-0.8163393,-0.8154310,-0.8145207,-0.8136084,-0.8126942,-0.8117779,-0.8108596,-0.8099393,-0.8090170,-0.8080927,-0.8071664,-0.8062381,-0.8053079,-0.8043756,-0.8034414,-0.8025052,-0.8015670,-0.8006268,-0.7996847,-0.7987405,-0.7977944,-0.7968464,-0.7958963,-0.7949444,-0.7939904,-0.7930345,-0.7920766,-0.7911168,-0.7901550,-0.7891913,-0.7882256,-0.7872580,-0.7862884,-0.7853169,-0.7843435,-0.7833681,-0.7823908,-0.7814116,-0.7804304,-0.7794473,-0.7784623,-0.7774754,-0.7764865,-0.7754957,-0.7745031,-0.7735085,-0.7725120,-0.7715136,-0.7705132,-0.7695110,-0.7685069,-0.7675009,-0.7664930,-0.7654832,-0.7644715,-0.7634580,-0.7624425,-0.7614252,-0.7604060,-0.7593849,-0.7583619,-0.7573371,-0.7563104,-0.7552818,-0.7542514,-0.7532191,-0.7521849,-0.7511489,-0.7501111,-0.7490714,-0.7480298,-0.7469864,-0.7459411,-0.7448941,-0.7438451,-0.7427944,-0.7417418,-0.7406873,-0.7396311,-0.7385730,-0.7375131,-0.7364514,-0.7353879,-0.7343225,-0.7332553,-0.7321864,-0.7311156,-0.7300430,-0.7289686,-0.7278924,-0.7268145,-0.7257347,-0.7246531,-0.7235698,-0.7224846,-0.7213977,-0.7203090,-0.7192185,-0.7181263,-0.7170323,-0.7159365,-0.7148389,-0.7137396,-0.7126385,-0.7115357,-0.7104311,-0.7093247,-0.7082166,-0.7071068,-0.7059952,-0.7048819,-0.7037668,-0.7026500,-0.7015314,-0.7004112,-0.6992891,-0.6981654,-0.6970400,-0.6959128,-0.6947839,-0.6936533,-0.6925210,-0.6913870,-0.6902512,-0.6891138,-0.6879747,-0.6868338,-0.6856913,-0.6845471,-0.6834012,-0.6822536,-0.6811043,-0.6799534,-0.6788007,-0.6776464,-0.6764905,-0.6753328,-0.6741735,-0.6730125,-0.6718499,-0.6706856,-0.6695196,-0.6683520,-0.6671828,-0.6660119,-0.6648393,-0.6636651,-0.6624893,-0.6613119,-0.6601328,-0.6589521,-0.6577697,-0.6565858,-0.6554002,-0.6542130,-0.6530242,-0.6518337,-0.6506417,-0.6494480,-0.6482528,-0.6470560,-0.6458575,-0.6446575,-0.6434559,-0.6422527,-0.6410479,-0.6398415,-0.6386335,-0.6374240,-0.6362129,-0.6350002,-0.6337860,-0.6325702,-0.6313528,-0.6301339,-0.6289134,-0.6276914,-0.6264678,-0.6252427,-0.6240160,-0.6227878,-0.6215580,-0.6203268,-0.6190939,-0.6178596,-0.6166238,-0.6153864,-0.6141475,-0.6129071,-0.6116651,-0.6104217,-0.6091767,-0.6079303,-0.6066824,-0.6054329,-0.6041820,-0.6029295,-0.6016756,-0.6004202,-0.5991633,-0.5979050,-0.5966451,-0.5953838,-0.5941211,-0.5928568,-0.5915911,-0.5903239,-0.5890553,-0.5877853,-0.5865137,-0.5852408,-0.5839663,-0.5826905,-0.5814132,-0.5801345,-0.5788543,-0.5775727,-0.5762897,-0.5750053,-0.5737194,-0.5724321,-0.5711434,-0.5698533,-0.5685619,-0.5672689,-0.5659746,-0.5646790,-0.5633819,-0.5620834,-0.5607835,-0.5594823,-0.5581796,-0.5568756,-0.5555702,-0.5542635,-0.5529554,-0.5516459,-0.5503350,-0.5490228,-0.5477093,-0.5463943,-0.5450781,-0.5437605,-0.5424415,-0.5411213,-0.5397996,-0.5384767,-0.5371524,-0.5358268,-0.5344999,-0.5331716,-0.5318421,-0.5305112,-0.5291790,-0.5278455,-0.5265107,-0.5251746,-0.5238372,-0.5224986,-0.5211586,-0.5198173,-0.5184748,-0.5171310,-0.5157859,-0.5144395,-0.5130919,-0.5117430,-0.5103928,-0.5090414,-0.5076887,-0.5063348,-0.5049796,-0.5036232,-0.5022655,-0.5009066,-0.4995465,-0.4981851,-0.4968225,-0.4954587,-0.4940936,-0.4927273,-0.4913599,-0.4899912,-0.4886212,-0.4872501,-0.4858778,-0.4845043,-0.4831296,-0.4817537,-0.4803766,-0.4789983,-0.4776188,-0.4762382,-0.4748564,-0.4734734,-0.4720893,-0.4707039,-0.4693175,-0.4679298,-0.4665410,-0.4651511,-0.4637600,-0.4623678,-0.4609744,-0.4595799,-0.4581842,-0.4567874,-0.4553895,-0.4539905,-0.4525904,-0.4511891,-0.4497867,-0.4483832,-0.4469786,-0.4455729,-0.4441661,-0.4427582,-0.4413492,-0.4399392,-0.4385280,-0.4371158,-0.4357024,-0.4342880,-0.4328726,-0.4314560,-0.4300384,-0.4286198,-0.4272001,-0.4257793,-0.4243575,-0.4229346,-0.4215107,-0.4200857,-0.4186597,-0.4172327,-0.4158047,-0.4143756,-0.4129455,-0.4115144,-0.4100822,-0.4086491,-0.4072149,-0.4057798,-0.4043436,-0.4029064,-0.4014683,-0.4000291,-0.3985890,-0.3971479,-0.3957058,-0.3942627,-0.3928187,-0.3913737,-0.3899277,-0.3884807,-0.3870328,-0.3855840,-0.3841342,-0.3826834,-0.3812317,-0.3797791,-0.3783255,-0.3768710,-0.3754156,-0.3739592,-0.3725019,-0.3710437,-0.3695846,-0.3681246,-0.3666636,-0.3652018,-0.3637390,-0.3622754,-0.3608108,-0.3593454,-0.3578791,-0.3564119,-0.3549438,-0.3534748,-0.3520050,-0.3505343,-0.3490628,-0.3475903,-0.3461171,-0.3446429,-0.3431679,-0.3416921,-0.3402154,-0.3387379,-0.3372596,-0.3357804,-0.3343004,-0.3328195,-0.3313379,-0.3298554,-0.3283721,-0.3268880,-0.3254031,-0.3239174,-0.3224309,-0.3209436,-0.3194555,-0.3179666,-0.3164770,-0.3149865,-0.3134953,-0.3120033,-0.3105105,-0.3090170,-0.3075227,-0.3060276,-0.3045318,-0.3030353,-0.3015380,-0.3000399,-0.2985411,-0.2970416,-0.2955413,-0.2940403,-0.2925386,-0.2910362,-0.2895330,-0.2880291,-0.2865246,-0.2850193,-0.2835133,-0.2820066,-0.2804992,-0.2789911,-0.2774823,-0.2759729,-0.2744627,-0.2729519,-0.2714404,-0.2699283,-0.2684155,-0.2669020,-0.2653878,-0.2638730,-0.2623576,-0.2608415,-0.2593248,-0.2578074,-0.2562894,-0.2547707,-0.2532514,-0.2517315,-0.2502110,-0.2486899,-0.2471681,-0.2456458,-0.2441228,-0.2425992,-0.2410751,-0.2395503,-0.2380249,-0.2364990,-0.2349725,-0.2334454,-0.2319177,-0.2303894,-0.2288606,-0.2273312,-0.2258013,-0.2242708,-0.2227397,-0.2212081,-0.2196759,-0.2181432,-0.2166100,-0.2150762,-0.2135419,-0.2120071,-0.2104718,-0.2089359,-0.2073995,-0.2058626,-0.2043252,-0.2027873,-0.2012489,-0.1997100,-0.1981706,-0.1966307,-0.1950903,-0.1935495,-0.1920081,-0.1904663,-0.1889241,-0.1873813,-0.1858381,-0.1842944,-0.1827503,-0.1812058,-0.1796607,-0.1781153,-0.1765694,-0.1750231,-0.1734763,-0.1719291,-0.1703815,-0.1688334,-0.1672850,-0.1657361,-0.1641868,-0.1626372,-0.1610871,-0.1595366,-0.1579857,-0.1564345,-0.1548828,-0.1533308,-0.1517784,-0.1502256,-0.1486724,-0.1471189,-0.1455650,-0.1440108,-0.1424562,-0.1409012,-0.1393459,-0.1377903,-0.1362343,-0.1346780,-0.1331213,-0.1315644,-0.1300071,-0.1284494,-0.1268915,-0.1253332,-0.1237747,-0.1222158,-0.1206566,-0.1190972,-0.1175374,-0.1159773,-0.1144170,-0.1128564,-0.1112955,-0.1097343,-0.1081729,-0.1066112,-0.1050492,-0.1034869,-0.1019245,-0.1003617,-0.0987987,-0.0972355,-0.0956720,-0.0941083,-0.0925444,-0.0909802,-0.0894158,-0.0878512,-0.0862864,-0.0847213,-0.0831561,-0.0815906,-0.0800250,-0.0784591,-0.0768930,-0.0753268,-0.0737604,-0.0721938,-0.0706270,-0.0690600,-0.0674929,-0.0659256,-0.0643581,-0.0627905,-0.0612227,-0.0596548,-0.0580867,-0.0565185,-0.0549502,-0.0533817,-0.0518131,-0.0502443,-0.0486754,-0.0471065,-0.0455373,-0.0439681,-0.0423988,-0.0408294,-0.0392598,-0.0376902,-0.0361205,-0.0345506,-0.0329807,-0.0314108,-0.0298407,-0.0282706,-0.0267004,-0.0251301,-0.0235598,-0.0219894,-0.0204189,-0.0188484,-0.0172779,-0.0157073,-0.0141367,-0.0125660,-0.0109954,-0.0094246,-0.0078539,-0.0062831,-0.0047124,-0.0031416,-0.0015708]; +lime.math.TrigTable.cos_ = [1.0000000,0.9999988,0.9999951,0.9999889,0.9999803,0.9999692,0.9999556,0.9999395,0.9999210,0.9999001,0.9998766,0.9998507,0.9998224,0.9997915,0.9997582,0.9997224,0.9996842,0.9996435,0.9996003,0.9995547,0.9995066,0.9994560,0.9994029,0.9993474,0.9992895,0.9992290,0.9991661,0.9991008,0.9990329,0.9989626,0.9988899,0.9988146,0.9987370,0.9986568,0.9985742,0.9984891,0.9984016,0.9983115,0.9982191,0.9981241,0.9980267,0.9979269,0.9978245,0.9977198,0.9976125,0.9975028,0.9973906,0.9972760,0.9971589,0.9970393,0.9969173,0.9967929,0.9966659,0.9965365,0.9964047,0.9962704,0.9961336,0.9959944,0.9958527,0.9957086,0.9955620,0.9954129,0.9952614,0.9951074,0.9949510,0.9947921,0.9946308,0.9944670,0.9943008,0.9941321,0.9939610,0.9937874,0.9936113,0.9934328,0.9932519,0.9930685,0.9928826,0.9926943,0.9925036,0.9923104,0.9921147,0.9919166,0.9917161,0.9915131,0.9913076,0.9910997,0.9908894,0.9906766,0.9904614,0.9902438,0.9900237,0.9898011,0.9895761,0.9893487,0.9891188,0.9888865,0.9886517,0.9884146,0.9881749,0.9879328,0.9876883,0.9874414,0.9871920,0.9869402,0.9866859,0.9864293,0.9861701,0.9859086,0.9856446,0.9853782,0.9851093,0.9848380,0.9845643,0.9842882,0.9840096,0.9837286,0.9834452,0.9831594,0.9828711,0.9825804,0.9822873,0.9819917,0.9816937,0.9813933,0.9810905,0.9807853,0.9804776,0.9801675,0.9798551,0.9795401,0.9792228,0.9789031,0.9785809,0.9782563,0.9779293,0.9775999,0.9772681,0.9769339,0.9765973,0.9762582,0.9759168,0.9755729,0.9752266,0.9748780,0.9745269,0.9741734,0.9738175,0.9734592,0.9730985,0.9727354,0.9723699,0.9720020,0.9716317,0.9712590,0.9708840,0.9705065,0.9701266,0.9697443,0.9693597,0.9689726,0.9685832,0.9681913,0.9677971,0.9674005,0.9670015,0.9666001,0.9661963,0.9657902,0.9653816,0.9649707,0.9645574,0.9641417,0.9637237,0.9633032,0.9628804,0.9624552,0.9620277,0.9615977,0.9611654,0.9607307,0.9602937,0.9598543,0.9594125,0.9589683,0.9585218,0.9580729,0.9576216,0.9571680,0.9567121,0.9562537,0.9557930,0.9553300,0.9548645,0.9543968,0.9539267,0.9534542,0.9529793,0.9525022,0.9520226,0.9515407,0.9510565,0.9505699,0.9500810,0.9495898,0.9490961,0.9486002,0.9481019,0.9476013,0.9470983,0.9465930,0.9460854,0.9455754,0.9450631,0.9445484,0.9440315,0.9435122,0.9429905,0.9424666,0.9419403,0.9414117,0.9408808,0.9403475,0.9398120,0.9392741,0.9387339,0.9381913,0.9376465,0.9370993,0.9365499,0.9359981,0.9354440,0.9348876,0.9343289,0.9337679,0.9332046,0.9326390,0.9320711,0.9315009,0.9309284,0.9303536,0.9297765,0.9291971,0.9286154,0.9280314,0.9274452,0.9268566,0.9262658,0.9256726,0.9250772,0.9244795,0.9238795,0.9232773,0.9226727,0.9220659,0.9214568,0.9208455,0.9202318,0.9196159,0.9189978,0.9183773,0.9177546,0.9171297,0.9165024,0.9158729,0.9152412,0.9146072,0.9139709,0.9133324,0.9126916,0.9120486,0.9114033,0.9107557,0.9101060,0.9094539,0.9087997,0.9081432,0.9074844,0.9068234,0.9061602,0.9054947,0.9048271,0.9041571,0.9034850,0.9028106,0.9021340,0.9014551,0.9007741,0.9000908,0.8994053,0.8987175,0.8980276,0.8973354,0.8966410,0.8959444,0.8952456,0.8945446,0.8938414,0.8931360,0.8924284,0.8917186,0.8910065,0.8902923,0.8895759,0.8888573,0.8881364,0.8874134,0.8866883,0.8859609,0.8852313,0.8844996,0.8837656,0.8830295,0.8822912,0.8815508,0.8808081,0.8800633,0.8793163,0.8785672,0.8778158,0.8770623,0.8763067,0.8755489,0.8747889,0.8740267,0.8732625,0.8724960,0.8717274,0.8709567,0.8701838,0.8694087,0.8686315,0.8678522,0.8670707,0.8662871,0.8655013,0.8647134,0.8639234,0.8631313,0.8623370,0.8615406,0.8607420,0.8599414,0.8591386,0.8583337,0.8575267,0.8567175,0.8559063,0.8550929,0.8542774,0.8534599,0.8526402,0.8518184,0.8509945,0.8501685,0.8493404,0.8485102,0.8476779,0.8468436,0.8460071,0.8451686,0.8443279,0.8434852,0.8426404,0.8417935,0.8409446,0.8400936,0.8392405,0.8383853,0.8375280,0.8366687,0.8358074,0.8349439,0.8340784,0.8332109,0.8323413,0.8314696,0.8305959,0.8297201,0.8288423,0.8279625,0.8270806,0.8261966,0.8253107,0.8244226,0.8235326,0.8226405,0.8217464,0.8208503,0.8199521,0.8190519,0.8181497,0.8172455,0.8163393,0.8154310,0.8145207,0.8136084,0.8126942,0.8117779,0.8108596,0.8099393,0.8090170,0.8080927,0.8071664,0.8062381,0.8053079,0.8043756,0.8034414,0.8025052,0.8015670,0.8006268,0.7996847,0.7987405,0.7977944,0.7968464,0.7958963,0.7949444,0.7939904,0.7930345,0.7920766,0.7911168,0.7901550,0.7891913,0.7882256,0.7872580,0.7862884,0.7853169,0.7843435,0.7833681,0.7823908,0.7814116,0.7804304,0.7794473,0.7784623,0.7774754,0.7764865,0.7754957,0.7745031,0.7735085,0.7725120,0.7715136,0.7705132,0.7695110,0.7685069,0.7675009,0.7664930,0.7654832,0.7644715,0.7634580,0.7624425,0.7614252,0.7604060,0.7593849,0.7583619,0.7573371,0.7563104,0.7552818,0.7542514,0.7532191,0.7521849,0.7511489,0.7501111,0.7490714,0.7480298,0.7469864,0.7459411,0.7448941,0.7438451,0.7427944,0.7417418,0.7406873,0.7396311,0.7385730,0.7375131,0.7364514,0.7353879,0.7343225,0.7332553,0.7321864,0.7311156,0.7300430,0.7289686,0.7278924,0.7268145,0.7257347,0.7246531,0.7235698,0.7224846,0.7213977,0.7203090,0.7192185,0.7181263,0.7170323,0.7159365,0.7148389,0.7137396,0.7126385,0.7115357,0.7104311,0.7093247,0.7082166,0.7071068,0.7059952,0.7048819,0.7037668,0.7026500,0.7015314,0.7004112,0.6992891,0.6981654,0.6970400,0.6959128,0.6947839,0.6936533,0.6925210,0.6913870,0.6902512,0.6891138,0.6879747,0.6868338,0.6856913,0.6845471,0.6834012,0.6822536,0.6811043,0.6799534,0.6788007,0.6776464,0.6764905,0.6753328,0.6741735,0.6730125,0.6718499,0.6706856,0.6695196,0.6683520,0.6671828,0.6660119,0.6648393,0.6636651,0.6624893,0.6613119,0.6601328,0.6589521,0.6577697,0.6565858,0.6554002,0.6542130,0.6530242,0.6518337,0.6506417,0.6494480,0.6482528,0.6470560,0.6458575,0.6446575,0.6434559,0.6422527,0.6410479,0.6398415,0.6386335,0.6374240,0.6362129,0.6350002,0.6337860,0.6325702,0.6313528,0.6301339,0.6289134,0.6276914,0.6264678,0.6252427,0.6240160,0.6227878,0.6215580,0.6203268,0.6190939,0.6178596,0.6166238,0.6153864,0.6141475,0.6129071,0.6116651,0.6104217,0.6091767,0.6079303,0.6066824,0.6054329,0.6041820,0.6029295,0.6016756,0.6004202,0.5991633,0.5979050,0.5966451,0.5953838,0.5941211,0.5928568,0.5915911,0.5903239,0.5890553,0.5877853,0.5865137,0.5852408,0.5839663,0.5826905,0.5814132,0.5801345,0.5788543,0.5775727,0.5762897,0.5750053,0.5737194,0.5724321,0.5711434,0.5698533,0.5685619,0.5672689,0.5659746,0.5646790,0.5633819,0.5620834,0.5607835,0.5594823,0.5581796,0.5568756,0.5555702,0.5542635,0.5529554,0.5516459,0.5503350,0.5490228,0.5477093,0.5463943,0.5450781,0.5437605,0.5424415,0.5411213,0.5397996,0.5384767,0.5371524,0.5358268,0.5344999,0.5331716,0.5318421,0.5305112,0.5291790,0.5278455,0.5265107,0.5251746,0.5238372,0.5224986,0.5211586,0.5198173,0.5184748,0.5171310,0.5157859,0.5144395,0.5130919,0.5117430,0.5103928,0.5090414,0.5076887,0.5063348,0.5049796,0.5036232,0.5022655,0.5009066,0.4995465,0.4981851,0.4968225,0.4954587,0.4940936,0.4927273,0.4913599,0.4899912,0.4886212,0.4872501,0.4858778,0.4845043,0.4831296,0.4817537,0.4803766,0.4789983,0.4776188,0.4762382,0.4748564,0.4734734,0.4720893,0.4707039,0.4693175,0.4679298,0.4665410,0.4651511,0.4637600,0.4623678,0.4609744,0.4595799,0.4581842,0.4567874,0.4553895,0.4539905,0.4525904,0.4511891,0.4497867,0.4483832,0.4469786,0.4455729,0.4441661,0.4427582,0.4413492,0.4399392,0.4385280,0.4371158,0.4357024,0.4342880,0.4328726,0.4314560,0.4300384,0.4286198,0.4272001,0.4257793,0.4243575,0.4229346,0.4215107,0.4200857,0.4186597,0.4172327,0.4158047,0.4143756,0.4129455,0.4115144,0.4100822,0.4086491,0.4072149,0.4057798,0.4043436,0.4029064,0.4014683,0.4000291,0.3985890,0.3971479,0.3957058,0.3942627,0.3928187,0.3913737,0.3899277,0.3884807,0.3870328,0.3855840,0.3841342,0.3826834,0.3812317,0.3797791,0.3783255,0.3768710,0.3754156,0.3739592,0.3725019,0.3710437,0.3695846,0.3681246,0.3666636,0.3652018,0.3637390,0.3622754,0.3608108,0.3593454,0.3578791,0.3564119,0.3549438,0.3534748,0.3520050,0.3505343,0.3490628,0.3475903,0.3461171,0.3446429,0.3431679,0.3416921,0.3402154,0.3387379,0.3372596,0.3357804,0.3343004,0.3328195,0.3313379,0.3298554,0.3283721,0.3268880,0.3254031,0.3239174,0.3224309,0.3209436,0.3194555,0.3179666,0.3164770,0.3149865,0.3134953,0.3120033,0.3105105,0.3090170,0.3075227,0.3060276,0.3045318,0.3030353,0.3015380,0.3000399,0.2985411,0.2970416,0.2955413,0.2940403,0.2925386,0.2910362,0.2895330,0.2880291,0.2865246,0.2850193,0.2835133,0.2820066,0.2804992,0.2789911,0.2774823,0.2759729,0.2744627,0.2729519,0.2714404,0.2699283,0.2684155,0.2669020,0.2653878,0.2638730,0.2623576,0.2608415,0.2593248,0.2578074,0.2562894,0.2547707,0.2532514,0.2517315,0.2502110,0.2486899,0.2471681,0.2456458,0.2441228,0.2425992,0.2410751,0.2395503,0.2380249,0.2364990,0.2349725,0.2334454,0.2319177,0.2303894,0.2288606,0.2273312,0.2258013,0.2242708,0.2227397,0.2212081,0.2196759,0.2181432,0.2166100,0.2150762,0.2135419,0.2120071,0.2104718,0.2089359,0.2073995,0.2058626,0.2043252,0.2027873,0.2012489,0.1997100,0.1981706,0.1966307,0.1950903,0.1935495,0.1920081,0.1904663,0.1889241,0.1873813,0.1858381,0.1842944,0.1827503,0.1812058,0.1796607,0.1781153,0.1765694,0.1750231,0.1734763,0.1719291,0.1703815,0.1688334,0.1672850,0.1657361,0.1641868,0.1626372,0.1610871,0.1595366,0.1579857,0.1564345,0.1548828,0.1533308,0.1517784,0.1502256,0.1486724,0.1471189,0.1455650,0.1440108,0.1424562,0.1409012,0.1393459,0.1377903,0.1362343,0.1346780,0.1331213,0.1315644,0.1300071,0.1284494,0.1268915,0.1253332,0.1237747,0.1222158,0.1206566,0.1190972,0.1175374,0.1159773,0.1144170,0.1128564,0.1112955,0.1097343,0.1081729,0.1066112,0.1050492,0.1034869,0.1019245,0.1003617,0.0987987,0.0972355,0.0956720,0.0941083,0.0925444,0.0909802,0.0894158,0.0878512,0.0862864,0.0847213,0.0831561,0.0815906,0.0800250,0.0784591,0.0768930,0.0753268,0.0737604,0.0721938,0.0706270,0.0690600,0.0674929,0.0659256,0.0643581,0.0627905,0.0612227,0.0596548,0.0580867,0.0565185,0.0549502,0.0533817,0.0518131,0.0502443,0.0486754,0.0471065,0.0455373,0.0439681,0.0423988,0.0408294,0.0392598,0.0376902,0.0361205,0.0345506,0.0329807,0.0314108,0.0298407,0.0282706,0.0267004,0.0251301,0.0235598,0.0219894,0.0204189,0.0188484,0.0172779,0.0157073,0.0141367,0.0125660,0.0109954,0.0094246,0.0078539,0.0062831,0.0047124,0.0031416,0.0015708,0.0000000,-0.0015708,-0.0031416,-0.0047124,-0.0062831,-0.0078539,-0.0094246,-0.0109954,-0.0125660,-0.0141367,-0.0157073,-0.0172779,-0.0188484,-0.0204189,-0.0219894,-0.0235598,-0.0251301,-0.0267004,-0.0282706,-0.0298407,-0.0314108,-0.0329807,-0.0345506,-0.0361205,-0.0376902,-0.0392598,-0.0408294,-0.0423988,-0.0439681,-0.0455373,-0.0471065,-0.0486754,-0.0502443,-0.0518131,-0.0533817,-0.0549502,-0.0565185,-0.0580867,-0.0596548,-0.0612227,-0.0627905,-0.0643581,-0.0659256,-0.0674929,-0.0690600,-0.0706270,-0.0721938,-0.0737604,-0.0753268,-0.0768930,-0.0784591,-0.0800250,-0.0815906,-0.0831561,-0.0847213,-0.0862864,-0.0878512,-0.0894158,-0.0909802,-0.0925444,-0.0941083,-0.0956720,-0.0972355,-0.0987987,-0.1003617,-0.1019245,-0.1034869,-0.1050492,-0.1066112,-0.1081729,-0.1097343,-0.1112955,-0.1128564,-0.1144170,-0.1159773,-0.1175374,-0.1190972,-0.1206566,-0.1222158,-0.1237747,-0.1253332,-0.1268915,-0.1284494,-0.1300071,-0.1315644,-0.1331213,-0.1346780,-0.1362343,-0.1377903,-0.1393459,-0.1409012,-0.1424562,-0.1440108,-0.1455650,-0.1471189,-0.1486724,-0.1502256,-0.1517784,-0.1533308,-0.1548828,-0.1564345,-0.1579857,-0.1595366,-0.1610871,-0.1626372,-0.1641868,-0.1657361,-0.1672850,-0.1688334,-0.1703815,-0.1719291,-0.1734763,-0.1750231,-0.1765694,-0.1781153,-0.1796607,-0.1812058,-0.1827503,-0.1842944,-0.1858381,-0.1873813,-0.1889241,-0.1904663,-0.1920081,-0.1935495,-0.1950903,-0.1966307,-0.1981706,-0.1997100,-0.2012489,-0.2027873,-0.2043252,-0.2058626,-0.2073995,-0.2089359,-0.2104718,-0.2120071,-0.2135419,-0.2150762,-0.2166100,-0.2181432,-0.2196759,-0.2212081,-0.2227397,-0.2242708,-0.2258013,-0.2273312,-0.2288606,-0.2303894,-0.2319177,-0.2334454,-0.2349725,-0.2364990,-0.2380249,-0.2395503,-0.2410751,-0.2425992,-0.2441228,-0.2456458,-0.2471681,-0.2486899,-0.2502110,-0.2517315,-0.2532514,-0.2547707,-0.2562894,-0.2578074,-0.2593248,-0.2608415,-0.2623576,-0.2638730,-0.2653878,-0.2669020,-0.2684155,-0.2699283,-0.2714404,-0.2729519,-0.2744627,-0.2759729,-0.2774823,-0.2789911,-0.2804992,-0.2820066,-0.2835133,-0.2850193,-0.2865246,-0.2880291,-0.2895330,-0.2910362,-0.2925386,-0.2940403,-0.2955413,-0.2970416,-0.2985411,-0.3000399,-0.3015380,-0.3030353,-0.3045318,-0.3060276,-0.3075227,-0.3090170,-0.3105105,-0.3120033,-0.3134953,-0.3149865,-0.3164770,-0.3179666,-0.3194555,-0.3209436,-0.3224309,-0.3239174,-0.3254031,-0.3268880,-0.3283721,-0.3298554,-0.3313379,-0.3328195,-0.3343004,-0.3357804,-0.3372596,-0.3387379,-0.3402154,-0.3416921,-0.3431679,-0.3446429,-0.3461171,-0.3475903,-0.3490628,-0.3505343,-0.3520050,-0.3534748,-0.3549438,-0.3564119,-0.3578791,-0.3593454,-0.3608108,-0.3622754,-0.3637390,-0.3652018,-0.3666636,-0.3681246,-0.3695846,-0.3710437,-0.3725019,-0.3739592,-0.3754156,-0.3768710,-0.3783255,-0.3797791,-0.3812317,-0.3826834,-0.3841342,-0.3855840,-0.3870328,-0.3884807,-0.3899277,-0.3913737,-0.3928187,-0.3942627,-0.3957058,-0.3971479,-0.3985890,-0.4000291,-0.4014683,-0.4029064,-0.4043436,-0.4057798,-0.4072149,-0.4086491,-0.4100822,-0.4115144,-0.4129455,-0.4143756,-0.4158047,-0.4172327,-0.4186597,-0.4200857,-0.4215107,-0.4229346,-0.4243575,-0.4257793,-0.4272001,-0.4286198,-0.4300384,-0.4314560,-0.4328726,-0.4342880,-0.4357024,-0.4371158,-0.4385280,-0.4399392,-0.4413492,-0.4427582,-0.4441661,-0.4455729,-0.4469786,-0.4483832,-0.4497867,-0.4511891,-0.4525904,-0.4539905,-0.4553895,-0.4567874,-0.4581842,-0.4595799,-0.4609744,-0.4623678,-0.4637600,-0.4651511,-0.4665410,-0.4679298,-0.4693175,-0.4707039,-0.4720893,-0.4734734,-0.4748564,-0.4762382,-0.4776188,-0.4789983,-0.4803766,-0.4817537,-0.4831296,-0.4845043,-0.4858778,-0.4872501,-0.4886212,-0.4899912,-0.4913599,-0.4927273,-0.4940936,-0.4954587,-0.4968225,-0.4981851,-0.4995465,-0.5009066,-0.5022655,-0.5036232,-0.5049796,-0.5063348,-0.5076887,-0.5090414,-0.5103928,-0.5117430,-0.5130919,-0.5144395,-0.5157859,-0.5171310,-0.5184748,-0.5198173,-0.5211586,-0.5224986,-0.5238372,-0.5251746,-0.5265107,-0.5278455,-0.5291790,-0.5305112,-0.5318421,-0.5331716,-0.5344999,-0.5358268,-0.5371524,-0.5384767,-0.5397996,-0.5411213,-0.5424415,-0.5437605,-0.5450781,-0.5463943,-0.5477093,-0.5490228,-0.5503350,-0.5516459,-0.5529554,-0.5542635,-0.5555702,-0.5568756,-0.5581796,-0.5594823,-0.5607835,-0.5620834,-0.5633819,-0.5646790,-0.5659746,-0.5672689,-0.5685619,-0.5698533,-0.5711434,-0.5724321,-0.5737194,-0.5750053,-0.5762897,-0.5775727,-0.5788543,-0.5801345,-0.5814132,-0.5826905,-0.5839663,-0.5852408,-0.5865137,-0.5877853,-0.5890553,-0.5903239,-0.5915911,-0.5928568,-0.5941211,-0.5953838,-0.5966451,-0.5979050,-0.5991633,-0.6004202,-0.6016756,-0.6029295,-0.6041820,-0.6054329,-0.6066824,-0.6079303,-0.6091767,-0.6104217,-0.6116651,-0.6129071,-0.6141475,-0.6153864,-0.6166238,-0.6178596,-0.6190939,-0.6203268,-0.6215580,-0.6227878,-0.6240160,-0.6252427,-0.6264678,-0.6276914,-0.6289134,-0.6301339,-0.6313528,-0.6325702,-0.6337860,-0.6350002,-0.6362129,-0.6374240,-0.6386335,-0.6398415,-0.6410479,-0.6422527,-0.6434559,-0.6446575,-0.6458575,-0.6470560,-0.6482528,-0.6494480,-0.6506417,-0.6518337,-0.6530242,-0.6542130,-0.6554002,-0.6565858,-0.6577697,-0.6589521,-0.6601328,-0.6613119,-0.6624893,-0.6636651,-0.6648393,-0.6660119,-0.6671828,-0.6683520,-0.6695196,-0.6706856,-0.6718499,-0.6730125,-0.6741735,-0.6753328,-0.6764905,-0.6776464,-0.6788007,-0.6799534,-0.6811043,-0.6822536,-0.6834012,-0.6845471,-0.6856913,-0.6868338,-0.6879747,-0.6891138,-0.6902512,-0.6913870,-0.6925210,-0.6936533,-0.6947839,-0.6959128,-0.6970400,-0.6981654,-0.6992891,-0.7004112,-0.7015314,-0.7026500,-0.7037668,-0.7048819,-0.7059952,-0.7071068,-0.7082166,-0.7093247,-0.7104311,-0.7115357,-0.7126385,-0.7137396,-0.7148389,-0.7159365,-0.7170323,-0.7181263,-0.7192185,-0.7203090,-0.7213977,-0.7224846,-0.7235698,-0.7246531,-0.7257347,-0.7268145,-0.7278924,-0.7289686,-0.7300430,-0.7311156,-0.7321864,-0.7332553,-0.7343225,-0.7353879,-0.7364514,-0.7375131,-0.7385730,-0.7396311,-0.7406873,-0.7417418,-0.7427944,-0.7438451,-0.7448941,-0.7459411,-0.7469864,-0.7480298,-0.7490714,-0.7501111,-0.7511489,-0.7521849,-0.7532191,-0.7542514,-0.7552818,-0.7563104,-0.7573371,-0.7583619,-0.7593849,-0.7604060,-0.7614252,-0.7624425,-0.7634580,-0.7644715,-0.7654832,-0.7664930,-0.7675009,-0.7685069,-0.7695110,-0.7705132,-0.7715136,-0.7725120,-0.7735085,-0.7745031,-0.7754957,-0.7764865,-0.7774754,-0.7784623,-0.7794473,-0.7804304,-0.7814116,-0.7823908,-0.7833681,-0.7843435,-0.7853169,-0.7862884,-0.7872580,-0.7882256,-0.7891913,-0.7901550,-0.7911168,-0.7920766,-0.7930345,-0.7939904,-0.7949444,-0.7958963,-0.7968464,-0.7977944,-0.7987405,-0.7996847,-0.8006268,-0.8015670,-0.8025052,-0.8034414,-0.8043756,-0.8053079,-0.8062381,-0.8071664,-0.8080927,-0.8090170,-0.8099393,-0.8108596,-0.8117779,-0.8126942,-0.8136084,-0.8145207,-0.8154310,-0.8163393,-0.8172455,-0.8181497,-0.8190519,-0.8199521,-0.8208503,-0.8217464,-0.8226405,-0.8235326,-0.8244226,-0.8253107,-0.8261966,-0.8270806,-0.8279625,-0.8288423,-0.8297201,-0.8305959,-0.8314696,-0.8323413,-0.8332109,-0.8340784,-0.8349439,-0.8358074,-0.8366687,-0.8375280,-0.8383853,-0.8392405,-0.8400936,-0.8409446,-0.8417935,-0.8426404,-0.8434852,-0.8443279,-0.8451686,-0.8460071,-0.8468436,-0.8476779,-0.8485102,-0.8493404,-0.8501685,-0.8509945,-0.8518184,-0.8526402,-0.8534599,-0.8542774,-0.8550929,-0.8559063,-0.8567175,-0.8575267,-0.8583337,-0.8591386,-0.8599414,-0.8607420,-0.8615406,-0.8623370,-0.8631313,-0.8639234,-0.8647134,-0.8655013,-0.8662871,-0.8670707,-0.8678522,-0.8686315,-0.8694087,-0.8701838,-0.8709567,-0.8717274,-0.8724960,-0.8732625,-0.8740267,-0.8747889,-0.8755489,-0.8763067,-0.8770623,-0.8778158,-0.8785672,-0.8793163,-0.8800633,-0.8808081,-0.8815508,-0.8822912,-0.8830295,-0.8837656,-0.8844996,-0.8852313,-0.8859609,-0.8866883,-0.8874134,-0.8881364,-0.8888573,-0.8895759,-0.8902923,-0.8910065,-0.8917186,-0.8924284,-0.8931360,-0.8938414,-0.8945446,-0.8952456,-0.8959444,-0.8966410,-0.8973354,-0.8980276,-0.8987175,-0.8994053,-0.9000908,-0.9007741,-0.9014551,-0.9021340,-0.9028106,-0.9034850,-0.9041571,-0.9048271,-0.9054947,-0.9061602,-0.9068234,-0.9074844,-0.9081432,-0.9087997,-0.9094539,-0.9101060,-0.9107557,-0.9114033,-0.9120486,-0.9126916,-0.9133324,-0.9139709,-0.9146072,-0.9152412,-0.9158729,-0.9165024,-0.9171297,-0.9177546,-0.9183773,-0.9189978,-0.9196159,-0.9202318,-0.9208455,-0.9214568,-0.9220659,-0.9226727,-0.9232773,-0.9238795,-0.9244795,-0.9250772,-0.9256726,-0.9262658,-0.9268566,-0.9274452,-0.9280314,-0.9286154,-0.9291971,-0.9297765,-0.9303536,-0.9309284,-0.9315009,-0.9320711,-0.9326390,-0.9332046,-0.9337679,-0.9343289,-0.9348876,-0.9354440,-0.9359981,-0.9365499,-0.9370993,-0.9376465,-0.9381913,-0.9387339,-0.9392741,-0.9398120,-0.9403475,-0.9408808,-0.9414117,-0.9419403,-0.9424666,-0.9429905,-0.9435122,-0.9440315,-0.9445484,-0.9450631,-0.9455754,-0.9460854,-0.9465930,-0.9470983,-0.9476013,-0.9481019,-0.9486002,-0.9490961,-0.9495898,-0.9500810,-0.9505699,-0.9510565,-0.9515407,-0.9520226,-0.9525022,-0.9529793,-0.9534542,-0.9539267,-0.9543968,-0.9548645,-0.9553300,-0.9557930,-0.9562537,-0.9567121,-0.9571680,-0.9576216,-0.9580729,-0.9585218,-0.9589683,-0.9594125,-0.9598543,-0.9602937,-0.9607307,-0.9611654,-0.9615977,-0.9620277,-0.9624552,-0.9628804,-0.9633032,-0.9637237,-0.9641417,-0.9645574,-0.9649707,-0.9653816,-0.9657902,-0.9661963,-0.9666001,-0.9670015,-0.9674005,-0.9677971,-0.9681913,-0.9685832,-0.9689726,-0.9693597,-0.9697443,-0.9701266,-0.9705065,-0.9708840,-0.9712590,-0.9716317,-0.9720020,-0.9723699,-0.9727354,-0.9730985,-0.9734592,-0.9738175,-0.9741734,-0.9745269,-0.9748780,-0.9752266,-0.9755729,-0.9759168,-0.9762582,-0.9765973,-0.9769339,-0.9772681,-0.9775999,-0.9779293,-0.9782563,-0.9785809,-0.9789031,-0.9792228,-0.9795401,-0.9798551,-0.9801675,-0.9804776,-0.9807853,-0.9810905,-0.9813933,-0.9816937,-0.9819917,-0.9822873,-0.9825804,-0.9828711,-0.9831594,-0.9834452,-0.9837286,-0.9840096,-0.9842882,-0.9845643,-0.9848380,-0.9851093,-0.9853782,-0.9856446,-0.9859086,-0.9861701,-0.9864293,-0.9866859,-0.9869402,-0.9871920,-0.9874414,-0.9876883,-0.9879328,-0.9881749,-0.9884146,-0.9886517,-0.9888865,-0.9891188,-0.9893487,-0.9895761,-0.9898011,-0.9900237,-0.9902438,-0.9904614,-0.9906766,-0.9908894,-0.9910997,-0.9913076,-0.9915131,-0.9917161,-0.9919166,-0.9921147,-0.9923104,-0.9925036,-0.9926943,-0.9928826,-0.9930685,-0.9932519,-0.9934328,-0.9936113,-0.9937874,-0.9939610,-0.9941321,-0.9943008,-0.9944670,-0.9946308,-0.9947921,-0.9949510,-0.9951074,-0.9952614,-0.9954129,-0.9955620,-0.9957086,-0.9958527,-0.9959944,-0.9961336,-0.9962704,-0.9964047,-0.9965365,-0.9966659,-0.9967929,-0.9969173,-0.9970393,-0.9971589,-0.9972760,-0.9973906,-0.9975028,-0.9976125,-0.9977198,-0.9978245,-0.9979269,-0.9980267,-0.9981241,-0.9982191,-0.9983115,-0.9984016,-0.9984891,-0.9985742,-0.9986568,-0.9987370,-0.9988146,-0.9988899,-0.9989626,-0.9990329,-0.9991008,-0.9991661,-0.9992290,-0.9992895,-0.9993474,-0.9994029,-0.9994560,-0.9995066,-0.9995547,-0.9996003,-0.9996435,-0.9996842,-0.9997224,-0.9997582,-0.9997915,-0.9998224,-0.9998507,-0.9998766,-0.9999001,-0.9999210,-0.9999395,-0.9999556,-0.9999692,-0.9999803,-0.9999889,-0.9999951,-0.9999988,-1.0000000,-0.9999988,-0.9999951,-0.9999889,-0.9999803,-0.9999692,-0.9999556,-0.9999395,-0.9999210,-0.9999001,-0.9998766,-0.9998507,-0.9998224,-0.9997915,-0.9997582,-0.9997224,-0.9996842,-0.9996435,-0.9996003,-0.9995547,-0.9995066,-0.9994560,-0.9994029,-0.9993474,-0.9992895,-0.9992290,-0.9991661,-0.9991008,-0.9990329,-0.9989626,-0.9988899,-0.9988146,-0.9987370,-0.9986568,-0.9985742,-0.9984891,-0.9984016,-0.9983115,-0.9982191,-0.9981241,-0.9980267,-0.9979269,-0.9978245,-0.9977198,-0.9976125,-0.9975028,-0.9973906,-0.9972760,-0.9971589,-0.9970393,-0.9969173,-0.9967929,-0.9966659,-0.9965365,-0.9964047,-0.9962704,-0.9961336,-0.9959944,-0.9958527,-0.9957086,-0.9955620,-0.9954129,-0.9952614,-0.9951074,-0.9949510,-0.9947921,-0.9946308,-0.9944670,-0.9943008,-0.9941321,-0.9939610,-0.9937874,-0.9936113,-0.9934328,-0.9932519,-0.9930685,-0.9928826,-0.9926943,-0.9925036,-0.9923104,-0.9921147,-0.9919166,-0.9917161,-0.9915131,-0.9913076,-0.9910997,-0.9908894,-0.9906766,-0.9904614,-0.9902438,-0.9900237,-0.9898011,-0.9895761,-0.9893487,-0.9891188,-0.9888865,-0.9886517,-0.9884146,-0.9881749,-0.9879328,-0.9876883,-0.9874414,-0.9871920,-0.9869402,-0.9866859,-0.9864293,-0.9861701,-0.9859086,-0.9856446,-0.9853782,-0.9851093,-0.9848380,-0.9845643,-0.9842882,-0.9840096,-0.9837286,-0.9834452,-0.9831594,-0.9828711,-0.9825804,-0.9822873,-0.9819917,-0.9816937,-0.9813933,-0.9810905,-0.9807853,-0.9804776,-0.9801675,-0.9798551,-0.9795401,-0.9792228,-0.9789031,-0.9785809,-0.9782563,-0.9779293,-0.9775999,-0.9772681,-0.9769339,-0.9765973,-0.9762582,-0.9759168,-0.9755729,-0.9752266,-0.9748780,-0.9745269,-0.9741734,-0.9738175,-0.9734592,-0.9730985,-0.9727354,-0.9723699,-0.9720020,-0.9716317,-0.9712590,-0.9708840,-0.9705065,-0.9701266,-0.9697443,-0.9693597,-0.9689726,-0.9685832,-0.9681913,-0.9677971,-0.9674005,-0.9670015,-0.9666001,-0.9661963,-0.9657902,-0.9653816,-0.9649707,-0.9645574,-0.9641417,-0.9637237,-0.9633032,-0.9628804,-0.9624552,-0.9620277,-0.9615977,-0.9611654,-0.9607307,-0.9602937,-0.9598543,-0.9594125,-0.9589683,-0.9585218,-0.9580729,-0.9576216,-0.9571680,-0.9567121,-0.9562537,-0.9557930,-0.9553300,-0.9548645,-0.9543968,-0.9539267,-0.9534542,-0.9529793,-0.9525022,-0.9520226,-0.9515407,-0.9510565,-0.9505699,-0.9500810,-0.9495898,-0.9490961,-0.9486002,-0.9481019,-0.9476013,-0.9470983,-0.9465930,-0.9460854,-0.9455754,-0.9450631,-0.9445484,-0.9440315,-0.9435122,-0.9429905,-0.9424666,-0.9419403,-0.9414117,-0.9408808,-0.9403475,-0.9398120,-0.9392741,-0.9387339,-0.9381913,-0.9376465,-0.9370993,-0.9365499,-0.9359981,-0.9354440,-0.9348876,-0.9343289,-0.9337679,-0.9332046,-0.9326390,-0.9320711,-0.9315009,-0.9309284,-0.9303536,-0.9297765,-0.9291971,-0.9286154,-0.9280314,-0.9274452,-0.9268566,-0.9262658,-0.9256726,-0.9250772,-0.9244795,-0.9238795,-0.9232773,-0.9226727,-0.9220659,-0.9214568,-0.9208455,-0.9202318,-0.9196159,-0.9189978,-0.9183773,-0.9177546,-0.9171297,-0.9165024,-0.9158729,-0.9152412,-0.9146072,-0.9139709,-0.9133324,-0.9126916,-0.9120486,-0.9114033,-0.9107557,-0.9101060,-0.9094539,-0.9087997,-0.9081432,-0.9074844,-0.9068234,-0.9061602,-0.9054947,-0.9048271,-0.9041571,-0.9034850,-0.9028106,-0.9021340,-0.9014551,-0.9007741,-0.9000908,-0.8994053,-0.8987175,-0.8980276,-0.8973354,-0.8966410,-0.8959444,-0.8952456,-0.8945446,-0.8938414,-0.8931360,-0.8924284,-0.8917186,-0.8910065,-0.8902923,-0.8895759,-0.8888573,-0.8881364,-0.8874134,-0.8866883,-0.8859609,-0.8852313,-0.8844996,-0.8837656,-0.8830295,-0.8822912,-0.8815508,-0.8808081,-0.8800633,-0.8793163,-0.8785672,-0.8778158,-0.8770623,-0.8763067,-0.8755489,-0.8747889,-0.8740267,-0.8732625,-0.8724960,-0.8717274,-0.8709567,-0.8701838,-0.8694087,-0.8686315,-0.8678522,-0.8670707,-0.8662871,-0.8655013,-0.8647134,-0.8639234,-0.8631313,-0.8623370,-0.8615406,-0.8607420,-0.8599414,-0.8591386,-0.8583337,-0.8575267,-0.8567175,-0.8559063,-0.8550929,-0.8542774,-0.8534599,-0.8526402,-0.8518184,-0.8509945,-0.8501685,-0.8493404,-0.8485102,-0.8476779,-0.8468436,-0.8460071,-0.8451686,-0.8443279,-0.8434852,-0.8426404,-0.8417935,-0.8409446,-0.8400936,-0.8392405,-0.8383853,-0.8375280,-0.8366687,-0.8358074,-0.8349439,-0.8340784,-0.8332109,-0.8323413,-0.8314696,-0.8305959,-0.8297201,-0.8288423,-0.8279625,-0.8270806,-0.8261966,-0.8253107,-0.8244226,-0.8235326,-0.8226405,-0.8217464,-0.8208503,-0.8199521,-0.8190519,-0.8181497,-0.8172455,-0.8163393,-0.8154310,-0.8145207,-0.8136084,-0.8126942,-0.8117779,-0.8108596,-0.8099393,-0.8090170,-0.8080927,-0.8071664,-0.8062381,-0.8053079,-0.8043756,-0.8034414,-0.8025052,-0.8015670,-0.8006268,-0.7996847,-0.7987405,-0.7977944,-0.7968464,-0.7958963,-0.7949444,-0.7939904,-0.7930345,-0.7920766,-0.7911168,-0.7901550,-0.7891913,-0.7882256,-0.7872580,-0.7862884,-0.7853169,-0.7843435,-0.7833681,-0.7823908,-0.7814116,-0.7804304,-0.7794473,-0.7784623,-0.7774754,-0.7764865,-0.7754957,-0.7745031,-0.7735085,-0.7725120,-0.7715136,-0.7705132,-0.7695110,-0.7685069,-0.7675009,-0.7664930,-0.7654832,-0.7644715,-0.7634580,-0.7624425,-0.7614252,-0.7604060,-0.7593849,-0.7583619,-0.7573371,-0.7563104,-0.7552818,-0.7542514,-0.7532191,-0.7521849,-0.7511489,-0.7501111,-0.7490714,-0.7480298,-0.7469864,-0.7459411,-0.7448941,-0.7438451,-0.7427944,-0.7417418,-0.7406873,-0.7396311,-0.7385730,-0.7375131,-0.7364514,-0.7353879,-0.7343225,-0.7332553,-0.7321864,-0.7311156,-0.7300430,-0.7289686,-0.7278924,-0.7268145,-0.7257347,-0.7246531,-0.7235698,-0.7224846,-0.7213977,-0.7203090,-0.7192185,-0.7181263,-0.7170323,-0.7159365,-0.7148389,-0.7137396,-0.7126385,-0.7115357,-0.7104311,-0.7093247,-0.7082166,-0.7071068,-0.7059952,-0.7048819,-0.7037668,-0.7026500,-0.7015314,-0.7004112,-0.6992891,-0.6981654,-0.6970400,-0.6959128,-0.6947839,-0.6936533,-0.6925210,-0.6913870,-0.6902512,-0.6891138,-0.6879747,-0.6868338,-0.6856913,-0.6845471,-0.6834012,-0.6822536,-0.6811043,-0.6799534,-0.6788007,-0.6776464,-0.6764905,-0.6753328,-0.6741735,-0.6730125,-0.6718499,-0.6706856,-0.6695196,-0.6683520,-0.6671828,-0.6660119,-0.6648393,-0.6636651,-0.6624893,-0.6613119,-0.6601328,-0.6589521,-0.6577697,-0.6565858,-0.6554002,-0.6542130,-0.6530242,-0.6518337,-0.6506417,-0.6494480,-0.6482528,-0.6470560,-0.6458575,-0.6446575,-0.6434559,-0.6422527,-0.6410479,-0.6398415,-0.6386335,-0.6374240,-0.6362129,-0.6350002,-0.6337860,-0.6325702,-0.6313528,-0.6301339,-0.6289134,-0.6276914,-0.6264678,-0.6252427,-0.6240160,-0.6227878,-0.6215580,-0.6203268,-0.6190939,-0.6178596,-0.6166238,-0.6153864,-0.6141475,-0.6129071,-0.6116651,-0.6104217,-0.6091767,-0.6079303,-0.6066824,-0.6054329,-0.6041820,-0.6029295,-0.6016756,-0.6004202,-0.5991633,-0.5979050,-0.5966451,-0.5953838,-0.5941211,-0.5928568,-0.5915911,-0.5903239,-0.5890553,-0.5877853,-0.5865137,-0.5852408,-0.5839663,-0.5826905,-0.5814132,-0.5801345,-0.5788543,-0.5775727,-0.5762897,-0.5750053,-0.5737194,-0.5724321,-0.5711434,-0.5698533,-0.5685619,-0.5672689,-0.5659746,-0.5646790,-0.5633819,-0.5620834,-0.5607835,-0.5594823,-0.5581796,-0.5568756,-0.5555702,-0.5542635,-0.5529554,-0.5516459,-0.5503350,-0.5490228,-0.5477093,-0.5463943,-0.5450781,-0.5437605,-0.5424415,-0.5411213,-0.5397996,-0.5384767,-0.5371524,-0.5358268,-0.5344999,-0.5331716,-0.5318421,-0.5305112,-0.5291790,-0.5278455,-0.5265107,-0.5251746,-0.5238372,-0.5224986,-0.5211586,-0.5198173,-0.5184748,-0.5171310,-0.5157859,-0.5144395,-0.5130919,-0.5117430,-0.5103928,-0.5090414,-0.5076887,-0.5063348,-0.5049796,-0.5036232,-0.5022655,-0.5009066,-0.4995465,-0.4981851,-0.4968225,-0.4954587,-0.4940936,-0.4927273,-0.4913599,-0.4899912,-0.4886212,-0.4872501,-0.4858778,-0.4845043,-0.4831296,-0.4817537,-0.4803766,-0.4789983,-0.4776188,-0.4762382,-0.4748564,-0.4734734,-0.4720893,-0.4707039,-0.4693175,-0.4679298,-0.4665410,-0.4651511,-0.4637600,-0.4623678,-0.4609744,-0.4595799,-0.4581842,-0.4567874,-0.4553895,-0.4539905,-0.4525904,-0.4511891,-0.4497867,-0.4483832,-0.4469786,-0.4455729,-0.4441661,-0.4427582,-0.4413492,-0.4399392,-0.4385280,-0.4371158,-0.4357024,-0.4342880,-0.4328726,-0.4314560,-0.4300384,-0.4286198,-0.4272001,-0.4257793,-0.4243575,-0.4229346,-0.4215107,-0.4200857,-0.4186597,-0.4172327,-0.4158047,-0.4143756,-0.4129455,-0.4115144,-0.4100822,-0.4086491,-0.4072149,-0.4057798,-0.4043436,-0.4029064,-0.4014683,-0.4000291,-0.3985890,-0.3971479,-0.3957058,-0.3942627,-0.3928187,-0.3913737,-0.3899277,-0.3884807,-0.3870328,-0.3855840,-0.3841342,-0.3826834,-0.3812317,-0.3797791,-0.3783255,-0.3768710,-0.3754156,-0.3739592,-0.3725019,-0.3710437,-0.3695846,-0.3681246,-0.3666636,-0.3652018,-0.3637390,-0.3622754,-0.3608108,-0.3593454,-0.3578791,-0.3564119,-0.3549438,-0.3534748,-0.3520050,-0.3505343,-0.3490628,-0.3475903,-0.3461171,-0.3446429,-0.3431679,-0.3416921,-0.3402154,-0.3387379,-0.3372596,-0.3357804,-0.3343004,-0.3328195,-0.3313379,-0.3298554,-0.3283721,-0.3268880,-0.3254031,-0.3239174,-0.3224309,-0.3209436,-0.3194555,-0.3179666,-0.3164770,-0.3149865,-0.3134953,-0.3120033,-0.3105105,-0.3090170,-0.3075227,-0.3060276,-0.3045318,-0.3030353,-0.3015380,-0.3000399,-0.2985411,-0.2970416,-0.2955413,-0.2940403,-0.2925386,-0.2910362,-0.2895330,-0.2880291,-0.2865246,-0.2850193,-0.2835133,-0.2820066,-0.2804992,-0.2789911,-0.2774823,-0.2759729,-0.2744627,-0.2729519,-0.2714404,-0.2699283,-0.2684155,-0.2669020,-0.2653878,-0.2638730,-0.2623576,-0.2608415,-0.2593248,-0.2578074,-0.2562894,-0.2547707,-0.2532514,-0.2517315,-0.2502110,-0.2486899,-0.2471681,-0.2456458,-0.2441228,-0.2425992,-0.2410751,-0.2395503,-0.2380249,-0.2364990,-0.2349725,-0.2334454,-0.2319177,-0.2303894,-0.2288606,-0.2273312,-0.2258013,-0.2242708,-0.2227397,-0.2212081,-0.2196759,-0.2181432,-0.2166100,-0.2150762,-0.2135419,-0.2120071,-0.2104718,-0.2089359,-0.2073995,-0.2058626,-0.2043252,-0.2027873,-0.2012489,-0.1997100,-0.1981706,-0.1966307,-0.1950903,-0.1935495,-0.1920081,-0.1904663,-0.1889241,-0.1873813,-0.1858381,-0.1842944,-0.1827503,-0.1812058,-0.1796607,-0.1781153,-0.1765694,-0.1750231,-0.1734763,-0.1719291,-0.1703815,-0.1688334,-0.1672850,-0.1657361,-0.1641868,-0.1626372,-0.1610871,-0.1595366,-0.1579857,-0.1564345,-0.1548828,-0.1533308,-0.1517784,-0.1502256,-0.1486724,-0.1471189,-0.1455650,-0.1440108,-0.1424562,-0.1409012,-0.1393459,-0.1377903,-0.1362343,-0.1346780,-0.1331213,-0.1315644,-0.1300071,-0.1284494,-0.1268915,-0.1253332,-0.1237747,-0.1222158,-0.1206566,-0.1190972,-0.1175374,-0.1159773,-0.1144170,-0.1128564,-0.1112955,-0.1097343,-0.1081729,-0.1066112,-0.1050492,-0.1034869,-0.1019245,-0.1003617,-0.0987987,-0.0972355,-0.0956720,-0.0941083,-0.0925444,-0.0909802,-0.0894158,-0.0878512,-0.0862864,-0.0847213,-0.0831561,-0.0815906,-0.0800250,-0.0784591,-0.0768930,-0.0753268,-0.0737604,-0.0721938,-0.0706270,-0.0690600,-0.0674929,-0.0659256,-0.0643581,-0.0627905,-0.0612227,-0.0596548,-0.0580867,-0.0565185,-0.0549502,-0.0533817,-0.0518131,-0.0502443,-0.0486754,-0.0471065,-0.0455373,-0.0439681,-0.0423988,-0.0408294,-0.0392598,-0.0376902,-0.0361205,-0.0345506,-0.0329807,-0.0314108,-0.0298407,-0.0282706,-0.0267004,-0.0251301,-0.0235598,-0.0219894,-0.0204189,-0.0188484,-0.0172779,-0.0157073,-0.0141367,-0.0125660,-0.0109954,-0.0094246,-0.0078539,-0.0062831,-0.0047124,-0.0031416,-0.0015708,-0.0000000,0.0015708,0.0031416,0.0047124,0.0062831,0.0078539,0.0094246,0.0109954,0.0125660,0.0141367,0.0157073,0.0172779,0.0188484,0.0204189,0.0219894,0.0235598,0.0251301,0.0267004,0.0282706,0.0298407,0.0314108,0.0329807,0.0345506,0.0361205,0.0376902,0.0392598,0.0408294,0.0423988,0.0439681,0.0455373,0.0471065,0.0486754,0.0502443,0.0518131,0.0533817,0.0549502,0.0565185,0.0580867,0.0596548,0.0612227,0.0627905,0.0643581,0.0659256,0.0674929,0.0690600,0.0706270,0.0721938,0.0737604,0.0753268,0.0768930,0.0784591,0.0800250,0.0815906,0.0831561,0.0847213,0.0862864,0.0878512,0.0894158,0.0909802,0.0925444,0.0941083,0.0956720,0.0972355,0.0987987,0.1003617,0.1019245,0.1034869,0.1050492,0.1066112,0.1081729,0.1097343,0.1112955,0.1128564,0.1144170,0.1159773,0.1175374,0.1190972,0.1206566,0.1222158,0.1237747,0.1253332,0.1268915,0.1284494,0.1300071,0.1315644,0.1331213,0.1346780,0.1362343,0.1377903,0.1393459,0.1409012,0.1424562,0.1440108,0.1455650,0.1471189,0.1486724,0.1502256,0.1517784,0.1533308,0.1548828,0.1564345,0.1579857,0.1595366,0.1610871,0.1626372,0.1641868,0.1657361,0.1672850,0.1688334,0.1703815,0.1719291,0.1734763,0.1750231,0.1765694,0.1781153,0.1796607,0.1812058,0.1827503,0.1842944,0.1858381,0.1873813,0.1889241,0.1904663,0.1920081,0.1935495,0.1950903,0.1966307,0.1981706,0.1997100,0.2012489,0.2027873,0.2043252,0.2058626,0.2073995,0.2089359,0.2104718,0.2120071,0.2135419,0.2150762,0.2166100,0.2181432,0.2196759,0.2212081,0.2227397,0.2242708,0.2258013,0.2273312,0.2288606,0.2303894,0.2319177,0.2334454,0.2349725,0.2364990,0.2380249,0.2395503,0.2410751,0.2425992,0.2441228,0.2456458,0.2471681,0.2486899,0.2502110,0.2517315,0.2532514,0.2547707,0.2562894,0.2578074,0.2593248,0.2608415,0.2623576,0.2638730,0.2653878,0.2669020,0.2684155,0.2699283,0.2714404,0.2729519,0.2744627,0.2759729,0.2774823,0.2789911,0.2804992,0.2820066,0.2835133,0.2850193,0.2865246,0.2880291,0.2895330,0.2910362,0.2925386,0.2940403,0.2955413,0.2970416,0.2985411,0.3000399,0.3015380,0.3030353,0.3045318,0.3060276,0.3075227,0.3090170,0.3105105,0.3120033,0.3134953,0.3149865,0.3164770,0.3179666,0.3194555,0.3209436,0.3224309,0.3239174,0.3254031,0.3268880,0.3283721,0.3298554,0.3313379,0.3328195,0.3343004,0.3357804,0.3372596,0.3387379,0.3402154,0.3416921,0.3431679,0.3446429,0.3461171,0.3475903,0.3490628,0.3505343,0.3520050,0.3534748,0.3549438,0.3564119,0.3578791,0.3593454,0.3608108,0.3622754,0.3637390,0.3652018,0.3666636,0.3681246,0.3695846,0.3710437,0.3725019,0.3739592,0.3754156,0.3768710,0.3783255,0.3797791,0.3812317,0.3826834,0.3841342,0.3855840,0.3870328,0.3884807,0.3899277,0.3913737,0.3928187,0.3942627,0.3957058,0.3971479,0.3985890,0.4000291,0.4014683,0.4029064,0.4043436,0.4057798,0.4072149,0.4086491,0.4100822,0.4115144,0.4129455,0.4143756,0.4158047,0.4172327,0.4186597,0.4200857,0.4215107,0.4229346,0.4243575,0.4257793,0.4272001,0.4286198,0.4300384,0.4314560,0.4328726,0.4342880,0.4357024,0.4371158,0.4385280,0.4399392,0.4413492,0.4427582,0.4441661,0.4455729,0.4469786,0.4483832,0.4497867,0.4511891,0.4525904,0.4539905,0.4553895,0.4567874,0.4581842,0.4595799,0.4609744,0.4623678,0.4637600,0.4651511,0.4665410,0.4679298,0.4693175,0.4707039,0.4720893,0.4734734,0.4748564,0.4762382,0.4776188,0.4789983,0.4803766,0.4817537,0.4831296,0.4845043,0.4858778,0.4872501,0.4886212,0.4899912,0.4913599,0.4927273,0.4940936,0.4954587,0.4968225,0.4981851,0.4995465,0.5009066,0.5022655,0.5036232,0.5049796,0.5063348,0.5076887,0.5090414,0.5103928,0.5117430,0.5130919,0.5144395,0.5157859,0.5171310,0.5184748,0.5198173,0.5211586,0.5224986,0.5238372,0.5251746,0.5265107,0.5278455,0.5291790,0.5305112,0.5318421,0.5331716,0.5344999,0.5358268,0.5371524,0.5384767,0.5397996,0.5411213,0.5424415,0.5437605,0.5450781,0.5463943,0.5477093,0.5490228,0.5503350,0.5516459,0.5529554,0.5542635,0.5555702,0.5568756,0.5581796,0.5594823,0.5607835,0.5620834,0.5633819,0.5646790,0.5659746,0.5672689,0.5685619,0.5698533,0.5711434,0.5724321,0.5737194,0.5750053,0.5762897,0.5775727,0.5788543,0.5801345,0.5814132,0.5826905,0.5839663,0.5852408,0.5865137,0.5877853,0.5890553,0.5903239,0.5915911,0.5928568,0.5941211,0.5953838,0.5966451,0.5979050,0.5991633,0.6004202,0.6016756,0.6029295,0.6041820,0.6054329,0.6066824,0.6079303,0.6091767,0.6104217,0.6116651,0.6129071,0.6141475,0.6153864,0.6166238,0.6178596,0.6190939,0.6203268,0.6215580,0.6227878,0.6240160,0.6252427,0.6264678,0.6276914,0.6289134,0.6301339,0.6313528,0.6325702,0.6337860,0.6350002,0.6362129,0.6374240,0.6386335,0.6398415,0.6410479,0.6422527,0.6434559,0.6446575,0.6458575,0.6470560,0.6482528,0.6494480,0.6506417,0.6518337,0.6530242,0.6542130,0.6554002,0.6565858,0.6577697,0.6589521,0.6601328,0.6613119,0.6624893,0.6636651,0.6648393,0.6660119,0.6671828,0.6683520,0.6695196,0.6706856,0.6718499,0.6730125,0.6741735,0.6753328,0.6764905,0.6776464,0.6788007,0.6799534,0.6811043,0.6822536,0.6834012,0.6845471,0.6856913,0.6868338,0.6879747,0.6891138,0.6902512,0.6913870,0.6925210,0.6936533,0.6947839,0.6959128,0.6970400,0.6981654,0.6992891,0.7004112,0.7015314,0.7026500,0.7037668,0.7048819,0.7059952,0.7071068,0.7082166,0.7093247,0.7104311,0.7115357,0.7126385,0.7137396,0.7148389,0.7159365,0.7170323,0.7181263,0.7192185,0.7203090,0.7213977,0.7224846,0.7235698,0.7246531,0.7257347,0.7268145,0.7278924,0.7289686,0.7300430,0.7311156,0.7321864,0.7332553,0.7343225,0.7353879,0.7364514,0.7375131,0.7385730,0.7396311,0.7406873,0.7417418,0.7427944,0.7438451,0.7448941,0.7459411,0.7469864,0.7480298,0.7490714,0.7501111,0.7511489,0.7521849,0.7532191,0.7542514,0.7552818,0.7563104,0.7573371,0.7583619,0.7593849,0.7604060,0.7614252,0.7624425,0.7634580,0.7644715,0.7654832,0.7664930,0.7675009,0.7685069,0.7695110,0.7705132,0.7715136,0.7725120,0.7735085,0.7745031,0.7754957,0.7764865,0.7774754,0.7784623,0.7794473,0.7804304,0.7814116,0.7823908,0.7833681,0.7843435,0.7853169,0.7862884,0.7872580,0.7882256,0.7891913,0.7901550,0.7911168,0.7920766,0.7930345,0.7939904,0.7949444,0.7958963,0.7968464,0.7977944,0.7987405,0.7996847,0.8006268,0.8015670,0.8025052,0.8034414,0.8043756,0.8053079,0.8062381,0.8071664,0.8080927,0.8090170,0.8099393,0.8108596,0.8117779,0.8126942,0.8136084,0.8145207,0.8154310,0.8163393,0.8172455,0.8181497,0.8190519,0.8199521,0.8208503,0.8217464,0.8226405,0.8235326,0.8244226,0.8253107,0.8261966,0.8270806,0.8279625,0.8288423,0.8297201,0.8305959,0.8314696,0.8323413,0.8332109,0.8340784,0.8349439,0.8358074,0.8366687,0.8375280,0.8383853,0.8392405,0.8400936,0.8409446,0.8417935,0.8426404,0.8434852,0.8443279,0.8451686,0.8460071,0.8468436,0.8476779,0.8485102,0.8493404,0.8501685,0.8509945,0.8518184,0.8526402,0.8534599,0.8542774,0.8550929,0.8559063,0.8567175,0.8575267,0.8583337,0.8591386,0.8599414,0.8607420,0.8615406,0.8623370,0.8631313,0.8639234,0.8647134,0.8655013,0.8662871,0.8670707,0.8678522,0.8686315,0.8694087,0.8701838,0.8709567,0.8717274,0.8724960,0.8732625,0.8740267,0.8747889,0.8755489,0.8763067,0.8770623,0.8778158,0.8785672,0.8793163,0.8800633,0.8808081,0.8815508,0.8822912,0.8830295,0.8837656,0.8844996,0.8852313,0.8859609,0.8866883,0.8874134,0.8881364,0.8888573,0.8895759,0.8902923,0.8910065,0.8917186,0.8924284,0.8931360,0.8938414,0.8945446,0.8952456,0.8959444,0.8966410,0.8973354,0.8980276,0.8987175,0.8994053,0.9000908,0.9007741,0.9014551,0.9021340,0.9028106,0.9034850,0.9041571,0.9048271,0.9054947,0.9061602,0.9068234,0.9074844,0.9081432,0.9087997,0.9094539,0.9101060,0.9107557,0.9114033,0.9120486,0.9126916,0.9133324,0.9139709,0.9146072,0.9152412,0.9158729,0.9165024,0.9171297,0.9177546,0.9183773,0.9189978,0.9196159,0.9202318,0.9208455,0.9214568,0.9220659,0.9226727,0.9232773,0.9238795,0.9244795,0.9250772,0.9256726,0.9262658,0.9268566,0.9274452,0.9280314,0.9286154,0.9291971,0.9297765,0.9303536,0.9309284,0.9315009,0.9320711,0.9326390,0.9332046,0.9337679,0.9343289,0.9348876,0.9354440,0.9359981,0.9365499,0.9370993,0.9376465,0.9381913,0.9387339,0.9392741,0.9398120,0.9403475,0.9408808,0.9414117,0.9419403,0.9424666,0.9429905,0.9435122,0.9440315,0.9445484,0.9450631,0.9455754,0.9460854,0.9465930,0.9470983,0.9476013,0.9481019,0.9486002,0.9490961,0.9495898,0.9500810,0.9505699,0.9510565,0.9515407,0.9520226,0.9525022,0.9529793,0.9534542,0.9539267,0.9543968,0.9548645,0.9553300,0.9557930,0.9562537,0.9567121,0.9571680,0.9576216,0.9580729,0.9585218,0.9589683,0.9594125,0.9598543,0.9602937,0.9607307,0.9611654,0.9615977,0.9620277,0.9624552,0.9628804,0.9633032,0.9637237,0.9641417,0.9645574,0.9649707,0.9653816,0.9657902,0.9661963,0.9666001,0.9670015,0.9674005,0.9677971,0.9681913,0.9685832,0.9689726,0.9693597,0.9697443,0.9701266,0.9705065,0.9708840,0.9712590,0.9716317,0.9720020,0.9723699,0.9727354,0.9730985,0.9734592,0.9738175,0.9741734,0.9745269,0.9748780,0.9752266,0.9755729,0.9759168,0.9762582,0.9765973,0.9769339,0.9772681,0.9775999,0.9779293,0.9782563,0.9785809,0.9789031,0.9792228,0.9795401,0.9798551,0.9801675,0.9804776,0.9807853,0.9810905,0.9813933,0.9816937,0.9819917,0.9822873,0.9825804,0.9828711,0.9831594,0.9834452,0.9837286,0.9840096,0.9842882,0.9845643,0.9848380,0.9851093,0.9853782,0.9856446,0.9859086,0.9861701,0.9864293,0.9866859,0.9869402,0.9871920,0.9874414,0.9876883,0.9879328,0.9881749,0.9884146,0.9886517,0.9888865,0.9891188,0.9893487,0.9895761,0.9898011,0.9900237,0.9902438,0.9904614,0.9906766,0.9908894,0.9910997,0.9913076,0.9915131,0.9917161,0.9919166,0.9921147,0.9923104,0.9925036,0.9926943,0.9928826,0.9930685,0.9932519,0.9934328,0.9936113,0.9937874,0.9939610,0.9941321,0.9943008,0.9944670,0.9946308,0.9947921,0.9949510,0.9951074,0.9952614,0.9954129,0.9955620,0.9957086,0.9958527,0.9959944,0.9961336,0.9962704,0.9964047,0.9965365,0.9966659,0.9967929,0.9969173,0.9970393,0.9971589,0.9972760,0.9973906,0.9975028,0.9976125,0.9977198,0.9978245,0.9979269,0.9980267,0.9981241,0.9982191,0.9983115,0.9984016,0.9984891,0.9985742,0.9986568,0.9987370,0.9988146,0.9988899,0.9989626,0.9990329,0.9991008,0.9991661,0.9992290,0.9992895,0.9993474,0.9994029,0.9994560,0.9995066,0.9995547,0.9996003,0.9996435,0.9996842,0.9997224,0.9997582,0.9997915,0.9998224,0.9998507,0.9998766,0.9999001,0.9999210,0.9999395,0.9999556,0.9999692,0.9999803,0.9999889,0.9999951,0.9999988]; From 3f099277f6949695fb04bc049c0097aa96903e1f Mon Sep 17 00:00:00 2001 From: "Stringer.Sean" Date: Fri, 13 Jun 2014 11:10:01 -0700 Subject: [PATCH 23/23] added comment about why i use toFixed --- lime/src/math/trigtables.js | 1 + 1 file changed, 1 insertion(+) diff --git a/lime/src/math/trigtables.js b/lime/src/math/trigtables.js index 4d12e7b0..ea2f0a03 100644 --- a/lime/src/math/trigtables.js +++ b/lime/src/math/trigtables.js @@ -16,6 +16,7 @@ lime.math.TrigTable.generateNewTable = function () { for (var i = 0; i < len; ++i) { + // --- Use toFixed() here since CSS can't handle exponential numbers sine[i] = Math.sin(curvalue).toFixed(7); cosine[i] = Math.cos(curvalue).toFixed(7);