2017-06-16 70 views
1

編輯:我工作過一個解決方案。如果您將來遇到此問題並且需要類似的東西,請隨時與我聯繫。檢查隨機框內是否有點

-

而是在一個平面上生成隨機點的,你將如何檢查是否給定的座標等於隨機點?或者在一個隨機邊框內?

例如,您有一個具有整數座標的平面。該平面以某種方式填充隨機邊界框(使用公式生成,而不是數據)。目標是檢查給定的(x,y)是否在其中一個框內。

我可以找到許多關於如何生成隨機點的參考,但沒有太多的以更多倒退的方式來做(我想你會稱之爲'功能性')。

我設法做出了一個算法,將平面分割成100x100的正方形,並且在每個正方形內是一個隨機放置的邊界框。但是有可能使用更有機地放置這些盒子的算法嗎?

編輯:這是我(從內存中,可能失去了一些東西)「一個100x100的網格內隨機點」用一個簡單的示例算法:

// check if equal to a random point within the point's grid square 
boolean isRandomCenter(x, y) { 
    // offset relative to origin of grid square 
    int offsetX = x mod 100 
    int offsetY = y mod 100 

    // any random seed will do 
    int randomSeed = x * y 

    // random position of point for this square 
    int randomOffsetX = random(50, randomSeed) 
    int randomOffsetY = random(50, randomSeed) 

    if (offsetX == randomOffsetX && offsetY == randomOFfsetY) 
     return true 

    return false 
} 
+0

你想知道什麼?知道給定點(x,y)是否在bouding box中的條件是什麼?還是一種隨機放置框的算法? – bam500

+0

我猜他們都是相通的。只要是可以有函數(x,y)的任意類型的隨機分佈,如果在該分佈的邊界框內,就會返回true。最好用其他控制平均間距等的參數,但這並不重要。 – LegendLength

+1

「有機地」:是你有自己的理解,我們不分享的一個術語。關於「檢查一個給定的座標是否等於一個隨機點」的評論相同。請解釋。 –

回答

1

好了,我不知道我究竟理解你的問題,但知道在由兩個軸x和y表示的二維歐幾里德空間中繪製的給定點M(x,y)是否在由兩個對立點A(xa,ya)和B (xb,yb)非常簡單。

讓我們定義一個函數isInsideTheBox(X,Y,XA,YA,XB,YB)如果M是返回true箱內和false其他:

bool isInsideTheBox(int x, int y, int xa, int ya, int xb, int yb) 
{ 
    // We assume xa < xb and ya < yb 
    return (x >= xa && x <= xb && y >= ya && y <= yb); 
} 
+0

是的,我知道如何檢查你是否在一個盒子內。我的問題是什麼樣的算法可用於生成一個有機(非基於網格)的隨機點集合,並檢查您是否在該點(或在一個盒子內,容易修改)。 – LegendLength

+1

@LegendLength您可以理解我們的困惑,因爲您的問題的標題是「檢查點是否在隨機框內」 –

1

我回答這個問題:檢查是否有點是在一個隨機點上。

如果座標是真實的,重疊的概率爲零,問題實際上是無用的。所以我假設離散座標。

如果問題涉及已經繪製的隨機點,唯一的方法是在繪製它們(數組,排序,列表,搜索樹,散列表)時記住某個容器中的隨機點。

如果問題關於可能在該位置繪製的點,則整個域(分佈非零)的答案爲「true」。您需要以幾何模型對域進行建模以執行point-in -...查詢。


如果問題是關於僞隨機的或準隨機點,我不認爲有任何的快捷方式,你應該繼續作爲真正隨機的情況下(除非發電機是真窮)。

+0

在我的示例算法中,它既決定點的位置,也檢查您是否在一個點上。它適用於無限大的飛機,不存儲任何數據。它可以很容易地修改,以檢查邊界框,而不是在確切點上着陸。但它僅限於每個100x100的網格廣場。我想要更多'有機'的東西,因爲你可能有5個點隨機相鄰,這是不可能的使用網格方法。 – LegendLength