-2

一意の座標 (A1、B1) と (A2、B2) のセットを生成する必要があります。値は 0 と 1 の間です。この一意の座標のセットは、既存の座標のセット ([x1]、[y1]) の間にあることはできません。 ) および ([x2], [y2]) は、SQL クエリによって返されます。C# を使用して、1) クエリによって返された値の間ではなく、2) クエリによって返された値と等しくない座標を生成するスクリプトを作成するにはどうすればよいですか?

ここでのロジックは基本的に、ページ上に一連のボックスを描画するために使用されます。一意の座標で新しいボックスを描画する必要がありますが、これらの新しいボックスを重ねたり、既存のボックス内に配置したりすることはできません。どんな助けでも大歓迎です!

4

2 に答える 2

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

それは少し(読んでください:非常に)ぎこちないです(実際にはちょっと恥ずかしいです)が、それは機能し、可能なすべてのランダムな長方形を生成するはずです...最終的に。

于 2012-08-31T19:06:52.880 に答える
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();
    }
于 2012-08-31T18:43:30.330 に答える