C语言——结构体数组的使用案例(如何判断两个矩形是否相交,其中一个是否包含在另外一个里面,点是否在矩形中)

Rect.h

struct CPoint {
    float x;
    float y;
};
typedef struct CPoint CPoint;

struct CSize {
    float width;
    float height;
};
typedef struct CSize CSize;

struct CRect {
    CPoint origin;
    CSize size;
};
typedef struct CRect CRect;

//判断两个矩形是否相交
BOOL isIntersection(CRect rect1, CRect rect2);
//判断矩形是否包含某个点
BOOL isRectContainPoint(CRect rect, CPoint point);
//判断一个矩形是否包含另外一个矩形
BOOL isRectContainRect(CRect rect1, CRect rect2);

Rect.m

#import "Rect.h"

BOOL isIntersection(CRect rect1, CRect rect2)
{
    //什么时候不想交
    //1、矩形1的最大x小于矩形2的最小x
    //2、矩形1的最小x大于矩形2的最大x
    //3、矩形1的最大y小于矩形2的最小y
    //4、矩形1的最小y大于矩形2的最大y
    float minX1 = rect1.origin.x;
    float maxX1 = rect1.origin.x + rect1.size.width;
    float minY1 = rect1.origin.y;
    float maxY1 = rect1.origin.y + rect1.size.height;

    float minX2 = rect2.origin.x;
    float maxX2 = rect2.origin.x + rect2.size.width;
    float minY2 = rect2.origin.y;
    float maxY2 = rect2.origin.y + rect2.size.height;

    if (maxX1 < minX2 || minX1 > maxX2 || maxY1 < minY2 || minY1 > maxY2){
        return NO;
    }else{
        return YES;
    }
}

BOOL isRectContainPoint(CRect rect, CPoint point)
{
    //点的x介于矩形的最小x和最大x之间 并且 点的y介于矩形的最小y和最大y之间
    float minX = rect.origin.x;
    float maxX = rect.origin.x + rect.size.width;
    float minY = rect.origin.y;
    float maxY = rect.origin.y + rect.size.height;
    float x = point.x;
    float y = point.y;

    if ((x >= minX && x <= maxX) &&(y >= minY && y <= maxY)) {
        return YES;
    }else {
        return NO;
    }
}

BOOL isRectContainRect(CRect rect1, CRect rect2)
{
    //同时具备以下4点
    //1、矩形1的最小x 小于等于 矩形2的最小x
    //2、矩形1的最大x 大于等于 矩形2的最大x
    //3、矩形1的最小y 小于等于 矩形2的最小y
    //4、矩形1的最大y 大于等于 矩形2的最大y
    float minX1 = rect1.origin.x;
    float maxX1 = rect1.origin.x + rect1.size.width;
    float minY1 = rect1.origin.y;
    float maxY1 = rect1.origin.y + rect1.size.height;

    float minX2 = rect2.origin.x;
    float maxX2 = rect2.origin.x + rect2.size.width;
    float minY2 = rect2.origin.y;
    float maxY2 = rect2.origin.y + rect2.size.height;
    if ((minX1 <= minX2 && maxX1 >= maxX2) && (minY1 <= minY2 && maxY1 >= maxY2)) {
        return YES;
    }else {
        return NO;
    }
}

main

#import <Foundation/Foundation.h>
#import "Rect.h"

int main(int argc, const char * argv[])
{
    /*
    创建一个Rect结构体,包含origin,size两个变量。其中origin是Point类型的,size是Size类型的。
    并写以下函数:
    函数1,判断两个Rect是否相交。
    函数2,判断一个Rect是否包含某个Point。
    函数3,判断一个Rect是否在另外一个Rect中。
   */ 

    CRect r1 = {{2,6},{10,2}};
    CRect r2 = {{3,8},{2,50}};
    CPoint p = {3,5};
    printf("%d",isIntersection(r1, r2));

    return 0;
}

C语言——结构体数组的使用案例(如何判断两个矩形是否相交,其中一个是否包含在另外一个里面,点是否在矩形中)

时间: 2024-10-14 22:05:18

C语言——结构体数组的使用案例(如何判断两个矩形是否相交,其中一个是否包含在另外一个里面,点是否在矩形中)的相关文章

