IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Créer des coordonnées aléatoires dans un plan en évitant des zones


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2022
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2022
    Messages : 8
    Par défaut Créer des coordonnées aléatoires dans un plan en évitant des zones
    Bonsoir,

    Je suis dans un plan (1000 par 600) et j'aimerai obtenir des coordonnées aléatoires de ce plan en évitant la zone correspondant au carré (pour l'instant) ABCD 200x200 : A(800, 400) B(1000, 400) C(1000, 600) D(800, 600)

    J'ai pensé à faire ainsi (ça fonctionne) mais je ne sais pas si c'est la bonne manière car ça demande de créer une liste qui contient beaucoup d'éléments.

    Merci d'avance.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    List_Coord = []
     
    for x in range(1000):
        for y in range(400):
            List_Coord.append((x, y))
     
    for x in range(800):
        for y in range(400, 600):
            List_Coord.append((x, y))
     
    coord_random = random.choice(List_Coord)

  2. #2
    Invité
    Invité(e)
    Par défaut
    Salut !

    Je dirais qu'il y a 2 principales solutions, soit tu procèdes comme tu as commencé à le faire càd en produisant une liste de coordonnées probables excluant la zone en question, soit-tu procèdes en tirant aléatoirement la coordonnées X (ou Y) en premier et ensuite tu exclus un certain intervalle de coordonnées Y (ou X) en fonction de X.

    Exemple non-vérifié (pas le temps) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    def toto():
    	import random
    	x = random.randint(0,1000)
    	if 800<x<1000 :
    		y=random.choice((y for y in range(0,600) if y<400 or y>600))
    	else:
    		y = random.randint(0,600)
    A + !

  3. #3
    Membre du Club
    Homme Profil pro
    Responsable d'un système d'information métier
    Inscrit en
    Mai 2022
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Responsable d'un système d'information métier
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mai 2022
    Messages : 7
    Par défaut
    Salut ,
    J'ai une autre solution pour toi qui prend plus de ressources mais qui est plus facile à mettre en place quand tu as plein de coordonnées interdites dans tout les sens ,tu fais juste une liste des coordonnées interdites sous forme(x,y) et après tu fais un random x/y tu compare si ton x,y est dans la liste et le tour est joué c'est pas l'idéal du tout cette solution mais voilà ,si tu veux complexifier ton projet un jour voilà où si ça peut servir mais la réponse de Le Narvalo est la meilleure dans tout les cas

  4. #4
    Membre Expert
    Avatar de MPython Alaplancha
    Homme Profil pro
    Paysan à 3 francs six sous
    Inscrit en
    Juin 2018
    Messages
    923
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Paysan à 3 francs six sous
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juin 2018
    Messages : 923
    Billets dans le blog
    8
    Par défaut
    Bonjour,
    Pour le Tableau, j'utiliserai Numpy pour de meilleure performance :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    import numpy as np
    import itertools
     
     
    plan = np.array(list((x, y) for x, y in itertools.product(range(1000), range(600)) if not (800<x<1000 and 400<y<600)))
     
    print(plan[np.random.randint(1, len(plan))])

  5. #5
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 064
    Par défaut
    Les coordonnées x et y pour ABCD de taille 200 se trouvent en haut à gauche du carré ?

  6. #6
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2022
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2022
    Messages : 8
    Par défaut
    Merci pour vos réponses.

    Citation Envoyé par fred1599 Voir le message
    Les coordonnées x et y pour ABCD de taille 200 se trouvent en haut à gauche du carré ?
    Je n'ai pas bien compris la question. Pour schématiser (voir pièce-jointe) : Le carré ABCD en haut à droite. Je cherche à obtenir un (x,y) aléatoire dans le reste de la zone.

    Citation Envoyé par wiztricks Voir le message
    S'il y a plein de rectangles à exclure, une solution pourrait être d'avoir une "image" 1000x600 de points blancs, les zones à exclure en noir, et on y pioche un point au hasard tant qu'il n'est pas blanc (et on marque les déjà choisis en bleu).
    Malin !

    Citation Envoyé par wiztricks Voir le message
    ...c'est d'abord une question d'algo. À poser dans le forum ad hoc..
    D'accord, j'irai voir si je rencontre des difficultés.
    Images attachées Images attachées  

  7. #7
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 064
    Par défaut
    Citation Envoyé par python32123 Voir le message
    Je n'ai pas bien compris la question. Pour schématiser (voir pièce-jointe) : Le carré ABCD en haut à droite. Je cherche à obtenir un (x,y) aléatoire dans le reste de la zone.
    Pour dessiner le carré de 200, vous avez besoin de coordonnées du point de départ de sa construction, mais où se trouve ce point, en haut à gauche (point D), à droite (point C)?

  8. #8
    Invité
    Invité(e)
    Par défaut
    Salut !

    Je t'ai fait un truc un peu chiadé en m'inspirant de la proposition de notre roi (Wiz) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    import pygame, random
    from pygame.locals import *
     
    flags = DOUBLEBUF
    width, height = 910, 540
    RED = (255,0,0)
    BLUE = (0,0,255)
    GREEN = (0,255,0)
     
    pygame.init()
    SCREEN = pygame.display.set_mode((width, height), flags, 16)
    SCREEN.fill((255,255,255))
    pygame.display.update()
     
    def draw(ending=False):
        global COORDS
        nb = len(COORDS)
        if not ending:
            for i, coords  in enumerate(COORDS):
                x0, y0 = coords
                next_index = (i+1)-nb
                if next_index:
                    x1, y1 = COORDS[next_index]
                    pygame.draw.line(SCREEN, RED, (x0, y0), (x1, y1))
        else:
            pygame.draw.polygon(SCREEN, RED, COORDS)
            COORDS = []
     
        pygame.display.update()
     
    def delete():
        global COORDS
        SCREEN.fill((255,255,255))
        COORDS = COORDS[:-1]
        draw()
     
    def cross(X, Y):
        SCREEN.set_at((X, Y), BLUE)
        pygame.draw.line(SCREEN, GREEN, (X-1, Y), (X-31, Y))
        pygame.draw.line(SCREEN, GREEN, (X+1, Y), (X+31, Y))
        pygame.draw.line(SCREEN, GREEN, (X, Y-1), (X, Y-31))
        pygame.draw.line(SCREEN, GREEN, (X, Y+1), (X, Y+31))
        pygame.display.update()
     
    COORDS = []
    coord = (0,0)
    space_pressed = False
    STARTED = False
    while 1:
        for event in pygame.event.get():
            if event.type == MOUSEBUTTONDOWN:
                if event.button == BUTTON_LEFT:
                    x, y = pygame.mouse.get_pos()
                    if (x, y) != coord:
                        COORDS.append((x,y))                
                        draw()
                        coord = (x, y)
                if event.button == BUTTON_RIGHT:
                    draw(True)
     
            if event.type == KEYDOWN :
                if event.key == K_ESCAPE:
                    pygame.quit()
                    break
     
                if event.key == K_BACKSPACE:
                    delete()
                    STARTED = False
     
                if event.key == K_SPACE:
                    if not STARTED:
                        COPY_SCREEN = pygame.Surface.copy(SCREEN)
                        STARTED = True
                    space_pressed = True
     
            if event.type == KEYUP :
                if event.key == K_SPACE:
                    space_pressed = False
     
        if space_pressed:
            array = pygame.surfarray.pixels_green(COPY_SCREEN)
     
            X = random.randint(0, width-1)
            while not any(array[X]):
                X = random.randint(0, width-1)
     
            Y_coords = []    
            for y, pixel in enumerate(array[X]):
                if pixel:
                    Y_coords.append(y)
     
            Y = random.choice(Y_coords)
            cross(X,Y)
            print(X, Y)
    • CLIC GAUCHE pour positionner un point du polygone
    • CLIC DROIT pour fermer le polygone
    • BACKSPACE pour revenir en arrière
    • ESPACE pour positionner aux hasards des croix qui ne sont pas dans le(s) polygone(s)
    • ECHAP pour fermer la fenêtre



    Dernière modification par Invité ; 08/05/2022 à 12h28.

  9. #9
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 323
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 323
    Par défaut
    Impressionnant, et du coup, je découvre (pygame et) que pygame n'est pas réservé au jeux

    Me restait à faire une version "graphique" sur ma console ou l'on "dessine" puis teste "l'écran" ...

    triche : tout est réduit d'un facteur 20 pour tenir facilement dans une console
    ps: ici l'axe "y" est inversé (facile à gérer dans screen_display(), plus simple d'inverser dès la generation du graphique )

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    import random
     
     
    w = 50
    h = 30
    exclures = [
        { "x": 40, "y": 20, "size": 10 },    # un carré
        { "x": 2, "y": 2, "size": 20 },    # un autre carré
        ]
     
    def screen_display(screen):
        for line in screen:
            for x in line:
                print(f"{1 if x else 0}", end="")
            print()
        print(f"{len(screen[0])} colonnes X, {len(screen)} lignes Y \t {len(screen[0])*20}x{len(screen)*20}\n")
     
    SCREEN = [[True] * w for x in range(h)]
     
    for figure in exclures:
        for x in range(figure["x"], figure["x"] + figure["size"]+1):
            for y in range(figure["y"], figure["y"] + figure["size"]+1):
                try:
                    SCREEN[y-1][x-1] = False
                except IndexError:
                    print("OOPS, la figure déborde de l'écran")
                    raise    # on peut ignorer 
    screen_display(SCREEN)
     
    def is_valide(screen):
        # autres algos possible
        x, y = -1, -1
        while x < 0 and y < 0:
            x_tmp, y_tmp = random.randint(0, w-1), random.randint(0, h-1)
            try:
                if screen[y_tmp][x_tmp]:
                    x, y = x_tmp, y_tmp
                else:
                    print(f"\t# NON Valide: {x_tmp:02d},{y_tmp:02d}\t{x_tmp*20:03d}x{y_tmp*20:03d}")
            except IndexError:
                print("MAUVAIS ALGO !!!!", x_tmp, y_tmp)
        return x, y
     
    resultats = ()
    while len(resultats) < 20:
        resultats += (is_valide(SCREEN),)
    for x,y in resultats:
        print(
            f"Valide: {x:02d},{y:02d}\t",
            f"{x*20:03d}x{y*20:03d}\t",
            f"({x*20:03d}x{(h*20)-(y*20):03d})"
            )
    Un résultat
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    11111111111111111111111111111111111111111111111111
    10000000000000000000001111111111111111111111111111
    10000000000000000000001111111111111111111111111111
    10000000000000000000001111111111111111111111111111
    10000000000000000000001111111111111111111111111111
    10000000000000000000001111111111111111111111111111
    10000000000000000000001111111111111111111111111111
    10000000000000000000001111111111111111111111111111
    10000000000000000000001111111111111111111111111111
    10000000000000000000001111111111111111111111111111
    10000000000000000000001111111111111111111111111111
    10000000000000000000001111111111111111111111111111
    10000000000000000000001111111111111111111111111111
    10000000000000000000001111111111111111111111111111
    10000000000000000000001111111111111111111111111111
    10000000000000000000001111111111111111111111111111
    10000000000000000000001111111111111111111111111111
    10000000000000000000001111111111111111111111111111
    10000000000000000000001111111111111111111111111111
    10000000000000000000001111111111111111100000000000
    10000000000000000000001111111111111111100000000000
    10000000000000000000001111111111111111100000000000
    11111111111111111111111111111111111111100000000000
    11111111111111111111111111111111111111100000000000
    11111111111111111111111111111111111111100000000000
    11111111111111111111111111111111111111100000000000
    11111111111111111111111111111111111111100000000000
    11111111111111111111111111111111111111100000000000
    11111111111111111111111111111111111111100000000000
    11111111111111111111111111111111111111100000000000
    50 colonnes X, 30 lignes Y     1000x600
     
            # NON Valide: 13,07     260x140
            # NON Valide: 43,21     860x420
            # NON Valide: 42,27     840x540
            # NON Valide: 49,19     980x380
            # NON Valide: 20,07     400x140
    Valide: 26,03    520x060         (520x540)
    Valide: 36,23    720x460         (720x140)
    Valide: 17,22    340x440         (340x160)
    Valide: 46,00    920x000         (920x600)
    Valide: 19,00    380x000         (380x600)
    ...
    Citation Envoyé par wiztricks Voir le message
    une "image" 1000x600 de points blancs, les zones à exclure en noir, et on y pioche un point au hasard tant qu'il n'est pas blanc (et on marque les déjà choisis en bleu).
    pas de troisième état, donc ici on risque de rechercher à l'infini ...
    Et donc, pas de gestion des doubles (dans la liste des valides)

    EDIT:
    Sortie avec une version qui marque les choix
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    ••••••••1•••••••1••••1•••••••••••1••••••0•••••••••
    •••1••••1•••••1••1•••111••••1••••••1••••••••0•••0•
    •1•••••••••••••••1•••••••••••1•••1••••10•••0••••••
    •••••••••••••••••••••111••••••••••••••••0••0•••011••••••••••••••••1•••••••••1•••1••1•••0••••••••01•••••••••••••••••••••••••1111•••1••••••0•••••••
    ••••••1••••••1111••••••••111•••1•••1•••••••••0••
    •••••••••••••11•••••••••1•••1••••1•••••••0••0••••
    •0•••0••••0•••0••••••••••1••1••1••••••••0•••••••••
    •0••0••••••••0•••••••0••••••••11••••1•••0•••••••••
    ••••0•••000•••00•••••••••••••••••1•••••••••••••••
    ••••••0•••0••••••••••••11••1•••••1•••11••1••1••••
    1••0••••••0••••••••••••••1•••••••••••1•••••11•••1•
    ••••0••••••••••0•••••••••••1•••••••••••••1•••••••1
    1••••0••••••••••••••0•••••••11•••••11••••••••••1••
    ••0••••••0•••••0•••••••••••1••••••••••••11•••••••10••00•••••0••0•••••••••••••••••1•••••1•••••1••••
    •00••••••••0••0•••0••••••••••••11•••••••1••••••1•
    ••••••••0•••0••••0••••••••••••••1••••••••••1••••••
    •0•••••••00•••••0••0•••••••1••••••••••••1••••1••••
    ••••0•••••••••0••0•••0••••••1•••••••••••••••••••11
    ••••0••••••0••••00•••••••1••••••1•••••1•••••••••••
    •0••0•••00000••••0•••••••••1•••••11••••••••1••••
    ••••0••••••••••••••••••••••••1•••••••••••1•••••11•
    ••••••••00•••••••••••1111•••••••••••••••••11••
    ••••••••••0••0000••••11••1•••••11••1••••••••••1••
    •••••••0••••00•••••••••••••••••••1••••••••1••••1••
    •••0••••0••0••••0••00••••1•••••••••••••••••••1•••
    •0••••0••••••000••••••••••••••1••1••••••1••••••••
    ••••••••••••••••••111••••••••••••1••••11••111•••
    50 colonnes X, 30 lignes Y       1000x600
     
    1500 éléments: 138 valides / 97 invalides        1265 testés (points)
    Avec une demande de 800 réponses valides

  10. #10
    Membre Expert
    Avatar de MPython Alaplancha
    Homme Profil pro
    Paysan à 3 francs six sous
    Inscrit en
    Juin 2018
    Messages
    923
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Paysan à 3 francs six sous
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juin 2018
    Messages : 923
    Billets dans le blog
    8
    Par défaut
    Bonjour,
    Citation Envoyé par LeNarvalo Voir le message
    Salut !

    Je t'ai fait un truc un peu chiadé en m'inspirant de la proposition de notre roi (Wiz) :

    • ENTREE pour positionner aux hasards des croix qui ne sont pas dans le(s) polygone(s)
    La partie positionner aux hasards des croix ne fonctionne pas chez moi ... (Appuie touche Entrée sans effet)

    Sinon, ci-dessous pour illustrer via matplotlib mon tableau numpy.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    import numpy as np
    import itertools
    import matplotlib.pyplot as plt
     
    plan = np.array(list((x, y) for x, y in itertools.product(
        range(1000), range(600)) if not (800<x<1000 and 400<y<600)))
    x = [x for x, y in plan]
    y = [y for x, y in plan]
    plt.scatter(x, y)
     
    points = {'A': (800, 400), 'B': (1000, 400), 'C': (1000, 600), 'D': (800, 600)}
    for key in points.keys():
        x, y= points[key]
        plt.plot(x, y, marker="o", color="red")
        plt.text(x, y, key, color="black", fontsize=12, weight="bold")
     
    plt.show()
    Nom : matplotlib.png
