C语言 · 矩形面积交

本文提供了一段C语言代码,用于计算平面上两个矩形的交集面积。输入为两个矩形各一对相对顶点的坐标,输出为交集面积,保留两位小数。通过定义最大值和最小值宏来简化比较过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题描述
  平面上有两个矩形,它们的边平行于直角坐标系的X轴或Y轴。对于每个矩形,我们给出它的一对相对顶点的坐标,请你编程算出两个矩形的交的面积。
输入格式
  输入仅包含两行,每行描述一个矩形。
  在每行中,给出矩形的一对相对顶点的坐标,每个点的坐标都用两个绝对值不超过10^7的实数表示。
输出格式
  输出仅包含一个实数,为交的面积,保留到小数后两位。
样例输入
1 1 3 3
2 2 4 4
样例输出
1.00
 1 #include<stdio.h>
 2 #define max(x,y) (x>y?x:y)
 3 #define min(x,y) (x<y?x:y)
 4 int main(){
 5     double x1,y1,x2,y2,x3,y3,x4,y4;      
 6     double m1,n1,m2,n2;    
 7     scanf("%lf%lf%lf%lf",&x1,&y1,&x2,&y2);
 8     scanf("%lf%lf%lf%lf",&x3,&y3,&x4,&y4);
 9     m1 = max(min(x1,x2),min(x3,x4));
10     n1 = max(min(y1,y2),min(y3,y4));
11     m2 = min(max(x1,x2),max(x3,x4));
12     n2 = min(max(y1,y2),max(y3,y4));
13     if(m2>m1 && n2>n1)
14         printf("%.2f\n",(m2 - m1)*(n2 - n1));
15     else
16         printf("0.00\n");
17     return 0;
18 } 

 

转载于:https://www.cnblogs.com/panweiwei/p/6250792.html

计算几何图形的面积一个较为复杂的问题,尤其是当图形类型多样时(例如圆形、椭圆、多边形等)。对于不同的几何形状,面积的计算方式也有所不同。以下将以**两个凸多边形的面积**为例,提供一个基于C语言的实现思路和示例代码。 ### 实现思路 1. **表示多边形**:使用结构体来表示点和多边形。 2. **判断点是否在多边形内**:采用射向法(Ray Casting)进行判断。 3. **求多边形集**: - 使用平面扫描或分割方法生成集区域的顶点。 - 构造集多边形。 4. **计算面积**:使用叉乘法(Shoelace Formula)计算多边形面积。 以下是简化版的C语言实现框架: ```c #include <stdio.h> #include <stdlib.h> typedef struct { double x, y; } Point; // 判断点是否在多边形内部(射向法) int isInsidePolygon(Point p, Point *poly, int n) { int crossings = 0; for (int i = 0; i < n; i++) { Point a = poly[i]; Point b = poly[(i + 1) % n]; if ((a.y > p.y) != (b.y > p.y)) { if (p.x < (b.x - a.x) * (p.y - a.y) / (b.y - a.y) + a.x) crossings++; } } return crossings % 2 != 0; } // 计算多边形面积(叉乘法) double polygonArea(Point *poly, int n) { double area = 0.0; for (int i = 0; i < n; i++) { int j = (i + 1) % n; area += (poly[i].x * poly[j].y - poly[j].x * poly[i].y); } return fabs(area) / 2.0; } // 简化版:假设两个矩形,求其面积 double intersectAreaOfRectangles(double x1, double y1, double x2, double y2, double a1, double b1, double a2, double b2) { double left_x = fmax(x1, a1); double right_x = fmin(x2, a2); double bottom_y = fmax(y1, b1); double top_y = fmin(y2, b2); if (left_x >= right_x || bottom_y >= top_y) return 0.0; return (right_x - left_x) * (top_y - bottom_y); } ``` ### 示例说明 - `isInsidePolygon` 函数用于判断一个点是否在给定多边形内部[^2]。 - `polygonArea` 函数使用叉乘法计算任意多边形的面积。 - `intersectAreaOfRectangles` 是一个简化版本,用于计算两个矩形面积。 > 注意:对于更复杂的多边形集问题(如非矩形),建议使用专门的几何库(如 CGAL 或自行实现的 Sutherland-Hodgman 多边形裁剪算法)。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值