当前位置: 首页 > news >正文

基于C++实现图形周长面积计算软件

♻️ 资源

大小:6.75MB

➡️资源下载:https://download.csdn.net/download/s1t16/87453215

图形周长面积开发

项目概述

项目简介

图形周长面积计算软件,给用户提供了方便简洁的计算界面,可以为用户提供图形计算的选着,计算相对的图形计算,同时还可以选着绘制图形,计算用户绘制的图形面积;软件拥有良好的界面交互,为用户的使用带来便捷(如概念模型的绘制,当前选择的提示等)。

功能要求

编号

功能模块

功能描述(功能描述中要有数据,比如多少种飞机、动物;存储到什么文件。)

FUN_01

计算图形选择模块

根据用户图形选择对应计算图形,并在主界面上转换输入界面

FUN_02

计算模式转换

点击转换模式(面积计算模式—周长计算模式)转换,计算出不同的模式值。

Fun_03

概念模型展示

输入需要的数据点击确定后,会根据数据展示出对应的模型(及变化的模型)

Fun_04

数据输入

对应不同图形有不同的数据输入界面

Fun_05

坐标轴转换

根据设置转变坐标轴的值,以改变每个像素点代表的大小

Fun_06

图形绘制选择

可以选择需要绘制图像类型

Fun_07

图形绘制

在界面上绘制图形

Fun_08

绘制图形面积计算

根据坐标轴值和用户绘制的图形点击确定后计算图形面积

总体设计

类关系图,可由 VS 直接导出总体的类关系图;

给出结构关系图,并简要说明,结构的优缺点,从面向对象封装、继承及多态应用角度讨论。

Csimply 作为基类派生出椭圆,圆……等,QManu 类及菜单由 Qdate(输入数据保存模块),plotshap(概念模型模块),Qchoose(图形选择模块),paint(绘制图形模块)组和而成。PltWidget 是自己写的一个插件(如文本框可以插入页面)是一个坐标系可以在上面绘制图形,被插入到了 paint 中。图形有一个基类便于调用保存等,页面采用组和方式比较直观,但 manu 类过于庞大功能权限过大。

设计类图

每个类的类图应完整包含对应的类名、属性名称与数据类型、函数名及其对应返回值、参数。请使用 ArgoUML、StarUML 或自己百度找 UML 工具完成。比如下面这个类图:

普通图形的基类,派生出其他图形类(包含面积周长计算函数)。

由 Csimply 派生出的正方形类。

由 Csimply 派生出的长方形类。

由 Csimply 派生出的任意直线构成的图形类。

由 Csimply 派生出的圆形类。

由 Csimply 派生出的类。

由 Csimply 派生出的椭圆类。

由 Csimply 派生出的三角形类;

界面 QManu 类,既生成程序的界面。

程序界面中的概念模型绘制类;

输入数据管理类,既保存界面的输入数据。数据类。同时控制输入界面的变换。

界面中用户选择计算图形类,既当前用户选择了那个类。

画图类,界面点击画图后生成的界面,进行图形的绘制。

自己做的一个插件(坐标系) 插入 paint 类;在 paint 的 UI 中添加成基本控件。

核心算法

  • 不规则图形之任意直线图形周长面积计算。
  • 选取 p0 作为 y 坐标最小的点,如果 y 坐标相等,选取 x 坐标最小的点
  • 对剩余的点相对与 p0 点的极角进行排序。
  • 排序后分为三角形对各个三角形去求面积。

CConvexHul 类下的三个函数。

