java 根据点画不规则封闭图形

public void sketch(List<Point> pointList) throws FileNotFoundException , IOException{  
         
       BufferedImage bi = new BufferedImage  //得到图片缓冲区  
               (512,512,BufferedImage.TYPE_INT_RGB);//INT精确度达到一定,RGB三原色,宽度512,高度512  
         
       Graphics2D g2 = (Graphics2D) bi.getGraphics();//得到它的绘制环境(这张图片的笔)  
       g2.setColor(Color.BLACK);   //设置画笔黑色  
  
       g2.fillRect(0, 0, bi.getWidth(), bi.getHeight()); //全图填充黑色  
       GeneralPath gp=new GeneralPath(); //shape的子类,表示一个形状  
  
       Point p1=pointList.remove(0);  
       Point p2=pointList.remove(0);  
       gp.append(new Line2D.Double(p1.x,p1.y,p2.x,p2.y),true); //两个点画第一条直线  
         
       for(Point point: pointList){    //直线分别与余下的点相连  
           gp.lineTo(point.x,point.y);   
       }  
       gp.closePath(); //闭合图形  
       g2.setColor(Color.WHITE);   //设置画笔白色  
       g2.fill(gp);    //填充图形  
       ImageIO.write(bi,"JPEG",new FileOutputStream("G:\\a.jpg"));//保存图片 JPEG表示保存格式  
   }  
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java绘制不规则几何图形,比如划曲线,写字,线条随意画,如截图所示,甚至可以写出文字:   不规则图形绘制代码:   public class IrregularShapeDemo extends JFrame {    GeneralPath gPath= new GeneralPath(); //GeneralPath对象实例   //构造函数   public IrregularShapeDemo() {    super("不规则图形绘制"); //调用父类构造函数    enableEvents(AWTEvent.MOUSE_EVENT_MASK|AWTEvent.MOUSE_MOTION_EVENT_MASK); //允许事件    setSize(300, 200); //设置窗口尺寸    setVisible(true); //设置窗口可视    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //关闭窗口时退出程序    }    public void paint(Graphics g) { //重载窗口组件的paint()方法    Graphics2D g2D = (Graphics2D)g; //获取图形环境    g2D.draw(gPath); //绘制路径    }    public static void main(String[] args) {    new IrregularShapeDemo();    }    protected void processMouseEvent(MouseEvent e) { //鼠标事件处理    if(e.getID() == MouseEvent.MOUSE_PRESSED) {    aPoint = e.getPoint(); //得到当前鼠标点    gPath = new GeneralPath(); //重新实例化GeneralPath对象    gPath.moveTo(aPoint.x,aPoint.y); //设置路径点    }    }    protected void processMouseMotionEvent(MouseEvent e) { //鼠标运动事件处理    if(e.getID() == MouseEvent.MOUSE_DRAGGED) {    aPoint = e.getPoint(); //得到当前鼠标点    gPath.lineTo(aPoint.x, aPoint.y); //设置路径    gPath.moveTo(aPoint.x, aPoint.y);    repaint(); //重绘组件    }    }   }
如果要合并多个不规则图形的经纬度信息,并获取其外边界经纬度,可以按照以下步骤进行: 1. 将每个不规则图形的经纬度信息转化为对应的多边形,即将地图的经纬度坐标转化为一个由多个点组成的多边形。 2. 将所有多边形进行合并,得到一个包含所有不规则图形的复合多边形。 3. 计算该复合多边形的外接矩形,即为所有不规则图形的外边界经纬度。 下面是一个简单的Java代码示例,演示如何实现上述步骤: ```java import com.esri.core.geometry.*; import java.util.List; public class MapUtils { public static double[] getMapBoundary(List<double[]> mapList) { // 创建一个空的复合多边形 Polygon geometry = new Polygon(); for (double[] map : mapList) { // 将地图信息转化为多边形 Polygon mapPolygon = createPolygon(map); // 将多边形添加到复合多边形中 geometry = (Polygon) GeometryEngine.union(geometry, mapPolygon, new SpatialReference(4326)); } // 计算复合多边形的外接矩形 Envelope envelope = new Envelope(); geometry.queryEnvelope(envelope); return new double[]{envelope.getXMin(), envelope.getYMin(), envelope.getXMax(), envelope.getYMax()}; } private static Polygon createPolygon(double[] map) { // 创建一个空的多边形 Polygon polygon = new Polygon(); // 添加多边形的每个点 polygon.startPath(map[0], map[1]); polygon.lineTo(map[2], map[1]); polygon.lineTo(map[2], map[3]); polygon.lineTo(map[0], map[3]); polygon.closePathWithLine(); return polygon; } } ``` 该代码中,getMapBoundary方法接受一个包含多个不规则图形信息的List,每个不规则图形信息由一个长度为4的double数组表示,分别表示该图形的左上角和右下角经纬度坐标。方法会遍历所有不规则图形信息,将它们转化为对应的多边形,并将多边形添加到一个空的复合多边形中。最后,方法会计算复合多边形的外接矩形,并返回一个长度为4的double数组,分别表示外边界矩形的左上角和右下角经纬度坐标。注意,该代码使用了Esri Geometry API,需要添加相关依赖。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值