Skip to content

Instantly share code, notes, and snippets.

@LingDong-
LingDong- / findcontours.js
Last active April 22, 2024 14:53
Finding contours in binary images and approximating polylines. Implements the same algorithms as OpenCV's findContours and approxPolyDP.
/** Finding contours in binary images and approximating polylines.
* Implements the same algorithms as OpenCV's findContours and approxPolyDP.
* <p>
* Made possible with support from The Frank-Ratchye STUDIO For Creative Inquiry
* At Carnegie Mellon University. http://studioforcreativeinquiry.org/
* @author Lingdong Huang
*/
var FindContours = new function(){let that = this;
let N_PIXEL_NEIGHBOR = 8;
@LingDong-
LingDong- / ln.c
Last active April 10, 2024 08:59
simple, fast, accurate natural log approximation without <math.h>
// ln.c
//
// simple, fast, accurate natural log approximation
// when without <math.h>
// featuring * floating point bit level hacking,
// * x=m*2^p => ln(x)=ln(m)+ln(2)p,
// * Remez algorithm
// by Lingdong Huang, 2020. Public domain.
@LingDong-
LingDong- / encode_anim_gif.js
Created September 15, 2023 00:27
minimal animated GIF encoder in 50 lines
// encode_anim_gif.js
// minimal code to make animated GIFs from arrays of pixels
// - no compression
// - supports 127 colors (127 shades of gray by default)
function encode_anim_gif(frames,w,h,delay=5){
let bytes = [];
bytes.push(0x47,0x49,0x46,0x38,0x39,0x61);
bytes.push(w&0xff);
bytes.push((w>>8)&0xff);
@LingDong-
LingDong- / triangulateMTX.ts
Created March 24, 2021 19:15
TypeScript implementation of Mei-Tipper-Xu algorithm for polygon triangulation
/* ===============================================================================
* triangulateMTX.ts
* TypeScript implementation of Mei-Tipper-Xu algorithm for polygon triangulation
* (c) Lingdong Huang 2020 (MIT License)
* =============================================================================== */
namespace triangulateMTX{
export function triangulate(
vertices : Array<[number,number]>,
params : {sliverThreshold? : number,
greedyHeuristic? : boolean,
@LingDong-
LingDong- / npy-rw.js
Last active September 29, 2023 08:46
Read and write .npy (numpy) files in javascript
// npy-rw.js
// READ AND WRITE .NPY (NUMPY) FILES
// Lingdong Huang 2019
// npy specs: https://numpy.org/devdocs/reference/generated/numpy.lib.format.html
// reference: https://gist.github.com/nvictus/88b3b5bfe587d32ac1ab519fd0009607
const is_node = (typeof process !== 'undefined')
var npy = {};
@LingDong-
LingDong- / bsl124.py
Created June 1, 2023 19:59
(minimal) TI MSP430 μC 1,2,4 Family BSL flasher (slau319af)
"""
bsl124.py
(minimal) TI MSP430 1,2,4 Family BSL flasher
using pyserial, works on windows, mac, and linux
- implementation of slau319af.pdf
- programming MSP430 chips via USB-TTL / FTDI / ...
- supports Intel HEX format
- supports F1xx, F2xx, F4xx, G2xx3 chips
@LingDong-
LingDong- / core_midi_synth.mm
Last active May 19, 2023 08:23
a barebones midi synthesizer calling mac's low level API (CoreMIDI and CoreAudio) directly
//
// core_midi_synth.mm
//
// a barebones midi synthesizer demo that calls
// mac's low level API (CoreMIDI and CoreAudio) directly
// (because I can't be bothered to compile other people's libraries)
//
// with code fragments adapted from
// - https://stackoverflow.com/a/7964300
// - https://github.com/thestk/rtmidi
@LingDong-
LingDong- / bpmrw.h
Created April 19, 2023 15:58
tiny .BMP image reader/writer in C99
/*
bmprw.h
tiny .BMP image reader/writer in C99
with no memory allocations
reader supports:
- 1, 4, 8, 24, 32 bit depth, palette / no palette
- RLE4 / RLE8 compression / no compression
@LingDong-
LingDong- / PoissonFill.java
Last active April 13, 2023 07:49
Poisson Filling Shader for Processing(Java)
/* Poisson Filling for Processing
* Made possible with support from The Frank-Ratchye STUDIO For Creative Inquiry
* At Carnegie Mellon University. http://studioforcreativeinquiry.org/
*/
package poissonfill;
import processing.core.*;
import processing.opengl.*;
import java.util.*;
@LingDong-
LingDong- / png_write.js
Last active October 10, 2022 20:06
a bare minimum, non-compressing PNG writer in 80 lines
// a bare minimum, non-compressing PNG writer in 80 lines
//
// - supports gray, gray+A, RGB, RGBA, bit depth: 8 (0-255)
// - uses "non-compressed blocks" of DEFLATE spec
// - writes IHDR, IDAT, IEND -- optional chunks can be
// passed as function argument to be encoded (see example)
//
// reference:
// - https://en.wikipedia.org/wiki/Portable_Network_Graphics
// - https://datatracker.ietf.org/doc/html/rfc1951