{{ message }}

Instantly share code, notes, and snippets.

# Hartmut Bohnacker bohnacker

Created Sep 3, 2017
Map a value from one range to another
View map.js
 function map(val, low1, high1, low2, high2) { return (val - low1) / (high1 - low1) * (high2 - low2) + low2; }
Last active Sep 4, 2017
Vector utility functions
 /** * Adds two (or more) vectors. * * @function add * @param {Array|Object} vector1 The first vector * @param {Array|Object} vector2 The second vector * @param {Array|Object} [vector3] The third vector, ... * @return {Object} The resulting vector */ function add(v1, v2) {
Last active Dec 20, 2018
Python script to get JSON data from an online source. Seems to work only with Python 2.
View web-api-request.py
 import urllib2 import json opener = urllib2.build_opener() # An object to collect the results result = {'episodes':[]} # Iterate from 1 to 31 for i in range(1, 32):
Last active May 5, 2019
Checks if two lines are crossing and returns the crossing point. There are two modes: if infinite is false, there will be a result only if the lines are crossing between their start and end points. Otherwise the lines will be thought of being infinite.
View crossingPoint.js
 // Checks, if two lines (p1a to p1b) and (p2a to p2b) are crossing. // Points are given as [x, y]. If inifinte1 is true, the first line // will be continued before start and after end points. Same for line 2. // Returns the crossing point as [x, y] or false if there is none. // ATTENTION: this calculation is not completely precice in some cases! function crossingPoint(p1a, p1b, p2a, p2b, infinite1, infinite2) { // vectors from start to end points let d1x = p1b[0] - p1a[0];
Created May 5, 2019
Returns the difference of two angles given in radians. The result is always between -PI and PI.
View angleDifference.js
 // Returns the difference of two angles given in radians. // The result is always between -PI and PI. function angleDifference(angle1, angle2) { const TWO_PI = Math.PI * 2; let a1 = (angle1 % TWO_PI + TWO_PI) % TWO_PI; let a2 = (angle2 % TWO_PI + TWO_PI) % TWO_PI; if (a2 > a1) { let d1 = a2 - a1;
Last active Jul 18, 2019
A javascript function that takes a list of points and calculates a curvy path that passes all these points. See https://hartmut-bohnacker.de/projects/points-to-curve for more information.
View points_to_curve.js
 // Calculates a curve that goes through a number of points. // There are lots of mathematical approaches to do so // (see: https://en.wikipedia.org/wiki/Cubic_Hermite_spline). // The most commonly used seems to be the Catmull–Rom spline. // My approch here is not intended to be a new general // solution to this problem, but it should fit some geometrical // and graphical needs. See // https://hartmut-bohnacker.de/projects/points-to-curve // for more explanation.
Created Jul 18, 2019
This licence applies to all of my public gists
View LICENCE
 MIT License Copyright (c) 2019 Hartmut Bohnacker Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
Last active Dec 17, 2019
Python scripts to manipulate CSV files. I moved these to https://github.com/bohnacker/data-manipulation because it got to messy here.
View csv-manipulate.txt
 Moved to a github repository: https://github.com/bohnacker/data-manipulation
Last active Feb 11, 2021
Svelte action to turn a node into a file drop area. Demo at: https://svelte.dev/repl/d3af7296998346aeb50d6657b7e31d26?version=3.32.3
View dropable.js
 // The action "dropable" turns a node into a file drop area and dispatches the custom event "files" when // on or more files were dropped. You'll get an array of files in event.detail. // You can provide filetypes as a string or an array of strings, e.g.: "text/html" or ["image/png", "image/jpeg"] // Matching will be done by searching for the substring, so filetype "image/" will match all images // or "/svg" will match "image/svg+xml". export function dropable(node, filetypes) { if (typeof filetypes === "string") filetypes = [filetypes]