如何有效地找到任何给定的规则或不规则多边形的周长?
我有一个包含多边形点的列表(至少它包含 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/