package tianye.test.rest;
import java.util.Random;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
@Path ("/draw")
public class DrawGraph {
int[] numbers;
public DrawGraph()
{
numbers = new int[20];
Random r = new Random();
for(int i=0;i<numbers.length;i++)
{
numbers[i] = r.nextInt(30);
}
}
private int getMax(int[] intarr)
{
int m = intarr[0];
int c = 0;
for(int i=1;i<intarr.length;i++)
{
c = intarr[i];
if(c > m)
m = c;
}
return m;
}
@GET
@Produces(MediaType.TEXT_HTML)
public String getSVGDraw()
{
String htmlstr;
int width = 600;
int height = 300;
int startx = 60;
int starty = 30;
// if width height ==0 then => error
int maxdatavalue = this.getMax(this.numbers);
int datapoints = numbers.length;
String coordi = "<path d='M"+String.valueOf(startx)+" "+String.valueOf(starty)+" L"+String.valueOf(startx)+" "+
String.valueOf(height + starty)+" L"+ String.valueOf(width + startx)+" "+ String.valueOf(height + starty) +
"' fill='none' stroke='black' stroke-width='2'/>" +
"<text x='"+String.valueOf(startx - 10)+"' y='"+String.valueOf(starty -10)+"'>y=max:"+String.valueOf(maxdatavalue)+"</text>" +
"<text x='"+String.valueOf(startx + width + 10)+"' y='"+String.valueOf(starty + height + 10)+"'>x=max:"+String.valueOf(datapoints-1)+"</text>" +
"<text x='"+String.valueOf(startx - 10)+"' y='"+String.valueOf(height + starty + 10)+"'>0</text>";
float rw = (float)width / (float)datapoints;
float rh = (float)height / (float)maxdatavalue;
String points = "";
// System.out.println(height+","+maxdatavalue+","+rh);
for(int i=0;i<datapoints;i++)
{
points += " " + String.valueOf((int)(startx + i*rw)) + "," + String.valueOf((starty+height-(float)numbers[i]*(float)rh));
//System.out.println( " " + String.valueOf(startx + (int)(i*rw)) + "," + String.valueOf((float)starty+(((float)numbers[i])*rh)));
}
int nhl = (int)(height/25); // num of horizontal line
int nvl = (int)(width/100); // num of vertical line
if(nhl >= maxdatavalue)
nhl = (int)maxdatavalue;
if(nvl >= datapoints)
nvl = datapoints;
boolean isdrawdotlinehor = false;
boolean isdrawdotlinevor = false;
if(nhl >= 1)
isdrawdotlinehor = true;
if(nvl >= 1)
isdrawdotlinevor = true;
String dotLinehor = "";
String dotLinevor = "";
if(isdrawdotlinehor)
{
for(int i=1; i<nhl;i++)
{
dotLinehor += "<text x='"+String.valueOf(startx - 10)+"' y='"+String.valueOf(starty + height/nhl*i)+"' text-anchor='end'>"+String.valueOf(maxdatavalue - (int)((float)maxdatavalue/(float)nhl*(float)i))+"</text>"+
"<line x1='"+String.valueOf(startx)+"' y1='"+String.valueOf(starty + height/nhl*i)+"' x2='"+ String.valueOf(width + startx)+
"' y2='"+String.valueOf(starty + height/nhl*i)+"' stroke='gray' stroke-dasharray='2'/>";
}
}
//System.out.println(nvl);
if(isdrawdotlinevor)
{
for(int i=1; i<nvl;i++)
{
dotLinehor += "<text x='"+String.valueOf(startx + width/nvl*i)+"' y='"+String.valueOf(starty + height + 20)+"' text-anchor='middle'>"+String.valueOf((int)((float)datapoints/(float)nvl*(float)i))+"</text>"+
"<line x1='"+String.valueOf(startx + width/nvl*i)+"' y1='"+String.valueOf(starty)+"' x2='"+String.valueOf(startx + width/nvl*i)+
"' y2='"+String.valueOf(starty + height)+"' stroke='gray' stroke-dasharray='2'/>";
}
}
String drawline = "<polyline points='"+points+"' fill='none' stroke='red' />";
String svgstr = "<svg xmlns=\"http://www.w3.org/2000/svg\" version=\"1.1\" width='"+String.valueOf(startx + width + 100)+
"px' height='"+String.valueOf(starty + height + 100)+"px'>" +
coordi +
dotLinehor +
dotLinevor +
drawline +
"</svg>" ;
htmlstr = " <html>" +
"<body>" +
svgstr +
"</body>" +
"</html>";
return htmlstr;
}
}
Draw SVG Graphics using Java
最新推荐文章于 2021-03-06 23:45:52 发布