计算不规则区域的周长和面积——C语言实现
创始人
2025-05-29 16:44:29

1.题目描述

设计求不规则区域周长和面积计算的算法。

测试数据的获得:
输入样例:若干点坐标,从文件读入。
输出样例:面积、周长值
(1)样例 1(凸多边形)输入:
164.5637 62.0682
269.0362 88.6151
288.1998 187.3943
141.6910 223.8191
34.7458 178.1338
60.7094 99.1104
输出:
面积 = 29132.1904,周长 = 669.1189
(2)样例 2(凹多边形)输入:
150.0000 150.0000
60.7094 99.1104
164.5637 62.0682
269.0362 88.6151
288.1998 187.3943
141.6910 223.8191
输出:
面积 = 20806.4298,周长 = 646.704

2.实现思路

(1)计算不规则区域面积

通过向量叉积来实现的。在二维平面上,可以将不规则区域看作由一些线段组成的简单多边形,其面积可以表示为这些线段所构成的向量的叉积之和的绝对值的一半。
具体地,假设不规则区域由n条线段构成,线段的两个端点分别为(x1, y1)和(x2, y2),则线段的向量为(x2 - x1, y2 - y1)。这些向量的叉积可以表示为:
在这里插入图片描述

最后,将上式的结果除以2,即可得到不规则区域的面积。

(2)计算不规则区域的周长

遍历每一个点,使用两点之间距离公式:
在这里插入图片描述
计算相邻两个点之间的距离,使用int j = (i+1) % num_points;加一然后取余的操作,将整个不规则区域连接起来。这样就将不规则区域的各个边的长度计算了出来,最后求和,就是不规则区域的周长。

3.代码

#include 
#include #define MAX_POINTS 1000 // 最大点数typedef struct {double x, y;
} Point; // 点的结构体Point points[MAX_POINTS]; // 点的数组
int num_points = 0; // 点的数量double dist(Point p1, Point p2) 
{// 计算两个点之间的距离double dx = p1.x - p2.x;double dy = p1.y - p2.y;return sqrt(dx*dx + dy*dy);
}double area() 
{// 计算多边形的面积double a = 0;for (int i = 0; i < num_points; i++) {int j = (i+1) % num_points;a += points[i].x * points[j].y - points[j].x * points[i].y;}return fabs(a) / 2;
}double perimeter() 
{// 计算多边形的周长double p = 0;for (int i = 0; i < num_points; i++) {int j = (i+1) % num_points;p += dist(points[i], points[j]);}return p;
}int main() 
{// 从文件中读入点的坐标FILE *fp = fopen("points2.txt", "r");while (fscanf(fp, "%lf%lf", &points[num_points].x, &points[num_points].y) == 2) {num_points++;}fclose(fp);// 计算多边形的面积和周长double a = area();double p = perimeter();// 输出结果printf("面积 = %.4lf\n", a);printf("周长 = %.4lf\n", p);return 0;
}

4.运行结果

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

相关内容

热门资讯

【iOS】—— ARC学习 ARC 文章目录ARC内存管理的思考方式自己生成的对象自己持有非自己生成的对象,自己也...
Hadoop_HDFS、Had... Hadoop_HDFS、Hadoop_MapReduce、Hadoop_Yarn 实践 (一) 前要...
Baumer工业相机堡盟相机如... 项目场景 Baumer工业相机堡盟相机是一种高性能、高质量的工业相机,可用于各种应用场...
spark第三章:工程化代码 系列文章目录 spark第一章:环境安装 spark第二章:sparkc...
音视频技术开发周刊 | 285 每周一期,纵览音视频技术领域的干货。新闻投稿:contribute...
方向导数与梯度 1 方向导数(二元为例) Σ:z=f(x,y)&...
【字符串】 string1.char str[]类型fgets(s,10000,stdin) cin.getli...
Xmind 2022 for ... XMind 2022 for Mac是一款优秀的思维导图软件,由XMind Ltd.公...
在 Ubuntu 中安装 DO... 了解如何在 Ubuntu 中安装 DOSBox,并配置它来玩旧式 DOS 游戏。DOS...
[图神经网络]图嵌入 将节点映射成D维向量主要有以下几种方法:         ①人工特征工程:...
我的 System Veril...  引言 本文简单介绍 SystemVerilog 的其他程序结构。 前文链接: 我的 ...
Vue2项目总结-电商后台管理... Vue2项目总结-电商后台管理系统 去年做的项目,拖了很久,总算是打起...
【业务安全-02】业务逻辑漏洞... 越权越权即越权查看被人的信息,又分为水平越权和垂直越权,但是两者的本质都...
面试了8家软件公司测试岗位,面... 包含的模块:本文分为十九个模块,分别是:软件测试 基础、l...
不要让ChatGPT成为你的智... 难处 我相信有部分人苦于政策,但是又没有途径,没法享受到chatGpt带...
Redis学习笔记 ---- ... 常见的有五种:String(字符串),Has...
Java实现十类排序算法对比展... Java实现排序算法 本代码展示了Java中常见的十种排序算法,并对每种算法的时间复杂...
SC8P1762E_汇编指令一... 控制类 NOP, 空操作 STOP, 进入休眠模式 CLR...
微信小程序实现图片上传(清晰版... 在wxml文件中添加一个按钮和一个image标签用于显示上传的图片 选择图片 在js文件中添加选择...
Maven打包子模块 项目结构1. project_01: 一个多模块的maven工程2. module_01: 工程pr...
Scala安装及设置查看源代码 文章目录一、安装Scala环境1.1、下载Scala1.2、配置scala环境变量1.3、测试是否安...
使用大规模数据注释和深度学习对... 使用大规模数据注释和深度学习对具有人类水平性能的组织图像进行全细胞分割摘要绪论Mesmer2.1Me...
【数据结构】TreeMap和T... 目录 1、TreeMap 1.1 TreeMap 的简介  1.2 TreeMap 的基本使用 2、...
Django之视图的使用 Django之视图的使用视图基本使用函数视图类视图视图与模板请求对象HttpRequest常见属性和...
零基础能学大数据吗? 大数据入门不像学一门编程语言,自学一段时间就OK了。大数据是需要站在编程的基础上学习的...
OperatorChain设计 在JobGraph构建过程中,会将满足链化条件的StreamOperator连接在一起...
Phoenix整合phoeni... 首先我们添加上maven依赖,可以看到5.1.2 对应的hbase是2.4对吧 然后添加了依赖,...
【华为机试真题详解 Pytho... 文章目录 前言题目描述输入描述输出描述题目解析参考代码 前言 《华为机试真题详解》专栏含牛客网...
Scala---Array方法 Scala之Array的方法 文章目录Scala之Array的方法数组声明一个数组1.元素操作替换...
内存避障的前世今生 相关 《内存避障:一个内存乱序实例》 《内存避障的前世今生》 0 总结 单核下的指令...