1.计算不采用其他第三方jar包的方式。
/**
* 计算多边形面积
*/
public class JisuanMianji {
/**
* 求出多边形的面积
* @param xy
* @return
*/
public static float mianji(String xy)
{
int i=0;
float temp=0;
//进行循环计算,
for(;i<xy.split(";").length-1;i++)
{
temp+=(Float.valueOf(xy.split(";")[i].split(":")[0])-Float.valueOf(xy.split(";")[i+1].split(":")[0]))*
(Float.valueOf(xy.split(";")[i].split(":")[1])+Float.valueOf(xy.split(";")[i+1].split(":")[1]));
}
//最后在对尾点坐标和首点坐标进行计算
temp+=(Float.valueOf(xy.split(";")[i].split(":")[0])-Float.valueOf(xy.split(";")[0].split(":")[0]))*
(Float.valueOf(xy.split(";")[i].split(":")[1])+Float.valueOf(xy.split(";")[0].split(":")[1]));
return temp/2;
}
/**
* 求出多边形的周长
* @param xy
* @return
*/
public static double zhouchang(String xy)
{
int i=0;
double temp=0;
//进行循环计算,
for(;i<xy.split(";").length-1;i++)
{
//采用两两坐标进行勾股定理的方式计算,添加了绝对值的方式,避免负数,再用开根号的方式获取两点距离,
temp+=Math.sqrt(Math.pow(Math.abs(
Double.valueOf(xy.split(";")[i].split(":")[0])-
Double.valueOf(xy.split(";")[i+1].split(":")[0])
),2)+
Math.pow(Math.abs(
Double.valueOf(xy.split(";")[i].split(":")[1])-
Double.valueOf(xy.split(";")[i+1].split(":")[1])
),2));
}
//最后在对尾点坐标和首点坐标进行计算
temp+=Math.sqrt(Math.pow(Math.abs(
Double.valueOf(xy.split(";")[i].split(":")[0])-
Double.valueOf(xy.split(";")[0].split(":")[0])
),2)+
Math.pow(Math.abs(
Double.valueOf(xy.split(";")[i].split(":")[1])-
Double.valueOf(xy.split(";")[0].split(":")[1])
),2));
return temp/2;
}
public void main(String args[])
{
//多边形坐标字符串,每一个分号代表一个点的多边形的坐标。每一个冒号代表一个横坐标和一个纵坐标
String xy="12:23;24:35;56:67;78:89;45:67";//多边形最少三个点,示例数据仅供参考。
System.out.println("多边形面积是:"+mianji(xy));
System.out.println("多边形周长是:"+zhouchang(xy));
}
}