根据坐标求任意多边形面积

C渣渣…… 2019-04-14 09:57:12
废话不多说,看代码: #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; } 不过该方法有个缺陷就是输入多边形顶点坐标时必须按顺时针或者逆时针输入,不然的话就会计算错误。
...全文
1245 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
竞天问 2020-06-24
  • 打赏
  • 举报
回复
随机顺序输入还要面积正确?
这个多边形是凸的吗?要不你查一下凸包算法?
寻开心 2020-03-14
  • 打赏
  • 举报
回复
四个点, 组成一个矩形, 1 2 3 4 假如是逆时针的, 你改成1 3 2 4, 结果是什么, 一个漏斗形状了, 那面积能一样?!
寻开心 2020-03-14
  • 打赏
  • 举报
回复
你还是先研究研究这个公式的理论吧


顺序代表的是什么

那代表一个个的边, 换了顺序,
那多边形的形状还是原来的吗?!
面积还可能和原来一样吗?!

渣娃使用者 2020-03-14
  • 打赏
  • 举报
回复
引用 1 楼 C渣渣…… 的回复:
请问怎么解决随机输入坐标而不用按顺时针或者逆时针。
我觉得,在计算前,按照x或者y,排一下点的顺序就行吧。
C渣渣…… 2019-04-14
  • 打赏
  • 举报
回复
请问怎么解决随机输入坐标而不用按顺时针或者逆时针。

5,530

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 模式及实现
社区管理员
  • 模式及实现社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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