<< Chapter < Page | Chapter >> Page > |
I will return to a discussion of the run method later.
The method named function is shown in its entirety in Listing 2 . This method evaluates and returns the y-value for each incoming x-valueto define a line described by the equation given above.
double function(double xVar,double slope,double yIntercept){
double yVar = (yIntercept) + (slope*xVar);return yVar;
}//end function
As you can see, this method is very simple. I decided to break it out as a separate method to clearly distinguish it from the other code in the run method. This will be the case in all of the programs that I explain in thislesson.
As I mentioned earlier, the more complex problem is to get everything scaled properly to produce a visually pleasing graph in the space provided by the World object as shown in Figure 3 .
Another issue that increases the complexity is the need sometimes to translate the origin from the default upper-left corner of the World object to a point at the center of the world.
And if that isn't enough, the problem is further complicated by the need to use mixed-mode arithmetic involving both int and double data types. Coordinate values in the world must be specified as type int . However, if an attempt is made to do all of the arithmetic using integerarithmetic, the results will often be incorrect with no warning. For example, with integer arithmetic, 1divided by 3 is equal to 0 instead of 0.3333. That fact alone can result in major errors.
The computations in this and the other programs in this lesson will take the following general form (although some of the steps may be combined in the actual code and may not be easy to isolate) .
Step 1 . Evaluate the y-value using the equation for a straight line at a set of 101 points along thex-axis ranging from -1.0 through +1.0. Use double-precision arithmetic and return the result as type double . This produces y values for the following set of x values:
-1.0 -0.98 ... 0.0 ... 0.98 1.0
Step 2 . Scale the x and y values by scale factors that produce a pleasing visual display in the available space of the world. For the BLUE line shown in Figure 3 with a slope of 1.0 and a y-intercept value of 0.0 in a 300x300 world, this producesthe following x (col) and y (row) values:
-150,-150
-147,-147...
0,0...
147,147150,150
Column numbers less than zero are off the left side of the world and row numbers less than 0 are off the top of the world. The origin of the world is atthe upper-left corner by default.
Step 3. Adjust the column number by adding one-half the width of the world and adjust the row number by adding one-half the height of the world, This translates theorigin to the center of the world. Use these values when telling the turtle to move to a particular location specified by a column number and a row number.
While this approach may seem overly complicated, it has one major advantage. In particular, the results are independent ofthe dimensions of the world. For example, the results shown in Figure 3 are for a 300x300 world. If I were to change the dimensions of the world to 400x150near the top of Listing 15 without making any other changes relative to Figure 3 , the output would change to that shown in Figure 5 , which is still correct.
Notification Switch
Would you like to follow the 'Object-oriented programming (oop) with java' conversation and receive update notifications?