java - 任何多边形的周长 - java

标签 java algorithm geometry

如何有效地找到任何给定的规则或不规则多边形的周长?

我有一个包含多边形点的列表(至少它包含 3 个点)所以多边形开始可以是三角形、矩形、五边形、六边形等等

protected List<Point> coordinates = new ArrayList<Point>();

我的类(class)要点如下:

public class Point {

    private double _x_, _y_;
    public double y;
    public double x;
    public Point() {
        _x_ = 0;
        _y_ = 0;
    }
    public Point(double x, double y) { 
        setX(x); setY(y); 
    }
    public double getX() { return _x_; }
    public double getY() { return _y_; }
    public void setX(double x) { assert x>0; _x_ = x; }
    public void setY(double y) { assert y>0; _y_ = y; }

    public double dist (Point p) { 
        double dx = getX() - p.getX();
        double dy = getY() - p.getY();
        return Math.sqrt(dx*dx + dy*dy); 
    }


    public String toString() {
        return ((int)getX()+" "+(int)getY());
    }
}

所以我正在寻找任何给定多边形周长的通用公式? 这甚至可能吗?

我想在具有子类三角形和矩形的抽象多边形类上实现它,但我想要一个适用于所有多边形的通用公式。

我尝试了以下方法:

public double perimeter() {
    double distance = 0;
    for(int i = 0; i < coordinates.size(); i++) {
        for(int j = i+1; j < coordinates.size(); j++) {
            if(j > i) {
                distance += coordinates.get(i).dist(coordinates.get(j));
            }
        }
    }
    return distance;
}

最佳答案

如果点是从第一个点连接到第二个点,第二个点连接到第三个点,.....,最后一个点连接到第一个点,则这里是查找周长的代码。

public double perimeter() {
    double distance = 0;
    int len = coordinates.size();
    for(int i = 0; i < len; i++) {
         distance += coordinates.get(i).dist(coordinates.get((i+1)%len));
    }
    return distance;
}

关于java - 任何多边形的周长 - java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47077313/

相关文章:

java - 如何在较新版本的 Android 3.1 及更高版本中实现 Firebase Recycler Adapter?

opengl - 如何使用 3x3 单应性将立方体增加到特定位置

javascript - 在 div 内动态创建最大宽度/适合的三 Angular 形

python - 将点几何图形转换为列表

java.lang.ArithmeticException :/by zero

java - 自定义 Lombok super builder

java - Crawler4j 无声地停止

string - 构建长度为 L 且恰好有 N 个回文的字符串

arrays - 我可以使用 Day-Stout-Warren 来重新平衡在数组中实现的二叉搜索树吗?

algorithm - 学习编程技巧的优先顺序及其他建议