This week's giveaway is in the Android forum.
We're giving away four copies of Android Security Essentials Live Lessons and have Godfrey Nolan on-line!
See this thread for details.
The moose likes Applets and the fly likes drawing graph Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login


Win a copy of Android Security Essentials Live Lessons this week in the Android forum!
JavaRanch » Java Forums » Java » Applets
Bookmark "drawing graph " Watch "drawing graph " New topic
Author

drawing graph

padma patil
Ranch Hand

Joined: Nov 06, 2001
Posts: 41
Hi,
I have given a task to draw graph for given X,Y values on imaginary X and Y axis not the screen co-ordinates.
I have set of X values ranging from 0.0 to 2.5
and Y values ranging from 0.0 to 1.2
Scale on X-Axis is something like this
------------------------------------------
0.0 0.50 1.00 1.50 2.0 2.5

Scale on Y-Axis is something like this
------------------------------------------
0.0 0.2 0.4 0.6 0.8 1.0 1.2
I need to draw points first for given (x,y) values and join the points with line.
Any hint about how to implement this?
I have thought something like this but I am stuck in this logic for decimal values.
Folowing is the code I am using to draw a scale (X- axis) on Applet window of size (500,500).
import java.awt.Graphics;
public class GraphApplet extends java.applet.Applet {
public void paint(Graphics g) {
g.drawRect(0,0,499,499);
g.drawLine(50,30,50,450);
g.drawLine(50,450,450,450);
g.drawString("0.00",50,465);
g.fillOval(50,450,3,3);
g.drawString("0.50",130,465);
g.fillOval(130,450,3,3);
g.drawString("1.00",210,465);
g.fillOval(210,450,3,3);
g.drawString("1.50",290,465);
g.fillOval(290,450,3,3);
g.drawString("2.00",370,465);
g.fillOval(370,450,3,3);
g.drawString("2.50",450,465);
g.fillOval(450,450,3,3);
}
}
<html>
<body>
<Applet code="GraphApplet.class" width=500 height=500 >
</applet>
</body>
</html>

X-axis I am drawing at (50,450,450,450)
0.0 on x-axis is at(50,450),
0.5 on x-axis is at(50+80,450),
so 0.1 will be at (50+ (0.1*80)/0.5 ,450)=(66,450) on Applet window.
If x value is something like 1.7 my logic screws up here as location of 1.7 will be at (77.2,450)
How I am going to draw line with decimal values of (x1,y1).

Is there an alternative way to draw graph using our own YX scale (imaginary axis)?
I realy appriciate if anyone put some light on this.
Thanks,
padmashree


[ April 30, 2002: Message edited by: padma patil ]
[ April 30, 2002: Message edited by: padma patil ]
Manfred Leonhardt
Ranch Hand

Joined: Jan 09, 2001
Posts: 1492
Hi Padma,
You are never going to avoid rounding errors since you are drawing floating point values onto a pixel screen (integers). The best you can do is just use Math.round and live with the answer. No human will ever be able to tell the difference anyway ...
Regards,
Manfred.
padma patil
Ranch Hand

Joined: Nov 06, 2001
Posts: 41
Hi,
Here is my complete code to draw graph on imaginary coornates. I am getting correct graph but wanted to know to make the line look like a little curved rather than just straigt line between two points.
CODE
import java.awt.Graphics;
import java.awt.Color;
public class GraphApplet extends java.applet.Applet {

double x[]={0.5,1.0,1.20,1.21,1.22,1.23,1.24,1.25,1.5,2.0,2.5};
double y[]={0.2,0.4,0.6,0.6,0.6,0.6,0.6,0.6,0.6,0.8,1.0};
// double x[]={1.0,1.25};
// double y[]={0.4,0.6};
double x1,y1,x2,y2,lx=0,ly=0,ux=0,uy=0;
public void paint(Graphics g) {

g.setColor(new Color(255, 255, 192));
g.fillRect(0,0,599,599);
// Imaginary X-Axis Scale
g.setColor(Color.black);
g.drawLine(50,510,450,510);
g.drawString("0.00",50,535);
g.fillOval(50,510,3,3);
g.drawString("0.50",130,535);
g.fillOval(130,510,3,3);
g.drawString("1.00",210,535);
g.fillOval(210,510,3,3);
g.drawString("1.50",290,535);
g.fillOval(290,510,3,3);
g.drawString("2.00",370,535);
g.fillOval(370,510,3,3);
g.drawString("2.50",450,535);
g.fillOval(450,510,3,3);

// Imaginary Y Axis

g.drawLine(50,30,50,510);
g.drawString("1.2",35,30);
g.fillOval(50,30,3,3);
g.drawString("1.0",35,110);
g.fillOval(50,110,3,3);
g.drawString("0.8",35,190);
g.fillOval(50,190,3,3);
g.drawString("0.6",35,270);
g.fillOval(50,270,3,3);
g.drawString("0.4",35,350);
g.fillOval(50,350,3,3);
g.drawString("0.2",35,430);
g.fillOval(50,430,3,3);
g.drawString("0.0",35,510);
g.fillOval(50,510,3,3);

for(int i=0; i<x.length; i++)
{
x1=50+((x[i]*80)/0.5);
y1=510-((y[i]*80)/0.2);
lx=x1;
ly=y1;
g.fillOval((int)x1,(int)y1,3,3);
if(i != (x.length -1))
{
int j=i+1;
x2=50+((x[j]*80)/0.5);
y2=510-((y[j]*80)/0.2);
ux=x2;
uy=y2;
g.setColor(Color.red);

g.drawLine((int)x1,(int)y1,(int)x2,(int)y2);
} //end of if

} //end of for

}


public void start()
{
repaint();
}
}
-
padmashree
 
 
subject: drawing graph
 
Similar Threads
How to plot a graph in Java ?
WHY DONT APPLETS EXECUTE???
Could someone give this piece of code a look?
Implementing Probability in Java ?
Applet - Graphing Quadratic Function Help