已知一个圆的圆心坐标(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("矩形包含圆");
}
}
}
运行结果为: