Java—计算多边形面积

题意:
test.txt文件中每一行是一个二维坐标,如:(2,4),这些坐标连起来是一个多边形,请计算这个多边形的面积

/**
 * @Author: whm
 * @Description: 计算多边形面积
 * @Date:Created 2019/11/28
 */
public class PolygonArea {

    public static void main(String[] args) {
        //文件路径
        String pathname="D:\\test.txt";
        //创建文件对象
        File file=new File(pathname);

        //每行的字符串
        String s=null;
        //声明字符输入流
        BufferedReader br=null;

        //多边形面积和
        double sum=0;

        //tmp结尾的是用于值的传递
        double xTmp=0;
        double yTmp=0;

        //标记坐标个数
        int tag=0;
        //记录第一个坐标的x,y
        double xFirst=0.0;
        double yFirst=0.0;

        try {
            br=new BufferedReader(new FileReader(file));

            //每次读取一个二维坐标
            while((s=br.readLine())!=null) {
                /*将文件中形如:12,14 这样二维坐标存入数组,
                并分别读取当前坐标的x和y*/
                String [] arr=s.split(",");
                Double xCurrent=(double) Integer.parseInt(arr[0]);
                Double yCurrent=(double) Integer.parseInt(arr[1]);

                /*计算面积:
                如果是第一个坐标暂时记录,
                否则sum+=((yTmp-yCurrent)*(xTmp+xCurrent))*0.5,
                (xTmp,yTmp)代表上一行的坐标值
                (xCurrent,yCurrent)代表当前这一行的坐标值*/
                if(tag!=0) {
                    sum+=((yTmp-yCurrent)*(xTmp+xCurrent))*0.5;
                    //计算完面积后,进入下一次循环前需要将“当前坐标”交换为“上一行的坐标”
                    xTmp=xCurrent;
                    yTmp=yCurrent;
                }else {
                    xFirst=xCurrent;
                    yFirst=yCurrent;
                }
                tag++;
            }

            //用最后读取的坐标与第一次读取的坐标进行一次面积运算
            sum+=((yTmp-yFirst)*(xTmp+xFirst))*0.5;

            System.out.println(sum);

        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            try {
                if(br!=null) br.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

}

你可能感兴趣的:(*【Java】,日常的算法练习)