我需要生成一组唯一坐标(A1,B1)和(A2,B2),它们的值介于0和1之间。这组唯一坐标不能位于现有坐标集之间([x1], [y1])和([x2],[y2])由sql查询返回。如何使用C#编写脚本,该脚本生成的坐标1)不在查询返回的值之间,2)不等于查询返回的值?
这里的逻辑基本上用于在页面上绘制一组框。我需要绘制具有唯一坐标的新框,但这些新框不能重叠,或位于现有框内。非常感谢任何帮助!
答案 0 :(得分:0)
这适用于约99.99%左右...
void GenerateTest()
{
float x1, y1;
float x2, y2;
// fill x1,y1,x2,y2
var r = new Random();
Func<float> next = () => (float)r.NextDouble();
var NotMatchingRect = RectangleF.FromLTRB(x1,y1,x2,y2);
var Coordinates = Enumerable.Range(0, 1000).Select(i => new PointF(next(), next())).Where(p => !NotMatchingRect.Contains(p)).Distinct().Take(2).ToArray();
if (Coordinates.Length != 2)
throw new IndexOutOfRangeException();
}
答案 1 :(得分:0)
为方便起见,假设存在一个名为随机函数的随机函数,你可以做...
do
{
A1 = randomizer.NextDouble();
B1 = randomizer.NextDouble();
} while(!((A1>=X1&&A1<=X2&&B1>=Y1&&B1<=Y2)||(A1>=X2&&A1<=X1&&B1>=Y2&&B1<=Y1)) //not inside other rectangle
do
{
A2 = randomizer.NextDouble();
B2 = randomizer.NextDouble();
}
while(!((A1==A2&&B1==B2)|| //not equal to other random coordinate
(A2>=X1&&A2<=X2&&B2>=Y1&&B2<=Y2)||
(A2>=X2&&A2<=X1&&B2>=Y2&&B2<=Y1)|| //not inside other rectangle
(A1<=X1&&A2>=X2&&B1<=Y1&&B2>=Y2)||
(A1<=X2&&A2>=X1&&B1<=Y2&&B2>=Y1)||
(A2<=X1&&A1>=X2&&B2<=Y1&&B1>=Y2)||
(A2<=X2&&A1>=X1&&B2<=Y2&&B1>=Y1)||)) //not containing other rectangle
它有点(读:非常非常)cludgy(我实际上有点尴尬),但它应该工作,并生成所有可能的随机矩形......最终。