Affichages : 229
Taille : 20,5 Ko

  11. #11
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 753
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 753
    Par défaut
    Citation Envoyé par python32123 Voir le message
    J'ai pensé à faire ainsi (ça fonctionne) mais je ne sais pas si c'est la bonne manière car ça demande de créer une liste qui contient beaucoup d'éléments.
    Il n'y a pas de "bonne manière", ça va dépendre de ce que vous voulez faire "après".
    Avec un seul rectangle à exclure, il y aura au plus 4 rectangles pour choisir. Dans ce cas, choisir un des rectangles puis un de ses points est raisonnable.
    S'il y a plein de rectangles à exclure, une solution pourrait être d'avoir une "image" 1000x600 de points blancs, les zones à exclure en noir, et on y pioche un point au hasard tant qu'il n'est pas blanc (et on marque les déjà choisis en bleu).

    Et il y en a d'autres... mais c'est d'abord une question d'algo. à poser dans le forum ad hoc et ça ne deviendra un sujet Python qu'après avoir trituré l'algo. qui va bien pour ce que vous voulez faire.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  12. #12
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 323
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 323
    Par défaut
    bonjour

    Oui, il y a plusieurs façon de calculer, mais ce qui me pose problème ici, c'est de bien poser le problème en python.
    Je serais parti sur un code de ce type

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    w=1000
    h=600
     
    exclures = [
        { "origine":(800,400), "size": 200 }, # un carré donc ici "size" suffit
        ]
    # ou exclure = { "origine":(800,400), "size": 200 }
    # ou exclure = { "x":800, "y": 400, "size": 200 }
    Ensuite, première idée, est de créer 2 fonction (inline ou non) x_is_in_carre(x, carre)->bool , y_is_in_carre(y, carre)->bool (ou figure_contains_x(x, figure)...) ?

  13. #13
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 753
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 753
    Par défaut
    Citation Envoyé par papajoker Voir le message
    Oui, il y a plusieurs façon de calculer, mais ce qui me pose problème ici, c'est de bien poser le problème en python.
    Les structures de données vont avec l'algo. et l'algo. s'attache à traiter le problème en fonction de sa complexité (un ou pluisieurs rectangles à tester)... ce n'est qu'après qu'on va imaginer comment coder cela avec ls constructions et les structures de données de son langage préféré.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  14. #14
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 323
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 323
    Par défaut
    ?? je ne vois qu'une représentation, sans plus (même stricte), du problème traduite en python (dans entrées)


    Je suis dans un plan (1000 par 600)
    en évitant la zone correspondant au carré (pour l'instant) ABCD 200x200 : A(800, 400) B(1000, 400) C(1000, 600) D(800, 600)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    # ou exclure = { "origine":(800,400), "size": 200 }
    # ou exclure = { "x":800, "y": 400, "size": 200 }
    Ici, j'ai donné plusieurs choix et écrit une note, pour montrer que justement on pouvais adapter cette structure en fonction du besoin/envie du codeur (plusieurs zones ou pas, carré...triangle ? , ...)
    Oui, cette représentation est peut-être trop stricte et le codeur peut dans ce cas précis dès le début définir les rectangles "valides". Mais ici, rien n'empeche le codeur de calculer des zones valides depuis ces 3 variables.

    Ici, le codeur donne sa solution, donc nous ne sommes plus dans le phase "algo" ! il s'agit bien de python, le codeur devrait donc bien poser le problème (ou solution déduite) avec 3 variables (plus ou moins complexes): w, h et:
    - exclure(s), puis éventuellement déduire/calculer le zones valides
    - ou bien directement les rectangles valides (2 suivant l'image)
    Ensuite vient le calcul des points en fonction de l'algo


    Citation Envoyé par wiztricks Voir le message
    constructions et les structures de données de son langage préféré.
    Clairement pas mon cas je ne dois pas faire plus d'un "petit" projet python tous les 6 mois (généralement une petite participation à un projet open source qui n'est pas de moi), je trouve que python est juste bien adapté pour le GUI qui ne demande pas trop de temps de codage et, un bon choix pour recevoir un maximum de contributeurs dans un projet open source.

Discussions similaires

  1. image - créer des zones de sélections
    Par Seb2913 dans le forum Graphisme
    Réponses: 2
    Dernier message: 06/08/2016, 18h33
  2. [2.x] Créer des zones avec les mêmes droits
    Par SAmpistaroy dans le forum Symfony
    Réponses: 3
    Dernier message: 28/04/2013, 15h44
  3. Créer des "zones"
    Par le_viking dans le forum Silverlight
    Réponses: 4
    Dernier message: 25/09/2010, 19h36
  4. Créer des zones de texte dynamiquement
    Par supertoms dans le forum IHM
    Réponses: 7
    Dernier message: 17/04/2008, 09h10
  5. Créer des zone réactives avec un éditeur visuel
    Par sami_c dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 12
    Dernier message: 16/11/2005, 10h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo