2017-06-16 1 views
1

Modifier: J'ai travaillé une solution. N'hésitez pas à me contacter si vous rencontrez cela dans le futur et que vous avez besoin de quelque chose de similaire.Vérifier si le point dans les cases aléatoires

-

Au lieu de générer des points aléatoires sur un plan, comment voulez-vous vérifier si une coordonnée donnée est égale à un point aléatoire? Ou à l'intérieur d'une boîte de délimitation aléatoire?

Par exemple, vous avez un plan avec des coordonnées entières. Ce plan est en quelque sorte peuplé de boîtes englobantes aléatoires (générées à l'aide d'une formule, et non de données). Le but est de vérifier si un donné (x, y) se trouve dans l'une de ces boîtes.

Je peux trouver beaucoup de références sur la façon de générer des points aléatoires, mais pas beaucoup pour le faire de cette façon plus en arrière (je suppose que vous l'appelez «fonctionnel»?).

J'ai réussi à faire un algorithme qui divise le plan en 100x100 carrés, et à l'intérieur de chaque carré est un cadre de délimitation qui est placé au hasard. Mais est-ce possible avec un algorithme qui place les boîtes plus organiquement?

Edit: Voici un exemple d'algorithme j'ai utilisé pour un simple « point aléatoire dans une grille 100x100 » (de la mémoire, pourrait manquer quelque chose):

// 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

Que voulez-vous savoir exactement? Quelle est la condition pour savoir si un point donné (x, y) est dans une boîte? Ou un algorithme pour placer des boîtes au hasard? – bam500

+0

Je suppose qu'ils sont tous les deux liés. Juste n'importe quel type de distribution aléatoire où vous pouvez avoir une fonction (x, y) qui renvoie vrai si à l'intérieur d'une boîte de délimitation pour cette distribution. De préférence avec d'autres paramètres qui contrôlent l'espacement moyen etc. mais cela n'a pas trop d'importance. – LegendLength

+1

"organiquement": est un terme pour lequel vous avez votre propre compréhension, que nous ne partageons pas.Même remarque à propos de "vérifier si une coordonnée donnée est égale à un point aléatoire". S'il vous plaît, expliquez. –

Répondre

1

Eh bien, je ne sais pas si je exactement comprendre votre problème, mais la condition pour savoir si un point donné M (x, y) tracé dans un espace euclidien bidimensionnel représenté par deux axes x et y est à l'intérieur d'une boîte représentée par deux points opposés A (xa, ya) et B (xb, yb) est assez simple.

Définissons une isInsideTheBox fonction (x, y, xa, ya, Xb, Yb) retour true si M est à l'intérieur de la boîte et false autre:

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

Oui, je sais comment vérifier si vous êtes dans une boîte donnée un point. Ma question est de savoir quel type d'algorithmes est disponible pour produire un ensemble de points aléatoires organiques (sans grille) et vérifier si vous êtes sur ce point (ou dans une boîte, modification facile). – LegendLength

+1

@LegendLength Vous pouvez comprendre notre confusion, étant donné que le titre de votre question est "Vérifiez si point dans les cases aléatoires" –

1

Je réponds à la question suivante: vérifier si un le point est sur un point aléatoire.

Si les coordonnées sont réelles, la probabilité de chevauchement est nulle et la question est pratiquement inutile. Donc, j'assume des coordonnées discrètes. Si la question concerne les points aléatoires qui ont déjà été dessinés, la seule façon est de mémoriser les points aléatoires dans un conteneur lorsque vous les dessinez (tableau, trié, liste, arbre de recherche, table de hachage). Si la question concerne des points que pourrait être être dessiné à cet endroit, la réponse est "vrai" dans le domaine entier (où la distribution est non nulle). Vous devez modéliser géométriquement le domaine pour effectuer des requêtes point-in -....


Si la question est sur les points pseudo-aléatoires ou quasi-aléatoire, je ne pense pas qu'il y ait raccourci et vous devez procéder comme pour le cas vraiment aléatoire (à moins que le générateur est vraiment pauvre).

+0

Dans mon exemple d'algorithme, il décide à la fois où sont les points et vérifie également si vous êtes sur un des points. Cela fonctionne pour un avion infiniment grand et ne stocke aucune donnée. Il peut être facilement modifié pour vérifier la boîte englobante plutôt que d'atterrir sur le point exact. Mais il est limité à un par carré de 100x100. Je veux quelque chose de plus «organique», car vous pourriez avoir 5 points l'un à côté de l'autre, ce qui est impossible en utilisant la méthode grid. – LegendLength