首页 > 编程语言 >C# 计算不规则多边形的相交/包含等关系

C# 计算不规则多边形的相交/包含等关系

时间:2022-11-12 12:55:06浏览次数:55  
标签:return Matrix C# Region 相交 交集 Length GetRegionScans 多边形

核心思路是使用Region的求交集和并集的结果与原始Region对比

Winform项目自带这个类库,如果使用控制台,需要先在nuget安装System.Drawing.Common

        /// <summary>
        /// 计算两个形状的关系
        /// </summary>
        /// <param name="rgn1">形状1</param>
        /// <param name="rgn2">形状2</param>
        /// <returns></returns>
        private string CalculateShapeRelationship(Region rgn1, Region rgn2)
        {
            RectangleF[] rect1 = rgn1.GetRegionScans(new Matrix());  //将形状切片
            RectangleF[] rect2 = rgn2.GetRegionScans(new Matrix());
            if (Enumerable.SequenceEqual(rect1, rect2))  //如果两个形状切片结果相同,则为重叠
                return "重叠";

            using (Region rgnIntersect = rgn1.Clone())
            {
                rgnIntersect.Intersect(rgn2);  //求交集
                RectangleF[] rectIntersect = rgnIntersect.GetRegionScans(new Matrix());//将交集切片
                if (rectIntersect.Length == 0)  //如果交集切片没有结果则两个形状没有交集
                    return "相离";
            }
            using (Region rgnUnion = rgn1.Clone())
            {
                rgnUnion.Union(rgn2);  //求并集
                RectangleF[] rectUnion = rgnUnion.GetRegionScans(new Matrix()); //将并集切片

                if (rectUnion.Length == rect1.Length)  //如果区域2和并集一样
                    return "区域1包含区域2";

                if (rectUnion.Length == rect2.Length)  //如果区域2和并集一样
                    return "区域2包含区域1";

                return "相交";  //两个都只占并集的一部分,则为相交
            }
        }

源码:
附件

标签:return,Matrix,C#,Region,相交,交集,Length,GetRegionScans,多边形
From: https://www.cnblogs.com/Alex1911/p/16883488.html

相关文章

  • bochs调试方法与指令详解
    参考:https://blog.csdn.net/liu0808/article/details/53099099#t0bochs调试FAQ:一基本调试命令1.       Q:如何从引导扇区开始设置断点?A:BIOS被载入内存中......
  • 原生 HTML + CSS + JavaScript 写时钟
    时钟效果目录结构HTML代码<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metahttp-equiv="X-UA-Compatible"content="IE=edge">......
  • bochs 调试 com 文件
    参考:https://blog.csdn.net/housansan/article/details/41833581在网上看到2中解决此问题的方法:1.使用dos下的debug32工具单步跟踪pmtest2.com的运行情况。但这个方法存......
  • C++飞机票订票系统
    C++飞机票订票系统题目7飞机票订票系统问题描述:某公司每天有10航班(航班号、价格),每个航班的飞机,共有80个座位,分20排,每排4个位子。编号为A,B,C,D。如座位号:10D表示1......
  • react 渲染机制
    react渲染机制点击查看解析1、当页面一打开,就会调用render构建一棵DOM树2、当数据发生变化(state|props)时,就会再渲染出一棵DOM树3、此时,进行diff运算,两棵......
  • STM32F6xx外设驱动8-cpu(寄存器)nulceo144
    //源文件//使能CPU的L1-CachevoidCache_Enable(void){SCB_EnableICache();//使能I-CacheSCB_EnableDCache();//使能D-Cache SCB->CACR|=1<<2;//强......
  • STM32F6xx外设驱动5-uart(寄存器)nulceo144
    //源文件voidUartGpioConfig(){ RCC->AHB1ENR|=(1<<3);//使能GPIOD RCC->APB1ENR|=(1<<18);//使能USART3 RCC->APB2ENR|= //PD8TXDGPIOD->M......
  • STM32F6xx外设驱动6-adc(寄存器)nulceo144
    //源文件voidADCPhyConfig(){ RCC->APB2ENR|=1<<8;//使能ADC1时钟 RCC->AHB1ENR|=1<<0;//使能PORTA时钟 //PA5输入模式、下拉、高速GPIOA->MODER......
  • C++一元多项式计算器的设计与实现
    C++一元多项式计算器的设计与实现七、一元多项式计算器的设计与实现1.基于动态数组或者链表实现--元多项式的计算,可以使用STL的vector或者list。2.在系统中需要提供必......
  • STM32F6xx外设驱动7-dac(寄存器)nulceo144
    //源文件voidDACPhyConfig(){RCC->APB1ENR|=1<<29;//使能DAC时钟RCC->AHB1ENR|=1<<0;//使能PORTA时钟 //PA4输入模式、下拉、高速GPIOA->MODER......