Slicker 算法用于在 Java 中查找多边形的面积
"多边形"一词源于希腊语"Poly",意为"许多"和"gon",意为"角度"。多边形是通过连接三条或三条以上直线创建的二维封闭平面形状。例如,三角形、四边形、六边形等。
尽管在本文中有很多方法可以找到多边形的面积,但我们将使用 slicker 算法来实现此目的。
Slicker 算法用于查找多边形的面积
Slicker 算法
您必须知道两个事实,首先,根据数学惯例,y 方向指向上方始终为正。其次,根据计算机系统,y 方向指向下方且始终为正。该算法通过使用正 y 向下坐标逆时针列出顶点来提供有效的解决方案。它将抵消这两个事实,从而产生一个正区域。
现在让我们讨论一个实现 slicker 算法的 java 程序。
算法
步骤 1 - 创建一个类"Slicker"及其两个内部类"Coordinates"和"Poly"。
步骤 2 - 声明并初始化一个常量"MAXIMUM"来限制多边形的边数。
步骤 3 - 在内部类"Poly"中创建类"Coordinates"的对象数组。然后,创建类"Poly"的构造函数以将坐标存储在该对象数组中。
步骤 4 - 进一步定义方法"calcAr"以及参数"cr"。在这个方法中,我们将创建一个 for 循环,该循环将运行到多边形的边数并计算面积。
步骤 5 - 现在在主方法中,创建一个"Poly"类的对象"cr"。然后,我们将根据用户获取多边形的边数和坐标。
步骤 6 - 最后,我们将调用方法"calcAr",并使用 if-else 块检查面积是正数还是负数。如果是正数,则将执行"if"块语句,否则执行 else 块。
示例
import java.util.*; public class Slicker { // 表示多边形的最大边数 static final int MAXIMUM = 50; static class Coordinates { double c1, c2; // 声明坐标 } static class Poly { // 坐标类的数组对象 Coordinates cr[] = new Coordinates[MAXIMUM]; int sides; Poly() // 构造函数 { // to accept input of coordinates for (int i = 0; i < MAXIMUM; i++) cr[i] = new Coordinates(); } } // 计算面积的方法 static double caclAr(Poly cr) { double res = 0; for (int i = 0; i < cr.sides; i++) { int j = (i + 1) % cr.sides; res += (cr.cr[i].c1 * cr.cr[j].c2) - (cr.cr[j].c1 * cr.cr[i].c2); } return res / 2; } static public void main(String[] args) { Poly cr = new Poly(); // 'Poly' 类的对象 // 用于用户输入的扫描仪类的对象 Scanner in = new Scanner(System.in); System.out.print("输入边数:"); cr.sides = in.nextInt(); // 从用户那里获取坐标 System.out.println("输入 c1 和 c2 坐标:"); for (int i = 0; i < cr.sides; i++) { cr.cr[i].c1 = in.nextDouble(); cr.cr[i].c2 = in.nextDouble(); } // 调用用户定义的方法 double caclAr = caclAr(cr); if (caclAr > 0) { System.out.print("给定多边形的面积:" + caclAr); } else { System.out.print("给定多边形的面积:" + (caclAr * -1)); } } }
输出
输入边数:4 输入 c1 和 c2 坐标: 2 3 3 5 5 8 8 2 给定多边形的面积:17.0
结论
任何平面形状都不能被视为多边形,例如,虽然圆是封闭的平面形状,但它没有任何边。所以我们不能称它为多边形。在本文中,我们创建了一个 Java 程序,使用 slicker 算法来计算多边形的面积。