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;}'; }; diff --git a/lime/demos/roundball/board.js b/lime/demos/roundball/board.js index 5c332142..afe98fd7 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..a5870ac6 100644 --- a/lime/demos/tests/anim1.js +++ b/lime/demos/tests/anim1.js @@ -26,45 +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(100, 100); - 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).setRenderer(lime.Renderer.CANVAS); - layer.appendChild(sprite); + var sprite = new lime.Sprite().setFill(100,0,0).setSize(50, 50).setRenderer(lime.Renderer.CANVAS); + layer.appendChild(sprite); - 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 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.runAction(new lime.animation.Loop(anim).setLimit(5)); + ), 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 anim = new lime.animation.Spawn( - new lime.animation.RotateBy(-90).setDuration(3).enableOptimizations(), - new lime.animation.MoveBy(300, 0).setDuration(3).enableOptimizations() + 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 a2 = new lime.animation.Sequence(anim, anim.reverse()); sprite.runAction(new lime.animation.Loop(a2).setLimit(5)); - // set active scene - test.director.replaceScene(menuscene); + // set active scene + test.director.replaceScene(menuscene); }; 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/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); 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 37174b62..dea193a4 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/helper/style.js b/lime/src/helper/style.js index d03ff85f..e4725929 100644 --- a/lime/src/helper/style.js +++ b/lime/src/helper/style.js @@ -63,119 +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 - * @param {number=} opt_precision Default precision. - */ -lime.style.Transform = function(opt_precision) { - this.values = []; - this.precision = 1; - this.enable3D_ = true; - if (this.opt_precision) { - this.setPrecision(/** @type {number} */ (opt_precision)); - } -}; - -/** - * 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; -}; - -/** - * 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 (this.enable3D_ && (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 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'; - if (this.enable3D_ && (lime.userAgent.CHROME || lime.userAgent.IOS || lime.userAgent.PLAYBOOK)) { - val += ',' + ((opt_tz ? opt_tz : 0) * p) + '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(' '); -}; - /** * Set transform to a DOM element. * @param {Element} el Element to change. @@ -194,6 +81,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/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..ea2f0a03 --- /dev/null +++ b/lime/src/math/trigtables.js @@ -0,0 +1,100 @@ +goog.provide('lime.math.TrigTable'); + +/* + * Not used at runtime...this is only used to generate new tables + */ +lime.math.TrigTable.generateNewTable = 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) { + + // --- Use toFixed() here since CSS can't handle exponential numbers + 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.twoPie_ = 2 * Math.PI; +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! + 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) { + + 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; + } + + 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) { + + if (rad === undefined) { return NaN; } + + var deg = lime.math.TrigTable.radToDeg * rad; + return lime.math.TrigTable.getCosine(deg); +}; + +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]; diff --git a/lime/src/node.js b/lime/src/node.js index cc70a243..1eca40e4 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'); @@ -26,19 +27,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} - */ - this.allow3DCSSTransform_ = true; - /** * Node has been added to DOM tree * @type {boolean} @@ -257,7 +245,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 +269,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 +347,6 @@ lime.Node.prototype.setRotation = function(value) { this.rotation_ = value; - if (this.transitionsActive_[lime.Transition.ROTATION]) return this; - return this.setDirty(lime.Dirty.POSITION); }; @@ -476,28 +461,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 @@ -528,9 +491,9 @@ 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; } @@ -560,9 +523,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; } @@ -615,10 +578,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 +673,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 +698,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