Navigation Menu

Skip to content

Instantly share code, notes, and snippets.

View crabmusket's full-sized avatar

Daniel Buckmaster crabmusket

View GitHub Profile
@crabmusket
crabmusket / StressAnalysis.hs
Last active October 12, 2015 05:48
Analysing mechanical stresses in Haskell.
-- Define a module with the same name as the file.
module StressAnalysis where
-- A Beam is defined by its geometry. Think of this as a class declaration.
data Beam = Circle {
diameter :: Float -- Member named 'diameter' of type 'Float'
} deriving (Show)
-- Define functions for common properties of beams. The functions are
-- impleented down the bottom of the file. These functions take a Beam and
@crabmusket
crabmusket / AssignmentE.hs
Created November 1, 2012 02:31
MECH2400 assignment code.
-- Main module so that this file can be compiled.
module Main where
-- Import module defined in StressAnalysis.hs (https://gist.github.com/3979818)
import StressAnalysis
-- Main function detemermines what the compiled executable does.
-- At the moment, I want to graph the stress at each element of a section.
main = graphElements
@crabmusket
crabmusket / Alphabet.hs
Last active April 20, 2020 12:02
Naive bijective function in Haskell. http://stackoverflow.com/questions/742013
module Alphabet (
Alphabet,
encodeWithAlphabet,
decodeFromAlphabet
) where
import Prelude
import Data.List(elemIndex, mapAccumR)
import Data.Maybe(fromMaybe)
@crabmusket
crabmusket / stepResponse.py
Last active December 15, 2015 22:08
Step responses of LTI systems in Python for AMME3500.
# Step response graphs
# Python 2.7 with numpy, scipy, and matplotlib
# Based on https://gist.github.com/ofan666/1882562
from numpy import min as nmin
from scipy import linspace
from scipy.signal import lti, step
from matplotlib import pyplot as p
def plotLTI(num, den, n = 200):
@crabmusket
crabmusket / moreStepResponse.py
Created April 8, 2013 04:40
Step response of a complex LTI system plotted with several parameter variations in Python.
# Step response graphs
# Python 2.7 with numpy, scipy, and matplotlib
# Based on https://gist.github.com/ofan666/1882562
from numpy import min as nmin
from scipy import linspace
from scipy.signal import lti, step
from matplotlib import pyplot as p
def create_tf(i):
@crabmusket
crabmusket / ReadNCFile.hs
Last active December 16, 2015 04:19
Reads the G commands from a CNC file and outputs the physical state of the machine after each command.
module Main where
import Data.Maybe
import Text.Printf
import Text.Regex.Posix
-- The main function defines what the program does when we compile it.
main = do
-- Read all data from standard input (until the end of the file).
file <- getContents
@crabmusket
crabmusket / DistanceScaling.hs
Last active December 16, 2015 18:39
Exponentially scaling distances for rendering objects that are far away using an imprecise floating Z buffer.
module Main where
import Graphics.Gnuplot.Simple
-- Calculates the scaling factor for an object at distance 'dist'. The object
-- will be at scale 1 until 'max'/2, and then will be exponentially scaled down
-- as it increases. As 'dist' approaches infinity, 'dist * factor max dist'
-- approaches 'max'. See http://goo.gl/xLzrv
factor max dist = if dist < max / 2
then 1
else (1 - 1 / 2**(f+1)) / f
@crabmusket
crabmusket / monitor.hs
Created May 16, 2013 12:49
Monitor a directory to rebuild pandoc files automatically.
module Main where
import Filesystem (getWorkingDirectory)
import Filesystem.Path (extensions)
import System.FSNotify
import System.Exit
import System.Environment
import System.Cmd
import Control.Concurrent
import Control.Monad
@crabmusket
crabmusket / controllability.hs
Last active December 17, 2015 18:59
Controllability of a system described with a state equation.
module Main where
import Control.Monad (liftM)
import Numeric.LinearAlgebra (readMatrix, multiply, rank, cols, rows, fromBlocks)
main = do
putStrLn "Enter matrix A (in format \"1 2 3; 4 5 6; 7 8 9\")"
a <- getMatrix
putStrLn "Enter matrix B (in format \"1; 2; 3\")"
@crabmusket
crabmusket / 7-segment.hs
Last active December 18, 2015 08:29
A 7-segment display controller for the LaunchPad written in Atom.
-- http://hackage.haskell.org/package/atom
-- http://hackage.haskell.org/package/atom-msp430
module Main where
import Data.Word
import Data.Bits
import Language.Atom.MSP430
main = mspCompile "g2231" $ mspProgram {