{"url":"https://api.github.com/gists/1340727","forks_url":"https://api.github.com/gists/1340727/forks","commits_url":"https://api.github.com/gists/1340727/commits","id":"1340727","node_id":"MDQ6R2lzdDEzNDA3Mjc=","git_pull_url":"https://gist.github.com/1340727.git","git_push_url":"https://gist.github.com/1340727.git","html_url":"https://gist.github.com/mbostock/1340727","files":{"transform.js":{"filename":"transform.js","type":"text/javascript","language":"JavaScript","raw_url":"https://gist.githubusercontent.com/mbostock/1340727/raw/d9b6484ece733bd6ef05d84dcbd2047897218962/transform.js","size":1391,"truncated":false,"content":"d3.transform = function(string) {\n  d3_transformG.setAttribute(\"transform\", string);\n  var m = d3_transformG.transform.baseVal.consolidate().matrix;\n  if (m.a * m.d - m.b * m.c) return new d3_transform(m); // if invertible\n};\n\n// Compute x-scale and normalize the first row.\n// Compute shear and make second row orthogonal to first.\n// Compute y-scale and normalize the second row.\n// Finally, compute the rotation.\nfunction d3_transform(m) {\n  var r0 = [m.a, m.b],\n      r1 = [m.c, m.d],\n      kx = d3_transformNormalize(r0),\n      kz = d3_transformDot(r0, r1),\n      ky = d3_transformNormalize(d3_transformCombine(r1, r0, -kz));\n  this.translate = [m.e, m.f];\n  this.rotate = Math.atan2(m.b, m.a) * d3_transformDegrees;\n  this.scale = [kx, ky];\n  this.skew = kz / ky * d3_transformDegrees;\n};\n\nd3_transform.prototype.toString = function() {\n  return \"translate(\" + this.translate\n      + \")rotate(\" + this.rotate\n      + \")skewX(\" + this.skew\n      + \")scale(\" + this.scale\n      + \")\";\n};\n\nfunction d3_transformDot(a, b) {\n  return a[0] * b[0] + a[1] * b[1];\n}\n\nfunction d3_transformNormalize(a) {\n  var k = Math.sqrt(d3_transformDot(a, a));\n  a[0] /= k;\n  a[1] /= k;\n  return k;\n}\n\nfunction d3_transformCombine(a, b, k) {\n  a[0] += k * b[0];\n  a[1] += k * b[1];\n  return a;\n}\n\nvar d3_transformG = document.createElementNS(d3.ns.prefix.svg, \"g\"),\n    d3_transformDegrees = 180 / Math.PI;\n","encoding":"utf-8"}},"public":true,"created_at":"2011-11-04T23:08:39Z","updated_at":"2018-09-03T07:59:01Z","description":"2D Matrix Decomposition","comments":0,"user":null,"comments_enabled":true,"comments_url":"https://api.github.com/gists/1340727/comments","owner":{"login":"mbostock","id":230541,"node_id":"MDQ6VXNlcjIzMDU0MQ==","avatar_url":"https://avatars.githubusercontent.com/u/230541?v=4","gravatar_id":"","url":"https://api.github.com/users/mbostock","html_url":"https://github.com/mbostock","followers_url":"https://api.github.com/users/mbostock/followers","following_url":"https://api.github.com/users/mbostock/following{/other_user}","gists_url":"https://api.github.com/users/mbostock/gists{/gist_id}","starred_url":"https://api.github.com/users/mbostock/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mbostock/subscriptions","organizations_url":"https://api.github.com/users/mbostock/orgs","repos_url":"https://api.github.com/users/mbostock/repos","events_url":"https://api.github.com/users/mbostock/events{/privacy}","received_events_url":"https://api.github.com/users/mbostock/received_events","type":"User","user_view_type":"public","site_admin":false},"forks":[{"url":"https://api.github.com/gists/627d8f582ada1a1ec14f1fad2746f79a","user":{"login":"dhilip89","id":6188296,"node_id":"MDQ6VXNlcjYxODgyOTY=","avatar_url":"https://avatars.githubusercontent.com/u/6188296?v=4","gravatar_id":"","url":"https://api.github.com/users/dhilip89","html_url":"https://github.com/dhilip89","followers_url":"https://api.github.com/users/dhilip89/followers","following_url":"https://api.github.com/users/dhilip89/following{/other_user}","gists_url":"https://api.github.com/users/dhilip89/gists{/gist_id}","starred_url":"https://api.github.com/users/dhilip89/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dhilip89/subscriptions","organizations_url":"https://api.github.com/users/dhilip89/orgs","repos_url":"https://api.github.com/users/dhilip89/repos","events_url":"https://api.github.com/users/dhilip89/events{/privacy}","received_events_url":"https://api.github.com/users/dhilip89/received_events","type":"User","user_view_type":"public","site_admin":false,"name":"DK Dhilip","company":"@padu-platform","blog":"","location":"Malaysia","email":null,"hireable":null,"bio":null,"twitter_username":null,"public_repos":870,"public_gists":33,"followers":9,"following":1,"created_at":"2013-12-15T03:41:51Z","updated_at":"2026-04-03T03:11:56Z"},"id":"627d8f582ada1a1ec14f1fad2746f79a","created_at":"2018-09-03T07:59:00Z","updated_at":"2018-09-03T07:59:01Z"}],"history":[{"user":{"login":"mbostock","id":230541,"node_id":"MDQ6VXNlcjIzMDU0MQ==","avatar_url":"https://avatars.githubusercontent.com/u/230541?v=4","gravatar_id":"","url":"https://api.github.com/users/mbostock","html_url":"https://github.com/mbostock","followers_url":"https://api.github.com/users/mbostock/followers","following_url":"https://api.github.com/users/mbostock/following{/other_user}","gists_url":"https://api.github.com/users/mbostock/gists{/gist_id}","starred_url":"https://api.github.com/users/mbostock/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mbostock/subscriptions","organizations_url":"https://api.github.com/users/mbostock/orgs","repos_url":"https://api.github.com/users/mbostock/repos","events_url":"https://api.github.com/users/mbostock/events{/privacy}","received_events_url":"https://api.github.com/users/mbostock/received_events","type":"User","user_view_type":"public","site_admin":false},"version":"edc025a2f52abf5bd6df216d735c397c557be051","committed_at":"2011-11-04T23:08:39Z","change_status":{"total":49,"additions":49,"deletions":0},"url":"https://api.github.com/gists/1340727/edc025a2f52abf5bd6df216d735c397c557be051"}],"truncated":false}