Skip to content

Instantly share code, notes, and snippets.

༎ຶ
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<meta name="robots" content="noindex, nofollow">
<meta name="googlebot" content="noindex, nofollow">
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<style>
canvas {
border: 1px solid black;
}
</style>
@BriSeven
BriSeven / decompose-matrix.js
Last active May 23, 2021 15:21
Decompose a 2D transform matrix into [rotate scale rotate translate]
function decomposeMatrix(m) {
var t,r,s,k,E,F,G,H,Q,R,sx,sy,a1,a2,theta,phi,sqrt=Math.sqrt,atan2=Math.atan2;
// http://math.stackexchange.com/questions/861674/decompose-a-2d-arbitrary-transform-into-only-scaling-and-rotation
//
// It works wonderfully! Thanks.
// The input matrix is transposed though,
// so let me spell the solution out.
E=(m[0]+m[3])/2
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>canvas</title>
<style>
canvas {
border: 1px solid black;
}
</style>
hypercard stacks
electronic whole earth catalog
manhole
Time Table of History
myst
Cosmic Osmo and the Worlds Beyond the Mackerel
Spelunx
The Computer Lab's Beyond Cyberpunk (http://www.streettech.com/bcp/BCPgraf/4zones.html)
@BriSeven
BriSeven / Gruntfile.js
Created April 29, 2016 10:06
reusable Gruntfile that loads external JSON.
module.exports = function (grunt) {
function to_entries (object,prefix){
// convert object to array of key/value objects, emulating jq.
// for working around mustache limitation
// for heirarchical objects, flatten
// into key.subkey/value form, until a string, number or boolean is encountered
// this is super convenient for rendering json to shtml variables
var a=[];
define("rgbdiff", [], function () {
function rgbdiff(a, b) {
// Convert RGB to XYZ
function rgbToXyz(tuple) {
var _r = (tuple[0] / 255);
var _g = (tuple[1] / 255);
var _b = (tuple[2] / 255);
if (_r > 0.04045) {
_r = Math.pow(((_r + 0.055) / 1.055), 2.4);
@BriSeven
BriSeven / RLE.js
Last active May 5, 2016 22:30
Run Length Encoding and Decoding for JS number arrays, with Delta Encoding and Delta Decoding.
function RLEencode(array) {
// output an array of values
// consisting of alternating "rips" and "runs"
// a rip begins with a negative count followed by a
// cooresponding number of non-repeating values
//
// a run begins with a positive count, followed by
// the value to be repeated by the count.
var newArray=[];
// integer part of x
function ipart(x) {
return Math.floor(x);
}
function round(x) {
return Math.round(x);
}
// fractional part of x