What is this? It's similar to Desmos, a graphing calculator, but it only supports explicit functions of y in terms of x. You can provide it with any combination of algebraic functions, constants, numbers, variables and x-terms, and it will draw out the function on the plot to the right. You can zoom in and out using the scroll wheel or up/down arrows, and pan the plot by clicking and dragging anywhere. How do I use this? Click on "type here...", under the 'Functions:' header to the left to add a new function, or click on any other function line to edit them. You can also add variables, but keep in mind that the variables' values are calculated from top-down. This will mean that if you define 'a' as 2 and *then* 'b' as 3*a, it will work. But, if you define 'b' as 3*a and *then* 'a' as 2, it will not work. Some constants are also supported, including pi and e. The currently supported functions are the natural log (log base e) [ln(a)], log (base 10) [log(a)], sine [sin(a)], cosine [cos(a)], tangent [tan(a)], arcsine [asin(a)], arccosine [acos(a)], arctangent [atan(a)], floor [floor(a)], round [round(a)], ceiling [ceiling(a)], modulus [mod(a, b)], absolute value [abs(a)] and the square root [sqrt(a)]. For roots of any other power, eg., the third root of 8, you can use 8^(1/3). The program supports both radians and degrees, between which you can switch by clicking on the bottom left display. How does it work? It is not so complicated when you break it up into a few steps. Firstly, you provide the program with an input. This is an expression in terms of x. Secondly, the program considers the plot-viewing parameters; where the centre of the screen is in relation to the plot's origin, and how far the plot has been scaled. Thirdly, the program iterates through each function, drawing each. This is done simply by evaluating each expression with substituted values of x, then plotting the x-value and the calculated y-value as a point, connecting it to the previous point. Side note I shared this project early, admittedly, because I don't know if I'll ever get around to finishing it. It's still got a couple of bugs to fix, and a couple of features that'd make it a lot nicer (like usable variables). But, seeing as to how these are some of the more boring front-end fixes, and not so much of the juicy stuff (and I've got some other projects on my mind), we'll see. If I do work further on this, though, here are some plans (feel free to suggest any other ideas): - Add variables - Allow for scrolling up and down functions and variables - Add customisable colours for functions (choose between maybe 5, 6) - Prevent from zooming in further than screenWidth==1, maybe a maximum too - Allow for inputs of grid edges - Rewrite this 'instructions' section when I am less tired so that it does not sound so depressing - Display typed functions mathematically, not just brackets and asterisks, etc - Convert 'pi' to π - Provide fatal errors for invalid functions Credit 's Shunting Yard Algorithm for the base mathematical interpreter, found here: [ 's Stamp Font Engine++ for the text engine, found here: [ 's Case Checker, found here: [ The font used was Roboto Serif, from Google Fonts, downloaded here: [https://fonts.google.com/specimen/Roboto+Serif/]. Update Log 1.0.1 - Major vertical gridline labels now snap correctly to the grid borders when the origin is out of view. Each function is now graphed in a different colour. 1.0.2 - Each function line now has an indicator to represent which colour it is graphed in. 1.1.0 - Introduced variables, and scrolling between your variables and functions. Fixed a glitch where just clicking on the grid would stop the program from rendering any graphs. The maximum number of functions is now 30, compared to the previous 13. Functions of just a number without operations or x-terms now render without calculation, seeing as to how none is required, hence making the program a bit lighter. The program also now prevents you from zooming in too far. 1.1.1 - Fixed functions sometimes becoming invalid when the last-defined variable is invalid.