Листинг 10. sector.java - создание круговой диаграммы
-----------------------------------------------------------------
import java.awt.*;
import java.applet.*;
import java.math .*;
public class sector extends Applet {
void sec(int clr1,int clr2,int clr3,
int ugol1, int ugol2,String intext)
{
int x1,x2,y1,y2,imgw,imgh;
double u1,u2;
u1=ugol1*0.01745329;
u2=(ugol1+ugol2)*0.01745329;
Dimension d = size ();//Информация о размерах...
imgw=d.width;
imgh=d.height;
x1=(int )(Math.cos(u1)*imgw/2+imgw/2);
y1=imgh-(int)(Math.sin(u1)*imgh/2+imgh/2);
x2=(int )(Math.cos(u2)*imgw/2+imgw/2);
y2=imgh-(int)(Math.sin(u2)*imgh/2+imgh/2);
Graphics img=getGraphics ();
img.setColor(new Color(clr1,clr2,clr3));
img.fillArc(0,0,imgw,imgh,ugol1,ugol2);
img.setColor(Color.black);
img.drawString(intext,(int)((x1+x2)/2-20),
(int)((y1+y2)/2));
}
public void paint (Graphics g) {
sec(0,255,255,0,60,"Cyan");//Голубой
sec(255,105,115,60,90,"Red");//Красный
sec(76,105,255,150,80,"Blue");//синий
sec(255,250,93,230,130,"Yellow"); //Жёлтый
Dimension d = size();
g.drawString("(c) Khramkov Ivan",
d.width-100,d.height-10);
}
}
Листинг sector.html
<html ><body >
<applet code ='sector.class' width =512 height =316></applet >
</body ></html >
1.10. Построение графика y=sin(x)
В примере предлагается вариант построения графика y=sin(x) на отрезке [a,b]. Предусматривается вычерчивание осей координат декартовой системы координат, нанесение шкал делений.
Листинг 10. mysinus. java - построение графика y=sin(x)
-----------------------------------------------------------------
import java.awt.*;
import java.math.*;
import java.applet.*;
import java.awt.event .*;
public class mysinus
extends Applet implements ActionListener {
double x[]=new double [50];
double y[]=new double [50];
int Gy,i,x1,y1,mx1,mu1,jj;
double xmin,xmax,ymin,ymax,mxd,myd,mx,my,h,xos,yos,xm,ym;
double a,b;
int imgw,imgh,pw,ph,n=20,dx=4,dy=4;
TextField at,bt;
Button butt;
public void paint(Graphics g){
imgw=500; imgh=500;
g.setColor(Color.white);
g.fillRect(0,0,imgw,imgh);
g.setColor(Color.black);
g.drawRect(1,1,imgw,imgh);
}
public void init ()
{
x1=0;
y1=0;
Dimension d = size();
pw=d.width;
ph=d.height;
setBackground(new Color (125,168,203));
setLayout(null);
Label Al=new Label ("A:");
Al.setBounds(534,10,20,20);
add (Al);
Label Bl=new Label ("B:");
Bl.setBounds(534,30,20,20);
add (Bl);
at=new TextField ();
at.setBounds(534+23,10,25,20);
add (at);
bt=new TextField();
bt.setBounds(534+23,30,25,20);
add (bt);
butt=new Button ("Get this!");
butt.setBounds(534,63,53,20);
add (butt);
butt.addActionListener(this);
Label Autor=new Label ("(c) 2006. Khramkov Ivan.");
Autor.setBounds(33,ph-30,333,20);
add (Autor);
}
public void border() {
int i,m;
double h,r;
String sss;
h=(b-a)/n;
xmax=-9999;
xmin=-xmax;
ymax=xmax;
ymin=xmin;
for (i=0;i<=n;i++)
{
xm=a+i*h;
ym=func(xm);
x[i]=xm;
y[i]=ym;
if (xm<xmin) xmin=xm;
if (xm>xmax) xmax=xm;
if (ym<ymin) ymin=ym;
if (ym>ymax) ymax=ym;
}
xm=Math.abs(xmin);
if (Math.abs(xmax)>xm) xm=Math.abs(xmax);
ym=Math.abs(ymin);
if (Math.abs(ymax)>ym) ym=Math.abs(ymax);
m=0;
mx=1;
if (xm>10)
{
while (xm*mx>10){mx=mx*0.1; m=m+1;}
mx=mx*10;
m=m-1;
}
Else
{
while (xm*mx<1){mx=mx*10;m=m-1;}
}
my=1;
if (ym>10)
{
while (ym*my>10)
my=my*0.1;
my=my*10;
}
Else
{
while (ym*my<1)
my=my*10;
}
for (i=0;i<=n;i++)
{
x[i]=x[i]*mx;
y[i]=y[i]*my;
}
xmin=xmin*mx;
xmax=mx*xmax;
ymin=ymin*my;
ymax=my*ymax;
xm=xmax-xmin;
ym=ymax-ymin;
mxd=xm+0.2*xm;
myd=ym+0.2*ym;
xm=xmin-0.1*xm;
ym=ymin-0.1*ym;
}
public void getvalues(in t x, int y, int h, double ugol,
String intext)
{
Graphics img=getGraphics ();
img.drawString(intext,x+30,y);
}
public double func(double x)
{
return Math.sin(x);
}
//Переориентировка экранных координат в локальные
//для конкретной задачи...
public void ctosc(double xr,double yr)
{
x1=(int)((xr-xm)*xos);
y1=Gy-(int)((yr-ym)*yos);
}
//Рисование делений на оси X...
void Xdelen()
{
Grap hics img=getGraphics ();
ctosc(i,0);
img.drawLine(x1,y1-3,x1,y1+3);
if(i!=0)
{
img.drawString(""+i,x1-1,y1+15);
}
}
//Рисование делений на ось Y...
public void Ydelen()
{
Graphics img=getGraphics ();
ctosc(0,i);
img.drawLine(x1-3,y1,x1+3,y1);
if(i!=0)
{
img.drawString(""+i,x1+5,y1);
}
}
public void actionPerformed(ActionEvent ae){
String strr;
String str = ae.getActionCommand();
int x11,y11;
Graphics img=getGraphics ();
if (str.equals ("Get this!"))
{
paint (img);
a=Double.parseDouble (at.getText());
b=Double.parseDouble (bt.getText());
if (a>0) a=-a;
if (b<0) b=-b;
if (a<=-10) a=-10;
if (b>=10|b<=-10) b=10;
border();
xos=imgh/mxd;
Gy=(int)(imgw/2);
yos=Gy/myd;
ctosc(xmin,0);
x11=x1;
y11=y1;
ctosc(xmax,0);
img.drawLine(x11,y11,x1+3*dx,y1);
img.drawLine(x1+3*dx,y1,x1+2*dx,y1-dy);
img.drawLine(x1+3*dx,y1,x1+2*dx,y1+dy);
img.drawString("X",x1+3*dx,y1-3*dy);
for (i=(int)(xmin);i<=(int)(xmax);i++)
Xdelen();
ctosc(0,ymin);
x11=x1;
y11=y1;
ctosc(0,ymax);
img.drawLine(x11,y11,x1,y1-2*dy);
img.drawLine(x1,y1-2*dy,x1-dx,y1-dy);
img.drawLine(x1,y1-2*dy,x1+dx,y1-dy);
img.drawString("Y",x1+dx-15,y1-3*dy+5);
for (i=(int)(ymin);i<=ymax;i++)
Ydelen();
ctosc(x[0],y[0]);
img.drawLine(x1,y1,x1,y1);
for (i=1;i<=n;i++)
{
x11=x1;
y11=y1;
ctosc(x[i],y[i]);
img.drawLine(x11,y11,x1,y1);
}
ctosc(x[n-2],y[n-2]);
img.drawLine(x1,y1,x1,y1);
getvalues(x1,y1,12,30*0.01745329,"Y=Sin(x)");
}
}
}
Листинг mysinus.html
---------------------------------------------------------------
<html > <head > <title >Y=Sin(x)</title > </head >
<body >
<center >
<h1 >Y=Sin(x)</h1 >
<applet code="mysinus.class" width =600 height =533> </applet >
</body > </html >
Второй вариант построения графика
Листинг 10. sinus_cosinus. java - построение графиков y=sin(x) или y=cos(x)
// Рылов Алексей группа 227 2006 год, октябрь
import java.awt.*;
import java.applet.*;
import java.math.*;
import java.awt.event.*;
//=================================================
public class sinus_cosinus extends Applet implements ActionListener
{
double x[]=new double[500];
double y[]=new double[500];
int Gy,i,x1,y1,mx1,mu1,jj;
double mxd,myd,mx,my,h,xos,yos,xm,ym,xmin,xmax,ymin,ymax;
double a,b;
int imgw,imgh,pw,ph,n=499,dx=4,dy=4;
TextField at,bt;
Button butt;
//=================================================
public void paint(Graphics g)
{
imgw=500;
imgh=500;
g.setColor(Color.pink);
g.fillRect(0,0,700,250);
g.setColor(Color.black);
g.drawRect(0,0,0,0);
}
//======================================
public void init()
{
x1=0;
y1=0;
Dimension d = size();
pw=d.width;
ph=d.height;
setBackground(new Color(100,150,233));
setLayout(null);
Label Al=new Label("A1");
Al.setBounds(534,10,20,20);
add(Al);
Label Bl=new Label("A2");
Bl.setBounds(534,30,20,20);
add(Bl);
at=new TextField();
at.setBounds(534+23,10,50,20);
add(at);
bt=new TextField();
bt.setBounds(534+23,30,50,20);
add(bt);
butt=new Button("SIN X");
butt.setBounds(540,60,80,30);
add(butt);
butt.addActionListener(this);
butt=new Button("COS X");
butt.setBounds(540,95,80,30);
add(butt);
butt.addActionListener(this);
}
//====================================
public void border_sin()
{
int i,m;
double h,r;
String sss;
h=(b-a)/n;
xmax=-9999;
xmin=-xmax;
ymax=xmax;
ymin=xmin;
for (i=0;i<=n;i++)
{
xm=a+i*h;
ym=funcs(xm);
x[i]=xm;
y[i]=ym;
if (xm<xmin)
xmin=xm;
if (xm>xmax)
xmax=xm;
if (ym<ymin)
ymin=ym;
if (ym>ymax)
ymax=ym;
}
xm=Math.abs(xmin);
if (Math.abs(xmax)>xm)
xm=Math.abs(xmax);
ym=Math.abs(ymin);
if (Math.abs(ymax)>ym)
ym=Math.abs(ymax);
m=0;
mx=1;
if (xm>10)
{
while (xm*mx>10)
{
mx=mx*0.1;
m=m+1;
}
mx=mx*10;
m=m-1;
}
else
{
while (xm*mx<1)
{
mx=mx*10;
m=m-1;
}
}
my=1;
if (ym>10)
{
while (ym*my>10)
my=my*0.1;
my=my*10;
}
else
{
while (ym*my<1)
my=my*10;
}
for (i=0;i<=n;i++)
{
x[i]=x[i]*mx;
y[i]=y[i]*my;
}
xmin=xmin*mx;
xmax=mx*xmax;
ymin=ymin*my;
ymax=my*ymax;
xm=xmax-xmin;
ym=ymax-ymin;
mxd=xm+0.2*xm;
myd=ym+0.2*ym;
xm=xmin-0.1*xm;
ym=ymin-0.1*ym;
}
//================================
public void border_cos()
{
int i,m;
double h,r;
String sss;
h=(b-a)/n;
xmax=-9999;
xmin=-xmax;
ymax=xmax;
ymin=xmin;
for (i=0;i<=n;i++)
{
xm=a+i*h;
ym=funcc(xm);
x[i]=xm;
y[i]=ym;
if (xm<xmin)
xmin=xm;
if (xm>xmax)
xmax=xm;
if (ym<ymin)
ymin=ym;
if (ym>ymax)
ymax=ym;
}
xm=Math.abs(xmin);
if (Math.abs(xmax)>xm)
xm=Math.abs(xmax);
ym=Math.abs(ymin);
if (Math.abs(ymax)>ym)
ym=Math.abs(ymax);
m=0;
mx=1;
if (xm>10)
{
while (xm*mx>10)
{
mx=mx*0.1;
m=m+1;
}
mx=mx*10;
m=m-1;
}
else
{
while (xm*mx<1)
{
mx=mx*10;
m=m-1;
}
}
my=1;
if (ym>10)
{
while (ym*my>10)
my=my*0.1;
my=my*10;
}
else
{
while (ym*my<1)
my=my*10;
}
for (i=0;i<=n;i++)
{
x[i]=x[i]*mx;
y[i]=y[i]*my;
}
xmin=xmin*mx;
xmax=mx*xmax;
ymin=ymin*my;
ymax=my*ymax;
xm=xmax-xmin;
ym=ymax-ymin;
mxd=xm+0.2*xm;
myd=ym+0.2*ym;
xm=xmin-0.1*xm;
ym=ymin-0.1*ym;
}
//================================================
public double funcc(double x)
{
return Math.cos(x);
}
//================================================
public void getvalues(int x, int y, int h, double ugol, String intext)
{
Graphics img=getGraphics();
img.drawString(intext,x+30,y);
}
public double funcs(double x)
{
return Math.sin(x);
}
public void ctosc(double xr,double yr)
{
x1=(int)((xr-xm)*xos);
y1=Gy-(int)((yr-ym)*yos);
}
void Xdelen()
{
Graphics img=getGraphics();
ctosc(i,0);
img.drawLine(x1,y1-3,x1,y1+3);
if(i!=0)
{
img.drawString(""+i,x1-1,y1+15);
}
}
//==================================================
public void Ydelen()
{
Graphics img=getGraphics();
ctosc(0,i);
img.drawLine(x1-3,y1,x1+3,y1);
if(i!=0)
{
img.drawString(""+i,x1+5,y1);
}
}
//======================================
public void actionPerformed(ActionEvent ae)
{
String strr;
String str = ae.getActionCommand();
int x11,y11;
Graphics img=getGraphics();
if(str.equals("SIN X"))
{
paint(img);
a=Double.parseDouble(at.getText());
b=Double.parseDouble(bt.getText());
if (a>0)
a=-a;
if (b<0)
b=-b;
if (a<=-10)
a=-10;
if (b>=10|b<=-10)
b=10;
border_sin();
xos=imgh/mxd;
Gy=(int)(imgw/2);
yos=Gy/myd;
ctosc(xmin,0);
x11=x1;
y11=y1;
ctosc(xmax,0);
img.drawLine(x11,y11,x1+3*dx,y1);
img.drawLine(x1+3*dx,y1,x1+2*dx,y1-dy);
img.drawLine(x1+3*dx,y1,x1+2*dx,y1+dy);
img.drawString("X",x1+3*dx,y1-3*dy);
for (i=(int)(xmin);i<=(int)(xmax);i++)
Xdelen();
ctosc(0,ymin);
x11=x1;
y11=y1;
ctosc(0,ymax);
img.drawLine(x11,y11,x1,y1-2*dy);
img.drawLine(x1,y1-2*dy,x1-dx,y1-dy);
img.drawLine(x1,y1-2*dy,x1+dx,y1-dy);
img.drawString("Y",x1+dx-15,y1-3*dy+5);
for (i=(int)(ymin);i<=ymax;i++)
Ydelen();
ctosc(x[0],y[0]);
img.drawLine(x1,y1,x1,y1);
for (i=1;i<=n;i++)
{
x11=x1;
y11=y1;
ctosc(x[i],y[i]);
img.drawLine(x11,y11,x1,y1);
}
ctosc(x[n-2],y[n-2]);
img.drawLine(x1,y1,x1,y1);
}
if(str.equals("COS X"))
{
paint(img);
a=Double.parseDouble(at.getText());
b=Double.parseDouble(bt.getText());
if (a>0)
a=-a;
if (b<0)
b=-b;
if (a<=-10)
a=-10;
if (b>=10|b<=-10)
b=10;
border_cos();
xos=imgh/mxd;
Gy=(int)(imgw/2);
yos=Gy/myd;
ctosc(xmin,0);
x11=x1;
y11=y1;
ctosc(xmax,0);
img.drawLine(x11,y11,x1+3*dx,y1);
img.drawLine(x1+3*dx,y1,x1+2*dx,y1-dy);
img.drawLine(x1+3*dx,y1,x1+2*dx,y1+dy);
img.drawString("X",x1+3*dx,y1-3*dy);
for (i=(int)(xmin);i<=(int)(xmax);i++)
Xdelen();
ctosc(0,ymin);
x11=x1;
y11=y1;
ctosc(0,ymax);
img.drawLine(x11,y11,x1,y1-2*dy);
img.drawLine(x1,y1-2*dy,x1-dx,y1-dy);
img.drawLine(x1,y1-2*dy,x1+dx,y1-dy);
img.drawString("Y",x1+dx-15,y1-3*dy+5);
for (i=(int)(ymin);i<=ymax;i++)
Ydelen();
ctosc(x[0],y[0]);
img.drawLine(x1,y1,x1,y1);
for (i=1;i<=n;i++)
{
x11=x1;
y11=y1;
ctosc(x[i],y[i]);
img.drawLine(x11,y11,x1,y1);
}
ctosc(x[n-2],y[n-2]);
img.drawLine(x1,y1,x1,y1);
}
}
}
Листинг sinus_cosinus.html
<html>
<body bgcolor="#990000">
<applet align="center" vlign="top" width=700 height=250 code="sinus_cosinus.class"></applet>
</body>
</html>