This was our(Harshal, Shaunak and Aakash(me)) first project in college during the course BE in Computer Science at MS University of Baroda. We were supposed to create something for the subject Object Oriented Programming during the III semester. The project show have all the features we learned theoretically like Abstraction, Encapsulation, friend functions, Inheritance etc. All of us met and started thinking about the project. We were only introduced to Turbo C++ and were supposed to develop in that, sadly that was the only tool/compiler we knew. So graphically we were limited to the DOS display capabilities.
We first came up with an idea to create a simulation of the Solar System, displaying rotation speeds and astronomical figures for the planets in it. For some time that was all we could think about. Then one day I don’t remember who but introduced the idea of a graph plotter. It clicked and all of us agreed to create one. We were all really exited to start but had no clue about the leads. We had UML and stuff but we never paid attention to it(frankly we all bunked classes ;)). So we started off by creating a grid by drawing lines of the DOS screen.
We then went on to create the necessary functions to evaluate a polynomial mathematically for different values of its variables. It was named polycal(). It made us really happy when the function worked. Then we tried plotting our first no-references-defined-random graph. I just couldn’t get it right even after trying for hours, then at around 4PM I found the bug. Sala ek variable ko galat value diya tha(the variable value was not proper). Then finally our first graph was visible and the nature of the graph was accurate enough to meet our expectations.
AUTOSCALE and AUTODROP:
We then moved on towards the other functions namely Logarithmic, Exponential and Trigonometric. As we had already created the function to evaluate values of polynomial equations, plotting Exponential and Log functions was easy. The reason being we took functions of the form ‘log(polynomial)’ and ‘e^(polynomial)’. The problem we faced was of plotting huge values that crossed the boundaries of our graph(screen). So we designed an Autoscale function which would take in array of values and scale them down to permissible values. Soon after that Log function raised its hand asking as to how would it calculate log for -ve numbers. We addressed it by designing another function which will take in both the arrays for x and y values(y being empty). It will calculate the polynomial and if the result is negative then it will drop that particular value from the x array. I dont remember the name of the function but lets call it “Autodrop” for now.
INTERFACE 2.0 :
Inspired by the CRO in our physics lab, I tried doing something more appealing graphically to our Graph plotter. So I designed a new look for our graph with proper boundaries, different colors and adding some animation to it. The new design looked great and all of us agreed to go with it. We displayed the scale and provided some navigation controls.
The only problem left was with the Trigonometric functions. The values our display could plot was integers and not floating point numbers. The trig values of sine and cosine being limited to [0,1] were not displayed appropriately on the graph. Then one night it just worked. Dividing by the number 6 was our answer, not 7 not 8 just 6. It is still a mystery to us.
All being said and done we added one more final touch of a splash screen inspired by the Footprints(college fest) posters designed by Nakul Purohit. On the last night we prepared the report got Prachi Jain’s 10 MP(big deals !!) at 10 in night, clicked the screenshots and had a good night’s sleep. The next day we submitted our project but the response was not as we expected(they missed our splash screen 🙁 ).But never mind we were satisfied !
Some screenshots of the final product :
Splash screen , Main Menu , Function Selection , Polynomial ,Sine , Log , Exponential , Cotangent