求多边形面积

C渣渣…… 2019-04-16 11:43:51
随意输入多边形各个点的坐标(随意输入不按点顺时针或者逆时针顺序),如何求该多边形面积
...全文
138 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2019-04-17
  • 打赏
  • 举报
回复
636f6c696e 2019-04-16
  • 打赏
  • 举报
回复
随便取一个点,依次算出这个点和其他顶点连线的斜率并根据斜率来排序,就能获得顶点的顺序。 后面就像你的算法中那样,把多边形分割成n-1个三角形计算面积和就行了
C渣渣…… 2019-04-16
  • 打赏
  • 举报
回复
引用 1 楼 赵4老师的回复:
随意输入不按点顺时针或者逆时针顺序 根本无法保证能形成一个多边形!
#include <iostream> #include <math.h> using namespace std; class Area { public: void In(); void Calucate(); void Out(); private: int N; float sum; float x1,x2,x3,y1,y2,y3; }; void Area::In() { sum = 0; cout << "输入多边形顶点数:" ; cin >> N; cout << "输入坐标按多边形顶点的顺时针或逆时针输入!" << endl; if(N==3) { cout << "请输入第1个顶点坐标:"; cin >> x1 >> y1; cout << "请输入第2个顶点坐标:"; cin >> x2 >> y2; cout << "请输入第3个顶点坐标:"; cin >> x3 >> y3; Calucate(); }else { cout << "请输入第1个顶点坐标:"; cin >> x1 >> y1; cout << "请输入第2个顶点坐标:"; cin >> x2 >> y2; cout << "请输入第3个顶点坐标:"; cin >> x3 >> y3; Calucate(); for(int i=3;i<N;i++) { cout << "请输入第" << i+1 << "个顶点坐标:"; if((i+1)%2==0) { cin >> x2 >> y2; Calucate(); }else { cin >> x3 >> y3; Calucate(); } } } } void Area::Calucate() { float Cir,L1,L2,L3; L1 = sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)); L2 = sqrt((x1-x3)*(x1-x3)+(y1-y3)*(y1-y3)); L3 = sqrt((x2-x3)*(x2-x3)+(y2-y3)*(y2-y3)); Cir = (L1+L2+L3)/2; sum += sqrt(Cir*(Cir-L1)*(Cir-L2)*(Cir-L3)); } void Area::Out() { cout << "该多边形面积为:" << sum << endl; } int main() { Area polygon; polygon.In(); polygon.Out(); return 0; } (按顺时针或者逆时针输入求面积) 按顺序输入坐标的缺陷就是用户输入时自己不能保证输入的点是顺时针或者逆时针的时候怎么办?
C渣渣…… 2019-04-16
  • 打赏
  • 举报
回复
引用 1 楼 赵4老师的回复:
随意输入不按点顺时针或者逆时针顺序 根本无法保证能形成一个多边形!
可以判断一下,所有坐标都输入之后判断若不是多边形再提示重新输入不行吗?
赵4老师 2019-04-16
  • 打赏
  • 举报
回复
随意输入不按点顺时针或者逆时针顺序 根本无法保证能形成一个多边形!
  • 打赏
  • 举报
回复
几何方法,分解成若干三角形,分别求面积,相加
图形学方法,多边形内部填充某种颜色,计数该颜色像素数
绿色盒子 2019-04-16
  • 打赏
  • 举报
回复

3,881

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 其它技术问题
社区管理员
  • 其它技术问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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