Skip to content

Instantly share code, notes, and snippets.

vec2 rotate(vec2 v, float a) {
float s = sin(a);
float c = cos(a);
mat2 m = mat2(c, s, -s, c);
return m * v;
}
@gregtatum
gregtatum / round.js
Last active July 21, 2016 03:32
Round a corner
const {
dot,
length,
add,
scale,
normalize,
divide,
subtract,
cross,
distance,
@xem
xem / readme.md
Last active January 19, 2026 22:28
Maths & trigonometry cheat sheet for 2D & 3D games

Conventions

  • A = [xA, yA] is a point on the 2D plane. Same for B, C, ...
  • lengths are in any unit (ex: pixels)
  • code snippets are in JavaScript

Degrees to radians

angleRad = angleDeg * Math.PI / 180;

@mattdesl
mattdesl / frag.vert
Created May 17, 2016 21:25
shadow on transparent plane ThreeJS r76
uniform vec3 diffuse;
uniform vec3 emissive;
uniform float opacity;
varying vec3 vLightFront;
#ifdef DOUBLE_SIDED
varying vec3 vLightBack;
var buffer = null,
bufferContext = null;
//null => not yet checked
var multiplyDetected = null;
function isMultiplySupported() {
if (multiplyDetected === null) { //we haven't checked yet
if (!buffer) { //shared buffer...
buffer = document.createElement("canvas");
@paulirish
paulirish / what-forces-layout.md
Last active January 29, 2026 14:20
What forces layout/reflow. The comprehensive list.

What forces layout / reflow

All of the below properties or methods, when requested/called in JavaScript, will trigger the browser to synchronously calculate the style and layout*. This is also called reflow or layout thrashing, and is common performance bottleneck.

Generally, all APIs that synchronously provide layout metrics will trigger forced reflow / layout. Read on for additional cases and details.

Element APIs

Getting box metrics
  • elem.offsetLeft, elem.offsetTop, elem.offsetWidth, elem.offsetHeight, elem.offsetParent
var cushion = .5;
var length = 50;
var dx = point.x - mouse.x;
var dy = point.y - mouse.y;
var da = Math.sqrt(dx * dx + dy * dy);
// Tend à ramener la distance entre les segments à length
var ox = dx / da * length - dx;
var oy = dy / da * length - dy;
@mattdesl
mattdesl / README.md
Last active September 3, 2015 11:44
tiny modules

tiny modules

A common question: why would anyone publish a single-function module?

It might seem odd to have a module with just a single function (examples: clamp, is-dom, is-url, object-assign, point-in-polygon). Sometimes your tests and documentation are longer than the function itself. Let's examine some of the benefits to this approach...

  • a terse and frozen API does not end up with the scope creep or code rot that larger frameworks and "standard libraries" tend to carry.
  • it encourages diversity rather than "this is the one true way" (e.g. robust-point-in-polygon handles edge cases at so
@msimpson
msimpson / scroll-test.html
Last active November 17, 2020 10:09
Mac OSX Inertial Scrolling Buffer (http://jsfiddle.net/n7bk6pb9/1/)
<!doctype html>
<html>
<head>
<title>Scroll Test</title>
<style>
html, body {
overflow: hidden;
width: 100%;
height: 100%;
@floz
floz / gist:53ad2765cc846187cdd3
Created December 18, 2014 18:47
PhotoshopMath.glsl
/*
** Copyright (c) 2012, Romain Dura [email protected]
**
** Permission to use, copy, modify, and/or distribute this software for any
** purpose with or without fee is hereby granted, provided that the above
** copyright notice and this permission notice appear in all copies.
**
** THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
** WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
** MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY