//取第一个随机数 x = Random.Next(0, r);//开方 取整数 int t = Math.Floor( Math.Sqrt(r * r - x * x))//取第二个随机数 y = Random.Next(0, t)x, y 随机加上正负号.x, y 根据加上圆心坐标, 取得最后值.
private static Random rad = new Random((int)(DateTime.Now.Ticks & 0xffffffffL) | (int)(DateTime.Now.Ticks >> 32)); /// <summary> /// 随机获得圆内一点 /// </summary> /// <param name="center">圆心坐标</param> /// <param name="R">半径</param> /// <returns></returns> public static Point GetRandomInCirclePoint(Point center, int R) { int newX = rad.Next(center.X - R, center.X + R + 1); Thread.Sleep(200); int newY = rad.Next(center.Y - R, center.Y + R + 1); return new Point(newX, newY); } 好像还行
pointY : (y-R,Y+R)新的点就是在这个范围内,,X 和 Y 随机不就行了
风行下载安装
皮皮播放器下载
uusee网络电视2010下载
-----------------------------圆心 用(0,0) ,按这个 方程搞就可以了。
x = Random.Next(0, r);//开方 取整数
int t = Math.Floor( Math.Sqrt(r * r - x * x))//取第二个随机数
y = Random.Next(0, t)x, y 随机加上正负号.x, y 根据加上圆心坐标, 取得最后值.
private static Random rad = new Random((int)(DateTime.Now.Ticks & 0xffffffffL) | (int)(DateTime.Now.Ticks >> 32)); /// <summary>
/// 随机获得圆内一点
/// </summary>
/// <param name="center">圆心坐标</param>
/// <param name="R">半径</param>
/// <returns></returns>
public static Point GetRandomInCirclePoint(Point center, int R)
{
int newX = rad.Next(center.X - R, center.X + R + 1);
Thread.Sleep(200);
int newY = rad.Next(center.Y - R, center.Y + R + 1);
return new Point(newX, newY);
}
好像还行
x=a+r*cosθ
y=b+r*sinθ
圆的参数方程,角度随机,半径在0-原始半径之间即可
private static Random rad = new Random((int)(DateTime.Now.Ticks & 0xffffffffL) | (int)(DateTime.Now.Ticks >> 32)); /// <summary>
/// 随机获得圆内一点
/// </summary>
/// <param name="center">圆心坐标</param>
/// <param name="R">半径</param>
/// <returns></returns>
public static Point GetRandomInCirclePoint(Point center, int R)
{
int newX = rad.Next(center.X - R, center.X + R + 1);
Thread.Sleep(200);
double maxY = Math.Sqrt((R * R) - newX * newX);
int newY = rad.Next((int)-Math.Ceiling(maxY), (int)Math.Floor(maxY));
return new Point(newX, newY);
}第二个,,,有待改进
int newY = rad.Next((int)-Math.Ceiling(maxY), (int)Math.Floor(maxY));
这个波动范围太小
不能随机到在园内的任意一个点吧?
一个与圆心X坐标相加,一个与圆心Y坐标相加。
得到的坐标应该就是随机在圆内的坐标了。
private static Random rad = new Random((int)(DateTime.Now.Ticks & 0xffffffffL) | (int)(DateTime.Now.Ticks >> 32));
/// <summary>
/// 随机获得圆内一点
/// </summary>
/// <param name="center">圆心坐标</param>
/// <param name="R">半径</param>
/// <returns></returns>
public static Point GetRandomInCirclePoint(Point center, int R)
{
int newX = rad.Next(center.X - R, center.X + R + 1);
Thread.Sleep(200);
double maxY = Math.Sqrt((R * R) - newX * newX);//圆上方的最大Y值
double minY = center.Y - Math.Abs(maxY - center.Y);//关于 y=center.Y对称,找圆下方最小Y值,则在最小Y值和最大Y值之间取值。
int newY = rad.Next((int)Math.Floor(minY), (int)Math.Floor(maxY));
return new Point(newX, newY);
}
看看这个吧,前面两个都错了,,悲剧,脑子糊了,未老先衰..