Glyph-graph - A simple, yet versatile, package for graphing equations on a 2-dimensional text canvas

Overview

Glyth Graph

Revision for 0.01

A simple, yet versatile, package for graphing equations on a 2-dimensional text canvas

List of contents:

  1. Brief Introduction
  2. Process Overview
  3. Technical Overview
  4. Function Glossary
  5. Code Example
  6. Legal (MIT license)

Brief Introduction


Glyth Graph is an open-source python package, for graphing equations onto a 2-dimensional array (named the canvas) with a variety of arguments to draw within a specific range and bound. Scaling to the width and height of the canvas in proportion

.

Process Overview


glyth_graph_basic():

Upon attaching the constructor to an object a 2D array with the declared resolution size will be filled with the chosen blank_glyth, named the canvas.

draw_graph():

  1. Check whether the given char_x (x-axis position of the canvas) is within the bounds of the canvas width as stated in the resolution.
  2. If not formatted the equation will be simplified into an expression without 'y', '=' and any spaces.
  3. If not given the y-axis bounds for the equation within the x-axis range will be calculated by repetedly incrementing the x variable.
  4. Then an x variable will be calculated by mapping the char_x from the width to the x-axis range of the equation, equally distributing each increment of char_x in the x-axis.
  5. The x variable will be substitued into the equation to form a y-axis value, which will be mapped from the y-axis bounds of the equation to the canvas height.
  6. Finally, the 2D coordinate of the char_x and char_y value on the canvas will be replaced by the chosen glyth.

Technical Overview


The package operates on mapping values between the x and f(x) from the graph equation to the given resolution of the canvas, translating coordinates with a non-uniform scaling factor to draw a glyth by a 2D index.


Notation form of the equation for mapping charx to x


x-axis Value Equation


where rangefrom and rangeto are respectively the given x-axis region of the equation to draw.



Notation form of the equation for mapping f(x), equal to y, to chary


y-axis Canvas Index Equation


where max and min are respectively the calculated (or given) maximum and minimum y-axis values for the equation within the x-axis region.

Function Glossary


graph_basic(resolution: str, blank_glyth: str = None) -> None

The constructor of the class to create an attached object, setup the canvas array with the arguements given, both the size and blank (background) glyth

 - resolution: the width by the height of the canvas measured in character glyths | 'x'.join([width, height])
 - blank_glyth: the background glyth used for spacing the graph

format_equation(equation: str) -> str

Format the graph equation such that all unecessary characters are removed to be processed, this includes removal of 'y' and '=' if given an equation to form an expression and all ' ' (spaces) present

- equation: the mathematical equation of the graph going to be drawn

y_bounds(self, equation: str, x_range: tuple) -> tuple

Calculate the upper and lower bounds in the y-axis of a graph equation between the given x-axis range, to be used later for mapping positions

- equation: the mathematical equation of the graph going to be drawn
- x_range: a tuple of the x-axis range between which the graph will be used, all outside this is unnecessary

draw_graph(char_x: int, equation: str, glyth: str, x_range: tuple, y_bounds: tuple = None) -> list:

Draw a glyth onto the canvas array dependent on given arguments in relation to the graph equation, including the x-axis range and y-axis bounds of the 2-dimensional section of the graph and character position along the canvas

- char_x: the x_axis glyth position of the canvas, such that it starts to the leftmost position (0) to the rightmost (canvas width - 1) | 0 <= char_x < canvas width
- equation: the mathematical equation of the graph going to be drawn
- glyth: the character/s to be drawn onto the canvas at the calculated coordinate relative to the graph equation
- x_range: a tuple of the x-axis range between which the graph will be used, all outside this is unnecessary | (range_from, range_to)
- y_bounds: a tuple of the y-axis bounds for the x-axis region of the graph, including both the minimum and maximum values | (min, max)

clear_canvas() -> None:

Clear the canvas by replacing all indicies in the array with the blank glyth assigned in the constructor, removing any graphs drawn

