Draw a shape

Simple Levenshtein gesture/shape recognizer

Levenshtein distance is a measure of the similarity between two strings, string 's' (the source) and string 't' (the target). The distance is the sum of deletions, insertions, or substitutions required to transform s into t. By also transforming coordinates to direction numbers which then can be seen as a sequence (string) once can calculate the distance between a shape drawn by the user and a saved, target shape.

getDirection2D will transform a vector into a single number representing a direction which then can be chained into a sequence


                        function getDirection2D( center, relative )
                        {
                        //right side
                        if( center.x < relative.x )
                        {
                        if( center.y > relative.y )
                        {
                        return 7;
                        }
                        if( center.y < relative.y )
                        {
                        return 1;
                        }

                        return 0;
                        }

                        //left side
                        else if( center.x > relative.x )
                        {
                        if( center.y > relative.y )
                        {
                        return 5;
                        }
                        if( center.y < relative.y )
                        {
                        return 3;
                        }

                        return 4;
                        }

                        // center
                        else
                        {
                        if( center.y > relative.y )
                        {
                        return 6;
                        }
                        if( center.y < relative.y )
                        {
                        return 2;
                        }

                        return -1;
                        }
                        }
                    

The Levenshtein distance distance calculation between two strings


                        function getLevenshteinDistance( a, b )
                        {
                        if( a == null || b == null )
                        {
                        console.log( "Strings for Levenshtein distance must not be null" );
                        return null;
                        }

                        const m = a.length;
                        const n = b.length;

                        var i;
                        var j;

                        var matrix = [];

                        for( i = 0; i <= m; ++i )
                        {
                        var line = [];

                        for( j = 0; j <= n; ++j )
                        {
                        line.push( ( ( i != 0 ) ? 0 : j ) )
                        }

                        line[ 0 ] = i;

                        matrix.push( line );
                        }

                        for( i = 1; i <= m; ++i )
                        {
                        for( j = 1; j <= n; ++j )
                        {
                        var cost = ( a.charAt( i - 1 ) == b.charAt( j - 1 ) ) ? 0 : 1;

                        matrix[ i ][ j ] = Math.min( Math.min( matrix[ i - 1 ][ j ] + 1, matrix[ i ][ j - 1 ] + 1 ), matrix[ i - 1 ][ j - 1 ] + cost
                        );
                        }
                        }

                        return matrix[ m ][ n ];
                        }