C语言结构体数组内带字符数组初始化和赋值

1.首先定义结构体数组: typedef struct BleAndTspRmtCmd{ char terminal[3]; char note[3]; char rmtCmd[10]; char cmdPropt[24];}; BleAndTspRmtCmd为结构体名,可以通过这个结构体名定义其他结构体变量,struct BleAndTspRmtCmd variable: 或者定义结构体数组变量,struct BleAndTspRmtCmd variable[]: 2.或者定义全局结构体变量,

JNA结构体数组

本文主要讲述使用JNA模拟结构体并将结构体数组作为参数传递给对应的方法. C语言结构体定义如下: typedef struct Rect { int top; int bottom; int left; int right; } RECT; JNA模拟该结构体: 需要引入: import com.sun.jna.*; import com.sun.jna.ptr.*; //Rect结构体 public static class Rect extends Structure { //Structu

iOS中结构体数组

在ios开发中我们经常要使用结构体,但是我们在使用结构体数组的时候xcode会有黄色警告提示. BMKMapPoint *points = new BMKMapPoint[pointCount]; BMKMapPoint 是一个结构体,我动态声明一个结构体数组. delete [] points; 释放一个结构体数组. 编写函数希望返回一个结构体数组的时候 + (CLLocationCoordinate2D *)arrayTransformCoordinate:(NSArray *)array

C语言 结构体(嵌套结构体--结构体数组)

//结构体--嵌套结构体和结构体数组 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct _parent{ int num; char name[30]; //结构体内部定义结构体,如果不定义嵌套结构体变量,那么该嵌套结构体的属性则会被当作父结构体的属性 struct son{ int age; char sna

读陈浩的《C语言结构体里的成员数组和指针》总结,零长度数组

原文链接:C语言结构体里的成员数组和指针 复制如下: 单看这文章的标题,你可能会觉得好像没什么意思.你先别下这个结论,相信这篇文章会对你理解C语言有帮助.这篇文章产生的背景是在微博上,看到@Laruence同学出了一个关于C语言的题,微博链接.微博截图如下.我觉得好多人对这段代码的理解还不够深入,所以写下了这篇文章. 为了方便你把代码copy过去编译和调试,我把代码列在下面: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 #include <stdio.h>

C语言中的结构体,结构体数组

C语言中的结构体是一个小难点,下面我们详细来讲一下:至于什么是结构体,结构体为什么会产生,我就不说了,原因很简单,但是要注意到是结构体也是连续存储的,但要注意的是结构体里面类型各异,所以必然会产生内存对齐的问题.也就是内存里面会有空档. 1.结构体的定义和赋值 结构体是可以直接初始化的,在定义的时候,就可以初始化,而且如果你的结构体中恰好有字符数组的话,这个时候初始化是不错的选择,原因很简单,字符数组只能定义的时候直接初始化 后来就不可以了,后来你就只能用strcpy函数来拷贝初始化了. str

c语言结构体中动态数组的使用

[背景] c语言结构体中动态数组使得用户能够根据需要来申请空间,相比静态数组,更能有效利用存储空间. [正文] 1. 动态数组在结构体中间 #include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct { int a; char buf[0]; // 或者char buf[]; int b; }Node; int main() { printf("%d\n", si

【C语言】用结构体数组完成:有5个学生(包括学号,姓名,成绩),要求按照成绩高低输出学生信息

//用结构体数组完成:有5个学生(包括学号,姓名,成绩),要求按照成绩高低输出学生信息 #include <stdio.h> struct Stu { int num; char name[20]; int score; }; int main() { int i,j; struct Stu student[5]={{317,"han",89},{318,"hu",50},{319,"kang",84},{320,"li&q

【C语言】用结构体数组指针完成:有三个学生信息,存放在结构体数组中,要求输出全部信息

//用结构体数组指针完成:有三个学生信息,存放在结构体数组中,要求输出全部信息 #include <stdio.h> struct Stu { int num; char name[20]; char sex; int age; }; int main() { struct Stu student[3]={{317,"han",'m',20},{318,"hun",'w',22},{311,"dan",'w',18}}; struct