任意多边形的周长-java
如何有效地找到任意给定正多边形或不规则多边形的周长 我有一个包含多边形点的列表(至少包含3个点),因此多边形可以是三角形、矩形、五边形、六边形等等任意多边形的周长-java,java,algorithm,geometry,Java,Algorithm,Geometry,如何有效地找到任意给定正多边形或不规则多边形的周长 我有一个包含多边形点的列表(至少包含3个点),因此多边形可以是三角形、矩形、五边形、六边形等等 protected List<Point> coordinates = new ArrayList<Point>(); 所以我在寻找任意给定多边形周长的一般公式? 这可能吗 我想在一个抽象多边形类上实现这一点,这个抽象多边形类有子类triangle和rectangle,但我想要一个适用于所有多边形的通用公式 我尝试了以下方法
protected List<Point> coordinates = new ArrayList<Point>();
所以我在寻找任意给定多边形周长的一般公式?
这可能吗
我想在一个抽象多边形类上实现这一点,这个抽象多边形类有子类triangle和rectangle,但我想要一个适用于所有多边形的通用公式
我尝试了以下方法:
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;
}
公共双周界(){
双倍距离=0;
对于(int i=0;ii){
距离+=坐标.get(i).dist(坐标.get(j));
}
}
}
返回距离;
}
如果点从第一个点连接到第二个点,第二个点连接到第三个点,…,最后一个点连接到第一个点,则以下是查找周长的代码
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;
}
公共双周界(){
双倍距离=0;
int len=coordinates.size();
对于(int i=0;i
规则多边形和不规则多边形的计算效率不同
对于正内接多边形,周长为2nr sin(π/n)
,计算时间不依赖于n
。(顺便说一下,对于非常大的n
,正弦与其参数是准相等的,周长简化为2πr
)
对于不规则的普立万,必须在连续顶点对之间累积欧几里德距离,这需要n
平方根求值
我建议通过两个索引避免代价高昂的模运算:
int len = coordinates.size();
for(int i = len - 1, j= 0; j < len; i= j, j++) {
distance += coordinates.get(i).dist(coordinates.get(j));
}
int len=coordinates.size();
对于(inti=len-1,j=0;j
多边形点按顺序排列。我是说我们知道这条线是从哪一点到哪一点的吗?是的,我们知道。这张单子把要点按顺序排好了。我有点困惑。周长应该是直线长度的总和,对吗?还是我遗漏了什么?是的。。。但是如果我有一个矩形,我有点(不是顺时针的)0->1,1->2,2->3,3->0我怎么能从3变为0?谢谢。哈哈,我一时忘记了java中的%了。哈哈,我太笨了,谢谢,我明白了。你知道我在一次实践考试中也忘了%。专门讨论如何枚举多边形边的整个网页。它指出,如果你先考虑关闭边,你可以省去<代码> %>代码>运算符的需要。