print_canvas(clear: bool = None) -> None:

Pretty print the canvas array into equal rows of the set width with newline character moving to the next row, as each index is printed incrementally

- clear: a boolean value (either True or False) whether to clear the each canvas array index after printing the index | True or False

Code Example


A simple code example showing the usage of all functions in the package, with the user inputting variables to produce the wanted graph/s onto the canvas array as random Base64 character glyths:

from glyth_graph import graph_basic
from random import choice

character_set = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz+/'

print('---Glyth Graph---')

print('\n---Resolution---')
width = int(input('Width (chars): '))
height = int(input('Height (chars): '))

glyth_graph = graph_basic(
    resolution = 'x'.join([str(width), str(height)]),
    blank_glyth = '  '
)

while True:
    print('\n---Graph Properties---')
    equation = glyth_graph.format_equation(input('Equation: '))
    range_from, range_to = int(input('x-axis From: ')), int(input('x-axis To: '))
    print()

    bounds = glyth_graph.y_bounds(
        equation = equation,
        x_range = (range_from, range_to)
    )

    for char_x in range(0, width):
        glyth_graph.draw_graph(
            char_x = char_x,
            equation = equation,
            glyth = choice(character_set),
            x_range = (range_from, range_to),
            y_bounds = bounds
        )

    glyth_graph.print_canvas()


An example of an output to the program, which can vary with custom values for all given inputs, pretty printing the canvas array:

---Glyth Graph---

---Resolution---
Width (chars): 100
Height (chars): 30

Width: 100 | Height: 30

---Graph Properties---
Equation: y = math.sin(x)
x-axis From: 0
x-axis To: 6.283185

                     LbvwLB+K
                  Rp8        49D
                MB              FgW
              Kt                   O
            i6                      +w
           t                          f
          z                            LZ
        k7                               q
       9                                  q
      Y                                    G
     3                                      yP
    r                                         c
   9                                           h
  C                                             4
 f                                               K
l                                                 M                                               oe
                                                   o                                             7
                                                    y                                           n
                                                     O                                         e
                                                      tf                                      0
                                                        M                                    u
                                                         r                                  O
                                                          I                               lv
                                                           o8                            w
                                                             L                          A
                                                              Q2                      uO
                                                                w                   LD
                                                                 zvu              8x
                                                                    nGl        xMw
                                                                       XsohPTDx


License (MIT)



Permissions Conditions Limitations
Commercial use License and copyright notice Liability
Distribution Warranty
Modification
Private use
MIT License

Copyright (c) 2021 Ivan (GitHub: ivanl-exe, E-Mail: [email protected])

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:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
Owner
Ivan
Advanced programmer, envisioning the future of technology and influence from Web3 and blockchains.
Ivan
Extracts random colours from an image

EXTRACT COLOURS This repo contains all the project files. Project Description A Program that extracts 10 random colours from an image and saves the rg

David .K. Danso 3 Dec 13, 2021
DrawBot is a powerful, free application for macOS that invites you to write Python scripts to generate two-dimensional graphics

DrawBot is a powerful, free application for macOS that invites you to write Python scripts to generate two-dimensional graphics.

Frederik Berlaen 344 Jan 06, 2023
Samila is a generative art generator written in Python

Samila is a generative art generator written in Python, Samila let's you create arts based on many thousand points. The position of every single point is calculated by a formula, which has random par

Sepand Haghighi 947 Dec 30, 2022
ModernGL is a python wrapper over OpenGL 3.3+ core

ModernGL is a python wrapper over OpenGL 3.3+ core that simplifies the creation of simple graphics applications like scientific simulations, games or user interface

ModernGL 1.4k Jan 01, 2023
GTK and Python based, simple multiple image editor tool

System Monitoring Center GTK3 and Python3 based, simple multiple image editor tool. Note: Development of this application is not completed yet. The ap

