求面积问题,请大家来帮忙讨论!

queena 2003-10-20 11:46:24
问题是:求多边型的面积;
1.先给出顶点数N;
2.然后按顺序给出每一个顶点:
3.判断是否是多边型,是,输出;不是,输出不是.

N=5
(0,0)(0,1)(1,1)(0.5,0.5)(1,0)注意这里的点是按顺序输入的;
那么输出:
是多边型;面积是:0.75

N=4
(0,0)(1,0)(0,1)(1,1)
那么输出不是多边型

...全文
51 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
queena 2003-10-22
  • 打赏
  • 举报
回复
对于凹多边型我的想法是:
任取一点作为寻找起点,按照起点开始顺序走;
对每相邻的俩条线如果它们的夹角是小于180度
那么就计算接下去的两条;
如果大于的话就把第二条的起点与本次寻找的起点相连
形成凸边型计算;
那么就把凹多边型分成几个凸多边型进行计算.
谢谢zhang21cnboy(事了抚衣去,不留身与名)
的代码
zhang21cnboy 2003-10-22
  • 打赏
  • 举报
回复
凹多边形的我也有,不过呢,这个东东就不给你了!不然人家说我泄漏秘密哦!
queena 2003-10-22
  • 打赏
  • 举报
回复
呵呵还是谢谢了
zhang21cnboy 2003-10-21
  • 打赏
  • 举报
回复
上代码:
package com.kefa.zhang.math;

import java.awt.Point;
import java.lang.Math;
import java.util.Vector;
/**
* <p>描述:计算两点之间的距离,计算多边形的面积</p>
*
* */
public class MeasureMath {
public MeasureMath() {
}

/**
* 计算两点之间的距离
* */
public static double distBetween2Dots(Point point1,Point point2){
double res = Math.sqrt((point2.getX()-point1.getX()) * (point2.getX()-point1.getX())
+ (point2.getY()-point1.getY()) * (point2.getY()-point1.getY()));
return res;
}

/**
* 按顺序计算各点之间的距离之和,带方向
* **/
public static double distAmongNDots(Vector points){
int j=0;
double res1 = 0.0;
for (int i=0;i<points.size();i++){
Point p1 = (Point)points.get(j);
Point p2 = (Point)points.get(i);
res1 += MeasureMath.distBetween2Dots(p1,p2);
j = i;
}
return res1;
}

/**
* 计算三角形的面积
* */
public double getAreaOf3Angels(Point p1,Point p2,Point p3){
double a = MeasureMath.distBetween2Dots(p1,p2);
double b = MeasureMath.distBetween2Dots(p2,p3);
double c = MeasureMath.distBetween2Dots(p1,p3);

double all = 0.5*(a+b+c);

return Math.sqrt(all*(all-a)*(all-b)*(all-c));
}

//判断是否是凸多边形
public boolean validateAngels(Vector points){
boolean rt = true;

int j = 0;
int z = 0;
boolean left=false,right = false;
for(int i=0;i<points.size();i++){

j = (i+1)%points.size();
z = (i+2)%points.size();


Point p1 = (Point)points.get(i);
Point p2 = (Point)points.get(j);
Point p3 = (Point)points.get(z);


Point ft1 = new Point();
ft1.setLocation(p2.getX()-p1.getX(),p2.getY()-p1.getY());

Point ft2 = new Point();
ft2.setLocation(p3.getX()-p1.getX(),p3.getY()-p1.getY());

//求叉积

double cj = ft1.getX()*ft2.getY() - ft1.getY()*ft2.getX();



if (cj < 0) //左边
left = true;
else //右边
right = true;

if((left == true) && (right == true)){//如果有左边,也有右边,则一定不是凸多边形
rt = false;
break;
}
// i++;
j++;
z++;

}
return rt;
}
/**
* 计算多边形面积
* */
public double getAreaOfNAngels(Vector points)throws Exception{

if(!this.validateAngels(points)){
throw new StyleError("计算面积不允许凹多边形");
}
double rts = this.calculArea(points);
return rts;

}

private double calculArea(Vector points){
double rs = 0.0;

Point p1 = (Point)points.get(0);
Point p2 = (Point)points.get(1);
Point p3 = (Point)points.get(2);

rs = this.getAreaOf3Angels(p1,p2,p3);
Vector new1 = points;
new1.remove(1);
if (new1.size() >=3)
return rs + calculArea(new1);
else
return rs;
}

public static void main(String[] args) {
MeasureMath measureMath1 = new MeasureMath();
}

}

class StyleError extends Exception {
String ErrorMsg = null;
public StyleError(String msg) {

ErrorMsg = msg;
}

public String toString() {
return ErrorMsg;
}
}
zhang21cnboy 2003-10-21
  • 打赏
  • 举报
回复
可以计算,不过凹多边形计算起来有点麻烦,我这里有计算凸多边形的代码。

leotonny 2003-10-21
  • 打赏
  • 举报
回复
N=4
(0,0)(1,0)(0,1)(1,1)
确实不是多边形,因为必须按顺序连线

应该能够做得,只不过现在还没什么思路。
关注中...
qiyongjun2003 2003-10-21
  • 打赏
  • 举报
回复
比如
n=4
{0,0},{0.2,0.2},{0.1,3),{-0.1,5}
她也是四边形,他的面积如何算?
qiyongjun2003 2003-10-21
  • 打赏
  • 举报
回复
N=4
(0,0)(1,0)(0,1)(1,1)
那么输出不是多边型
这个为什么不是多边形?它可是正规的长方形
还有如果他输入的顶点构成的多边形不是正规的象什么长方形之类的面积就不好算了
比如他输入构成的多边形很不正规。

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