74 lines
2.0 KiB
Java
74 lines
2.0 KiB
Java
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<Double> dataList = new ArrayList<>();
|
|
for (Double d : data) {
|
|
dataList.add(Optional.ofNullable(d).orElse(0.0));
|
|
}
|
|
ArrayList<Double> 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 / polygonArea(r, edgeNum);
|
|
}
|
|
|
|
public static void main(String[] args) {
|
|
System.out.println(calRadioArea(1, 5, 1.0, 1.0, 1.0, 1.0, 1.0));
|
|
}
|
|
|
|
}
|