Hakan Dündar 1 Feb 02, 2022
Forza painter app with python

forza-painter Discord: A-Dawg#0001 (AE) Supports: Forza Horizon 5 Offically (OTHER v1.405.2.0, MS STORE v3.414.967.0, STEAM v1.414.967.0) Unofficially

320 Dec 31, 2022
Instagram-like image filters.

PyGram Instagram-like image filters. Usage First, import the client: from filters import * Instanciate a filter and apply it: f = Nashville("image.jp

Ajay Kumar Nagaraj 0 Oct 18, 2022
Qt based ebook reader

Qt based ebook reader Currently supports: pdf epub djvu fb2 mobi azw / azw3 / azw4 cbr / cbz md Contribute Paypal Bitcoin: 17jaxj26vFJNqQ2hEVerbBV5fpT

1.4k Dec 26, 2022
Create a random fluent image based on multiple colors.

FluentGenerator Create a random fluent image based on multiple colors. Navigation Example Install Update Usage In Python console FluentGenerator Fluen

1 Feb 02, 2022
Image Reading, Metadata Conversion, and Image Writing for Microscopy Images in Python

AICSImageIO Image Reading, Metadata Conversion, and Image Writing for Microscopy Images in Pure Python Features Supports reading metadata and imaging

Allen Institute for Cell Science - Modeling 137 Dec 14, 2022
3D Model files and source code for rotating turntable. Raspberry Pi, DC servo and PWM modulator required.

3DSimpleTurntable 3D Model files and source code for rotating turntable. Raspberry Pi, DC servo and PWM modulator required. Preview Construction Print

Thomas Boyle 1 Feb 13, 2022
Maze generator with most popular shapes - hexagon, triangle, square

Maze-Generator Maze generator with most popular shapes - hexagon, triangle, square (sqaure not implemented yet): Theory: Planar Graph https://en.wikip

Kacper Plesiak 2 Dec 28, 2021
HtmlWebShot - A python3 package which Can Create Images From url, Html-CSS, Svg and from any readable file and texts with many setup features.

A python3 package which Can Create Images From url, Html-CSS, Svg and from any readable file and texts with many setup features

Danish 24 Dec 14, 2022
Fast Image Retrieval (FIRe) is an open source image retrieval project

Fast Image Retrieval (FIRe) is an open source image retrieval project release by Center of Image and Signal Processing Lab (CISiP Lab), Universiti Malaya. This project implements most of the major bi

CISiP Lab 39 Nov 25, 2022
Design custom QR codes with this web app!

My-QR.Art This web app lets users design their own QR codes to any domain. It can be acessed on my-qr.art. You can find some more background info abou

Marien Raat 406 Dec 20, 2022
PyGtk Color - A couple of python scripts to select a color (for scripting usage)

Selection Scripts This repository contains two scripts to be used within a scripting project, to aquire a color value. Both scripts requir

Spiros Georgaras 1 Oct 31, 2021
Hide sensitive information in images

Data-Preserved Script allowing to blur the most sensitive information on images. Prerequisites Before you begin, ensure you have met the following req

2 Dec 01, 2021
imgAnalyser - Un script pour obtenir la liste des pixels d'une image correspondant à plusieurs couleurs

imgAnalyser - Un script pour obtenir la liste des pixels d'une image correspondant à plusieurs couleurs Ce script à pour but, à partir d'une image, de

Théo Migeat 1 Nov 15, 2021
Python Image Morpher (PIM) is a program that can take two images and blend them to whatever extent or precision that you like

Python Image Morpher (PIM) is a program that can take two images and blend them to whatever extent or precision that you like! It is designed to emulate some of Python's OpenCV image processing from

David Dowd 108 Dec 19, 2022
Image2scan - a python program that can be applied on an image in order to get a scan of it back

image2scan Purpose image2scan is a python program that can be applied on an image in order to get a scan of it back. For this purpose, it searches for

Kushal Shingote 2 Feb 13, 2022