用Graphic2D画一个中国地图,用jpanel显示。相同的数据我用matlab画,图很好很正确。但是java出来之后有一部分是直线。点集已经有了(点坐标很大,基本在10^6左右),但是由于drawLine方法只能支持int型的坐标,不支持float坐标,所以缩放之后,精度不够造成图不正确。
所以请教一下有没有方法可以解决的。我自己有几个方案
1、先把图按照最大比例画出来,再把图缩小
2、或者有什么方法能叫它支持float型
3、有没有其他好用的jar包可以画图?不知道如何实现。
所以请教一下有没有方法可以解决的。我自己有几个方案
1、先把图按照最大比例画出来,再把图缩小
2、或者有什么方法能叫它支持float型
3、有没有其他好用的jar包可以画图?不知道如何实现。
解决方案 »
- 结果集不可更新
- 1000RMB求解JGraph对象串行化和反串行化问题
- 一个简单的加密/解密小程序执行出错
- 二进制简单操作!过年送分,并祝各位新年快乐,钱途无量:)
- 为什么出这样的错误?method isDigit(java.lang.Character) not found in class java.lang.Character
- 请问各位大侠 这几行具体什么意思可以给我讲解下吗?麻烦了!
- 同样是一个在编译时的错误!
- java简单程序不能运行的问题。请各位指点迷津。
- this关键字如何使用?
- {0}的正则表达式怎么写
- 请教一个给 JavaBean set值的问题?
- ftpClient中的rename这个改名方法是怎么调用的
最少有三种高精度的方法绘制你的说的直线
Line2D.Float(float X1, float Y1, float X2, float Y2)
Line2D.Float(Point2D p1, Point2D p2)
Path.createPath,
MoveTo,
Path.end
Graphics2D g2d=(Graphics2D) g;
//清屏
g2d.clearRect(0, 0, WIDTH, HEIGHT);
g2d.setColor(Color.white);
g2d.fill3DRect(0, 0, WIDTH, HEIGHT,true);
//画笔颜色
g2d.setColor(Color.BLUE);
g2d.setFont(new Font("隶书", Font.PLAIN, 45));
g2d.drawString(title, 200, 30);
//站点
g2d.setColor(Color.RED);
g2d.setFont(new Font("宋体", Font.PLAIN, 10));
File f = new File("C:\\map.txt");
InputStream input = new FileInputStream(f);
BufferedReader b = new BufferedReader(new InputStreamReader(input));
//StringBuffer buffer = new StringBuffer();
String value = b.readLine();
int k = 0;
while(value != null){//如果行不为空
//buffer.append(" "+value);
//把该行转换为数组
String[] temp = value.toString().replaceFirst(" ","").split("\\s+");
//int [] number = new int[temp.length];
float[] number = new float[temp.length];
for(int i=0;i<temp.length;i++){
try{
//number[i] = Integer.parseInt(temp[i]);
number[i] = Float.parseFloat(temp[i]);
//System.out.print(number[i]+" ");
}catch(Exception e){
System.out.println("文件中存在非数字字符!");
}
}
//画图
for(int j=1;j<number.length-2;)
{
// Line2D.Float((number[j]/1000+3150)/rate,
// (number[j+1]/1000-1950)/rate,
// (number[j+2]/1000+3150)/rate,
// (number[j+1]/1000-1950)/rate); g2d.drawLine((int)((number[j]/1000+3150)/rate),
(int)((number[j+1]/1000-1950)/rate),
(int)((number[j+2]/1000+3150)/rate),
(int)((number[j+1]/1000-1950)/rate));
j+=2;
}
// System.out.println("\n");
value = b.readLine();//读取下一行
k++;
if (k==100){
break;
}
}
}我是把这个画直线的方法重构JPanel的paint()方法,然后用JPanel显示画好的地图。number是一个数组,里面是各个点的xyxyxy值。数组第一个数是点数,没什么用。所以读取的时候从number[1]开始。
Line2D那个您能不能给我一个详细的例子?我直接用,他说缺少float类。刚刚接触java画图,不胜感激!
http://download.csdn.net/detail/climbingpig/1322662#comment
这个地址。
g2d.drawLine((int)((number[j]/1000+3150)/rate),
(int)((number[j+1]/1000-1950)/rate),
(int)((number[j+2]/1000+3150)/rate),
(int)((number[j+1]/1000-1950)/rate));
最后一句应该是j+3!啊。写错了