void CConvexHul::SortPoint() { int i,j; POINT temp(m_point[0].x,m_point[0].y); //选取作为基点 int index = 0; for (i = 0; i < m_nsize; i++) { if (m_point[i].y < temp.y || (m_point[i].y == temp.y&&m_point[i].x < temp.x)) { index = i; temp.x = m_point[i].x; temp.y = m_point[i].y; } } m_point[index] = m_point[0]; m_point[0] = temp; for (i = 1; i < m_nsize; i++) { for (j = 1; j < m_nsize - 1 - i; j++) { if ((m_point[j].y - temp.y) && (m_point[j + 1].y - temp.y)) { if ((m_point[j].x - temp.x) / (m_point[j].y - temp.y) < (m_point[j + 1].x - temp.x) / (m_point[j + 1].y - temp.y)) { POINT replace; replace = m_point[j]; m_point[j] = m_point[j + 1]; m_point[j + 1] = temp; } } } } } /* *计算图形面积 */ double CConvexHul::CalArea() { SortPoint(); int i; double area = 0; for (i = 1; i < m_nsize-1; i++) { POINT temp1(m_point[i].x - m_point[0].x, m_point[i].y - m_point[0].y), temp2(m_point[i + 1].x - m_point[0].x, m_point[i + 1].y - m_point[0].y); area += Cross(temp1, temp2); } return area / 2; } /* * 计算图形周长 */ double CConvexHul::CalC() { double sum=0; for(int i=0;i<m_nsize;i++) { sum+=sqrt((m_point[i].x-m_point[i].x)*(m_point[i].x-m_point[i].x)+ (m_point[i].y-m_point[i].y)*(m_point[i].y-m_point[i].y)); } return sum; }

对绘制图形的面积计算。

在图形在坐标系下绘制完成后,点击确认按钮就开始本函数。

实现是通过统计闭合图形内的像素点个数,根据坐标系得到每个像素点的值最后得到面积。

  • 计算绘制图形包含多少像素点;
/* 计算绘制图形包含多少像素点; */ double PlotWidget::CalArea() { QRgb value=qRgb(255,255,255); int i,j; double sum=0; //统计像素点。 for(i=0; i<width(); i++) { int maxup=0; int maxdown=0; for(j=0; j<height(); j++) { if( m_img->pixel(i,j)!=value) { maxup=j; break; } } for(j=height()-10; j>=0; j--) { if( m_img->pixel(i,j)!=value) { maxdown=j; break; } } sum+=maxdown-maxup; } return sum; } /*根据坐标系值大小计算面积*/ void paint::on_pushButton_cal_clicked() { double right_pos = width() - right_margine; double bottom_pos = height()- bottom_margine; double area=ui->plotview->CalArea(); area=(double)((m_valuex*m_valuey)/((right_pos-left_margine)*(bottom_pos-top_margine)))*area; //计算公式,得到单个像素点表示的值乘以所包含的像素点个数。 QString q=QString("%1").arg(area,0,'g',9); ui->label_Area->setText(q); }

程序实现

开发平台与编译运行要求

硬件配置

操作系统及版本

开发平台及版本

第三方支持库及版本

Windows10 系统

Qt

如果有特殊编译运行要求,因给出具体说明。

类似上面核心算法讨论一样,分节对核心功能(1)、(2)、(3).......的实现截图与简要功能分析。

不规则图形之任意直线图形周长面积计算。

功能分析:实现不规则图形面积的计算。

实现截图:

对绘制图形的面积计算。

功能分析:对绘制图形面积的计算。

实现截图:

功能完成度

对照 2.2 节 功能要求表,完成下表。有新增功能,在完成度上写新增。

编号

功能模块

完成情况描述

完成度

FUN_01

计算图形选择模块

根据用户图形选择对应计算图形,并在主界面上转换输入界面

100%

FUN_02

计算模式转换

点击转换模式(面积计算模式—周长计算模式)转换,计算出不同的模式值。

100%

Fun_03

概念模型展示

输入需要的数据点击确定后,会根据数据展示出对应的模型(及变化的模型

90%(由直线构成的图形只是简单一条直线)

Fun_04

数据输入

对应不同图形有不同的数据输入界面

100%

Fun_05

坐标轴转换

根据设置转变坐标轴的值,

100%

Fun_06

图形绘制选择

可以选择需要绘制图像类型

100%

Fun_07

图形绘制

能在界面上绘制图形

100%

Fun_08

绘制图形面积计算

能根据坐标轴值和用户绘制的图形点击确定后计算图形面积

100%

总结

自己程序的优缺点,与现有同类软件的比较。

本软件界面优美,操作简介,有图形绘制计算也有输入值计算,包含面广。相对缺点是输入值的判定是否为合法数据(如绘制的图形是闭合图形)没有做判定。

参考资料

CAD 中的不规则图形面积计算

参考软件。

《计算不规则多边形面积》参考设置及其模式。

http://www.jsqmd.com/news/1254703/

相关文章:

  • AI技术如何高效重构遗留代码系统
  • MSP430F42x低功耗MCU与SD16 ADC实战:架构、模式与高精度设计
  • EVOLVE深度学习体积压缩:可变速率编码与跨域应用实践
  • 2026年AI赋能核心逻辑与工程实践指南
  • 企业级AI技能开源合集:标准化封装与性能优化实践
  • YOLOv8与OpenCV在手机屏幕划痕检测中的应用
  • Research Rabbit与Connected Papers替代工具推荐 实用文献检索工具对比指南
  • JS 各项目库版本兼容清单(稳定无冲突,2026 推荐)
  • TPS99000-Q1芯片在汽车DLP系统中的应用与设计指南
  • 基于YOLOv11的焊接缺陷检测系统设计与优化
  • CC3235 Wi-Fi模块RF PCB布局设计:从阻抗匹配到天线优化的完整指南
  • AI Agent工程化实践:从Demo到产品的架构演进
  • ADS8598H高精度数据采集系统:从架构解析到硬件设计避坑指南
  • 短视频团队紧急必读:AI慢动作生成合规风险预警(含Deepfake标识新规、版权溯源链构建指南)
  • 多账号协同翻车现场全记录,深度拆解AI生成内容同质化陷阱(含TensorFlow+Prompt双校验方案)
  • 简单好用的免费投票小程序分享! - 资讯报道
  • 壹视短视频直播商城系统产品手册:综合社交平台源码覆盖直播、语音厅、畅聊与商城 - 壹软科技
  • 分清原生音画同步!主流 AI 视频生成平台横向对比
  • Pi coding agent AI模型选型指南:Claude Code与DeepSeek对比实践
  • AI开发C语言应用按步走,表达式计算器calc的第十一步,Token 联合体、哈希表满报错、批处理变量赋值
  • 基于MSP432E401Y的工业以太网网关设计:从硬件选型到软件实现
  • 基于无刷直流电机的电子机械制动执行器非线性动力学建模与仿真研究(Simulink仿真实现)
  • AI API 中转别只看能不能连通,先看第一次调用有没有“回执”
  • 把闲置NAS变成育儿中控台:BabyBuddy部署与远程记录实战
  • 高性能SAR ADC评估套件深度解析:从硬件设计到软件实操
  • Windows C++项目部署实战:从VS构建到打包分发的完整指南
  • 适配 Microsoft 365 的内联邮件安全架构部署与风险防控研究
  • stack/queue---入门OJ题
  • 【计算机毕业设计案例】基于 Django 框架的智慧校园学生宿舍信息化管理系统 高校宿舍人员入住退宿管理系统设计(程序+文档+讲解+定制)
  • 零基础玩转bWAPP靶场(十六):SQL 注入(POST/选择型)