parseInt的坑和Matrix矩阵

1.parseInt的坑

parseInt是把字符串转化为整数,有时候我们直接这样使用。

parseInt("12.23");
parseInt("0.00008");
parseInt(0.0000008);

但是,当很小的数时候,比如parseInt(0.0000008);会得到8,这肯定不是我们要的结果,所以需要对数优先判断下是否小于1。

function myparseInt(x){
            var k=parseFloat(x);
            if(k<1){
                return 0;
            }
            return parseInt(x);
        }

2.Matrix矩阵

function Matrix(a, b, c, d, x, y) {
            this.a = (a != null) ? a : 1;
            this.b = b || 0;
            this.c = c || 0;
            this.d = (d != null) ? d : 1;
            this.x = x || 0;
            this.y = y || 0;
        }

        Matrix.temp = new Matrix();

        Matrix.prototype.toString = function() {
            return "matrix(" + this.a + "," + this.b + "," + this.c + "," + this.d + "," + this.x + "," + this.y + ")";
        };

        Matrix.prototype.equals = function(m) {
            if(this.a === m.a && this.b === m.b && this.c === m.c && this.d === m.d && this.x === m.x && this.y === m.y) {
                return true;
            }
            return false;
        };

        Matrix.prototype.identity = function() {
            this.a = 1;
            this.b = 0;
            this.c = 0;
            this.d = 1;
            this.x = 0;
            this.y = 0;
        };

        Matrix.prototype.clone = function() {
            return new Matrix(
                this.a,
                this.b,
                this.c,
                this.d,
                this.x,
                this.y
            );
        };

        Matrix.prototype.copyFrom = function(m) {
            this.a = m.a;
            this.b = m.b;
            this.c = m.c;
            this.d = m.d;
            this.x = m.x;
            this.y = m.y;
        };

        Matrix.prototype.rotate = function(angle) {
            var u = Math.cos(angle);
            var v = Math.sin(angle);

            var temp = this.a;
            this.a = u * this.a - v * this.b;
            this.b = v * temp + u * this.b;
            temp = this.c;
            this.c = u * this.c - v * this.d;
            this.d = v * temp + u * this.d;
            temp = this.x;
            this.x = u * this.x - v * this.y;
            this.y = v * temp + u * this.y;
        };

        Matrix.prototype.translate = function(x, y) {
            this.x += x;
            this.y += y;
        };

        Matrix.prototype.concat = function(m) {
            var a = this.a * m.a;
            var b = 0;
            var c = 0;
            var d = this.d * m.d;
            var x = this.x * m.a + m.x;
            var y = this.y * m.d + m.y;

            if(this.b !== 0 || this.c !== 0 || m.b !== 0 || m.c !== 0) {
                a += this.b * m.c;
                d += this.c * m.b;
                b += this.a * m.b + this.b * m.d;
                c += this.c * m.a + this.d * m.c;
                x += this.y * m.c;
                y += this.x * m.b;
            }

            this.a = a;
            this.b = b;
            this.c = c;
            this.d = d;
            this.x = x;
            this.y = y;
        };

        Matrix.prototype.invert = function() {
            if(this.b === 0 && this.c === 0 && this.a !== 0 && this.d !== 0) {

                this.a = 1 / this.a;
                this.d = 1 / this.d;
                this.b = 0;
                this.c = 0;
                this.x = -this.a * this.x;
                this.y = -this.d * this.y;

            } else {

                var det = this.a * this.d - this.b * this.c;
                if(det === 0) {
                    this.identity();
                    return;
                }
                det = 1 / det;

                var temp = this.a;
                this.a = this.d * det;
                this.b = -this.b * det;
                this.c = -this.c * det;
                this.d = temp * det;

                temp = this.y;
                this.y = -(this.b * this.x + this.d * this.y);
                this.x = -(this.a * this.x + this.c * temp);
            }
        };

        Matrix.prototype.getRotationX = function() {
            return Math.atan2(this.b, this.a);
        };

        Matrix.prototype.getRotationY = function() {
            return Math.atan2(this.c, this.d);
        };

        Matrix.prototype.getTransformedX = function(x, y) {
            return this.x + this.a * x + this.c * y;
        };

        Matrix.prototype.getTransformedY = function(x, y) {
            return this.y + this.d * y + this.b * x;
        };

        Matrix.prototype.scale = function(x, y) {
            this.a *= x;
            this.b *= y;
            this.c *= x;
            this.d *= y;
            this.x *= x;
            this.y *= y;
        };

        Matrix.prototype.resolveFloat = function() {
            var mat = this.clone();
            var r = {};
            r.x = mat.x;
            r.y = mat.y;
            //      mat.x=0;
            //      mat.y=0;
            var hd = mat.getRotationX();
            r.radian = hd;
            var du = hd * 180 / Math.PI;
            if(du < 0) {
                du = du + 360;
            }
            r.rotation = du;
            mat.rotate(-hd);
            r.scaleX = mat.a;
            r.scaleY = mat.d;
            return r;
        };

Matrix矩阵表示:
| a | c | x|
| b | d | y|
| 0 | 0 | 1 |
单位矩阵时 a b c d 为 1,0,0,1

矩阵满足

  1. 乘法结合律: (AB)C=A(BC)
  2. 乘法左分配律:(A+B)C=AC+BC
  3. 乘法右分配律:C(A+B)=CA+CB
  4. 对数乘的结合性k(AB)=(kA)B=A(kB**)
  5. 转置 (AB)T=BTAT

在html显示对象使用矩阵相乘
假如 AB=ab矩阵相等,求其中任意一个矩阵.

ABBT=abBT //同时乘一个BT
A=abBT

ATAB=ATab; ///同时乘一个AT
B=ATab;
同理 a b .所以如下

A=abBT

B=ATab;

a=ABbT

b=aTAB;

其他同理。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,968评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,601评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,220评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,416评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,425评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,144评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,432评论 3 401
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,088评论 0 261
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,586评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,028评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,137评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,783评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,343评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,333评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,559评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,595评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,901评论 2 345

推荐阅读更多精彩内容