package com.zhgd.xmgl.util; import java.util.ArrayList; import java.util.Optional; public class PolygonUtil { /** * 五边形面积 * * @param r 从五边形中心到顶点的距离,计算五边形的面积 * @return */ public static double pentagonArea(double r) { double s = 2 * r * Math.sin(Math.PI / 5); return (5 * Math.pow(s, 2)) / (4 * Math.tan(Math.PI / 5)); } /** * 八边形面积 * * @param r * @return */ public static double octagonArea(double r) { double s = 2 * r * Math.sin(Math.PI / 8); return (8 * Math.pow(s, 2)) / (4 * Math.tan(Math.PI / 8)); } /** * 多边形面积 * * @param r * @return */ public static double polygonArea(double r, int edgeNum) { double s = 2 * r * Math.sin(Math.PI / edgeNum); return (edgeNum * Math.pow(s, 2)) / (4 * Math.tan(Math.PI / edgeNum)); } /** * 计算雷达图面积 * * @param r 从多边形中心到顶点的距离 * @param edgeNum 边数 * @param data 三角形的边长 * @return */ public static double calRadioArea(double r, int edgeNum, Double... data) { double sinVal = Math.sin(Math.toRadians(360.0 / edgeNum)); ArrayList dataList = new ArrayList<>(); for (Double d : data) { dataList.add(Optional.ofNullable(d).orElse(0.0)); } ArrayList doubles = new ArrayList<>(); for (int i = 0; i < edgeNum; i++) { double r1; if (i == edgeNum - 1) { r1 = dataList.get(i) * dataList.get(0) * sinVal / 2; } else { r1 = dataList.get(i) * dataList.get(i + 1) * sinVal / 2; } doubles.add(r1); } double sum = doubles.stream().mapToDouble(value -> value).sum(); return sum / pentagonArea(1); } public static void main(String[] args) { System.out.println(calRadioArea(1, 5, 1.0, 1.0, 1.0, 1.0, 1.0)); } }