Slicker 算法用于在 Java 中查找多边形的面积

javaobject oriented programmingprogramming

"多边形"一词源于希腊语"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 算法来计算多边形的面积。


相关文章