以下是我的部分程序:form1.cscirclesample circle1 = new circlesample();
circlesample circle2 = new circlesample();
circlesample circle3 = new circlesample();
circlesample circle4 = new circlesample();
circlesample circle5 = new circlesample();Graphics dc = Graphics.FromHwnd(this.groupBox1.Handle);
Pen BlackPen = new Pen(Color.Black,1);
Pen BluePen = new Pen(Color.Blue,1);
dc.DrawEllipse(BluePen,205,205,300,300);
dc.DrawRectangle(BluePen,355,355,1,1); circle1.CreatNonInterferenceCircle(1);
circle2.CreatNonInterferenceCircle(2);
circle3.CreatNonInterferenceCircle(3);
circle4.CreatNonInterferenceCircle(4);
circle5.CreatNonInterferenceCircle(5); dc.DrawEllipse(BlackPen,circle1.mytopx-circle1.myradius,circle1.mytopy-circle1.myradius,circle1.myradius*2,circle1.myradius*2);
dc.DrawEllipse(BlackPen,circle2.mytopx-circle2.myradius,circle2.mytopy-circle2.myradius,circle2.myradius*2,circle2.myradius*2);
dc.DrawEllipse(BlackPen,circle3.mytopx-circle3.myradius,circle3.mytopy-circle3.myradius,circle3.myradius*2,circle3.myradius*2);
dc.DrawEllipse(BlackPen,circle4.mytopx-circle4.myradius,circle4.mytopy-circle4.myradius,circle4.myradius*2,circle4.myradius*2);
dc.DrawEllipse(BlackPen,circle5.mytopx-circle5.myradius,circle5.mytopy-circle5.myradius,circle5.myradius*2,circle5.myradius*2);
circlesample.cspublic class circlesample
{
public float myradius; //半径
public float mytopx; //x坐标
public float mytopy; //y坐标
public static int[,] xarray = new int[6,3]; //基本参数数组
public static int[] Radius = new int[6]{0,40,30,25,20,15}; //人工设定半径数组 public circlesample()
{
// 
// TODO: 在此处添加构造函数逻辑
//
} //////////////////////////////////////////////////////////
/// <summary>
/// 生成圆随机参数事件
/// </summary>
/////////////////////////////////////////////////////////
public int[] CreatRandomNumber(int i)
{
const int nBigCircleX=355;
const int nBigCircleY=355;
const int nBigCircleR=150;
const int nMinR=10; //生成圆的最小半径
int[] RadiusArray = Radius; int[] CreatCircleArray = new int[3];
int nTemp,nTempMax,nTempMin;
int nTempMax2,nTempMin2;
Random ran = new Random((int)DateTime.Now.Ticks); //第一步:确定R的范围,并随机生成R,可改成直接指定R
nTempMin=nMinR;
nTempMax=nBigCircleR/2;
CreatCircleArray[0]=RadiusArray[i]; //第二步:根据已经得到的R确定X的范围(保证圆心在大圆内),并随机生成X
nTempMin=nBigCircleX-nBigCircleR+CreatCircleArray[0];
nTempMax=nBigCircleX+nBigCircleR-CreatCircleArray[0];
CreatCircleArray[1]=ran.Next (nTempMin,nTempMax);

//第三步:确定Y的范围,并随机生成Y
//根据R^2<(x-355)^2+(y-355)^2,并且(x-355)^2+(y-355)^2<(nBigCircleR-R)^2
nTemp=CreatCircleArray[0]*CreatCircleArray[0]; //R^2
nTemp=nTemp-(CreatCircleArray[1]-nBigCircleX)*(CreatCircleArray[1]-nBigCircleX); //R^2-(x-355)^2
nTemp=(int)Math.Sqrt (nTemp);
nTempMax=nBigCircleY-nTemp; //下半区间的最大值
nTempMin2=nBigCircleY+nTemp; //上半区间的最小值

nTemp=(nBigCircleR-CreatCircleArray[0])*(nBigCircleR-CreatCircleArray[0]); //(nBigCircleR-R)^2
nTemp=nTemp-(CreatCircleArray[1]-nBigCircleX)*(CreatCircleArray[1]-nBigCircleX); //(nBigCircleR-R)^2-(x-355)^2
nTemp=(int)Math.Sqrt (nTemp);
nTempMin=nBigCircleY-nTemp; //下半区间的最小值
nTempMax2=nBigCircleY+nTemp; //上半区间的最大值 if(ran.Next (0,2)<1) //随机选择上半区间或下半区间
CreatCircleArray[2]=ran.Next (nTempMin,nTempMax);
else
CreatCircleArray[2]=ran.Next (nTempMin2,nTempMax2); return CreatCircleArray;  } //////////////////////////////////////////////////////////
/// <summary>
/// 生成互不干涉圆事件
/// </summary>
/////////////////////////////////////////////////////////
public void CreatNonInterferenceCircle(int i)
{
int[] TempArray = new int[3];

//生成的不干涉圆的参数结果保存到二维数组
TempArray = CreatRandomNumber(i);

//判断新生成的圆是否与已存在的圆产生干涉,若产生则重新生成
for(int m=0;m<i;m++)
{
while(Math.Sqrt((TempArray[1]-xarray[m,1])*(TempArray[1]-xarray[m,1])+(TempArray[2]-xarray[m,2])*(TempArray[2]-xarray[m,2]))<(TempArray[0]+xarray[m,0]))
{
TempArray = CreatRandomNumber(i);
m=0;
}
} xarray[i,0] = TempArray[0];
xarray[i,1] = TempArray[1];
xarray[i,2] = TempArray[2]; myradius = TempArray[0];
mytopx = TempArray[1];
mytopy = TempArray[2];

} }