已知一个圆的圆心,半径与一个矩形的中心坐标,高,宽,如何判断该圆与该矩形的位置关系?

已知一个圆的圆心坐标(Cx,Cy),半径r,矩形的中心坐标为(Rx,Ry),长W,宽H

以下是一个C#代码实例

    public class Program
    {
       
        static void Main(string[] args)
        {
            //已知圆的圆心(Cx,Cy),半径r与一个矩形的中心坐标(Rx,Ry)长为W,宽为H
            YuanandJu dd = new YuanandJu(3,3,2,1,1,2,4);
        }

    }
 public class YuanandJu
 {
     //构造函数
     public YuanandJu(int Cx, int Cy, int r, int Rx, int Ry, int W, int H)
     {
         //左右上下边界
         int L = Rx - W / 2;
         int R = Rx + W / 2;
         int T = Ry + H / 2;
         int B = Ry - H / 2;

         //圆心(Cx,Cy)到矩形的最近点的距离(Px,Py)的坐标
         int Px = Math.Max(L, Math.Min(Cx,R));
         int Py = Math.Max(B,Math.Max(Cy,T));

         //计算圆心与最近点之间的距离
         int d=(Cx-Px)*(Cx-Px)+(Cy-Px)*(Cy-Px);

         //如果d>r*r----圆与矩形相离
         if(d>r*r)
         {
             Console.WriteLine("圆与矩形相离");
         }
         //如果d<r*r----圆与矩形相交
         if (d < r * r)
         {
             Console.WriteLine("圆与矩形相交");
         }
         //如果d=r*r----圆与矩形相切
         if (d == r * r)
         {
             Console.WriteLine("圆与矩形相切");
         }

         //计算矩形的四个顶点
         //左上角
         int a1 = Rx - W / 2;
         int a2 = Ry + H / 2;

         //右上角
         int b1=Rx + W / 2;
         int b2=Ry + H / 2;
         //右下角
         int c1=Rx + W / 2;
         int c2=Ry - H / 2;
         //左下角
         int d1=Rx - W / 2;
         int d2=Rx - H / 2;

         //如果矩形的四个顶点都在圆内
         if ((a1-Cx)*(a1-Cx)+(a2-Cy)*(a2-Cy)<r*r&&(b1-Cx)*(b1-Cx)+(b2-Cy)*(b2-Cy)<r*r&& (c1 - Cx) * (c1 - Cx) + (c2 - Cy) * (c2 - Cy)<r*r&&(d1 - Cx) * (d1 - Cx) + (d2 - Cy) * (d2 - Cy)<r*r)
         {
             Console.WriteLine("矩形在圆内,该圆包含矩形");
         }

         //计算圆的四个顶点

         int x1 = Cx - r;
         int x2= Cy + r;

         int y1 = Cx + r;
         int y2= Cy + r;

         int z1= Cx + r;
         int z2= Cy - r;

         int o1=Cx - r;
         int o2= Cy - r;

         if (L<=x1&&x1<=R&&B<=x2&&x2<=T&& L <= y1 && y1 <= R && B <= y2 && y2 <= T&& L <= z1 && z1 <= R && B <= z2 && z2 <= T&& L <= o1 && o1 <= R && B <= o2 && o2 <= T)
         {
             Console.WriteLine("矩形包含圆");
         }



     }


 }

运行结果为:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值