Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    Generare un punto nei "pressi" di un altro.

    Come da titolo del thread avrei necessità di generare una coppia di interi (che indicheranno la posizione di un punto nello spazio) in modo tale che risulti "vicina" un'altra coppia data.

    Ad esempio se $a['x'] = 2 e $a['y'] = 95 dovrei generare due interi che stanno diciamo al massimo a + o - 5 dai due numeri di partenza ( $b['x'] = -1 e $b['y'] = 98 ad esempio ), fin qui niente di troppo complicato, i miei problemi sorgono quando, iniziando a popolare di coppie questa ipotetica griglia di valori, devo controllare che il nuovo valore generato non corrisponda ad una "casella" già occupata da un altro punto e che durante la generazione non ci si discosti troppo dal punto di partenza senza aver prima riempito quella zona.

    Ho qualche idea ma piuttosto confusa e a mio avviso poco performante...
    Spero di essermi spiegato.
    Qualsiasi idea è ben accetta...


    Grazie infinite anticipatamente.

    Andrea

  2. #2
    i due interi li salvi subito a database appena creati?

  3. #3
    Originariamente inviato da goikiu
    i due interi li salvi subito a database appena creati?
    I due iniziali direi di si, dalla seconda coppia in poi prima di inviare l'insert gli farei fare quei controlli di cui sopra.

  4. #4
    Originariamente inviato da Andr3a_84
    I due iniziali direi di si, dalla seconda coppia in poi prima di inviare l'insert gli farei fare quei controlli di cui sopra.
    Giusto per precisare, non mi interessa tanto dove venga messo il primo punto, quanto che i successivi generino una sorta di "nube" di punti attorno al primo.

    Grazie

  5. #5
    nè X nè Y devono essere identiche, ma essendo un punto in uno spazio "astratto" è concesso avere più volte X e più volte Y giusto?

    In questo caso perchè non ti crei un'array di controllo?
    Codice PHP:
    $a['x'] = 0// valore iniziale
    $a['y'] = 0// valore iniziale
    $controllo[$a['x']_$a['y']] = 0// qualsiasi valore va bene 
    poi crei la prima coppia di interi nuovi , controlli che $controllo[b['x']_b['y']] non sia settata (quindi sarebbe già stata creata) e fai i calcoli necessari se esiste già. Ora non guardare la sintassi, però come concetto potrebbe servirti.

  6. #6
    Originariamente inviato da goikiu
    nè X nè Y devono essere identiche, ma essendo un punto in uno spazio "astratto" è concesso avere più volte X e più volte Y giusto?

    In questo caso perchè non ti crei un'array di controllo?
    Codice PHP:
    $a['x'] = 0// valore iniziale
    $a['y'] = 0// valore iniziale
    $controllo[$a['x']_$a['y']] = 0// qualsiasi valore va bene 
    poi crei la prima coppia di interi nuovi , controlli che $controllo[b['x']_b['y']] non sia settata (quindi sarebbe già stata creata) e fai i calcoli necessari se esiste già. Ora non guardare la sintassi, però come concetto potrebbe servirti.
    Grazie per la risposta.

    Come idea di controllo dell'univocità del punto ok (avevo pensato ad una cosa simile, penso che a questo punto farò così), ma per quanto riguarda il controllo non tanto della distanza dalla coppia iniziale ma che siano ad esempio assegnati tutti i punti a distanza +10 e -10 dal punto iniziale prima di assegnare quelli a distanza >10 ?

  7. #7
    Originariamente inviato da Andr3a_84
    Grazie per la risposta.

    Come idea di controllo dell'univocità del punto ok (avevo pensato ad una cosa simile, penso che a questo punto farò così), ma per quanto riguarda il controllo non tanto della distanza dalla coppia iniziale ma che siano ad esempio assegnati tutti i punti a distanza +10 e -10 dal punto iniziale prima di assegnare quelli a distanza >10 ?
    Devo per forza controllare con un ciclo tutte le possibilità o c'è un metodo meno "lungo", perchè... boh fintanto che si parla di una distanza nell'ordine delle decine ok, ma se aumenta la distanza mi da l'idea di essere pesantuccio... sbaglio ?

  8. #8
    temo che per quello tu debba fare un ciclo, in parte credo tu riesca ad automatizzarlo, personalmente non conosco la quantità di "carico di lavoro" che controllare che delle variabili siano settate o no possa pesare sul server. Lascio quindi la parola a chi in argomento ne conosce più di me.

  9. #9
    di quanti punti stiamo parlando?
    una idea potrebbe essere quella di generare tutti i punti possibili che si discostano al max di un tot, metterli in un array, randomizzarlo ed estrarli tutti quanti; così sarai sicuro di aver riempito tutta la 'zona'

    ti posto una bozza che non tiene conto di eventuali punti già inseriti in quella zona (neanche il punto iniziale stesso ) e che ovviamente genera una nube a quadrato non circolare
    Codice PHP:
    class punto {
       public  
    $x,$y;
       
    public function 
    __construct($x 0$y 0) {
        
    $this->$x;
        
    $this->$y;
      }  
    }


    function 
    swarm($p$size){  // punto iniziale e massimo discostamento
    $points = array();

    $startx $p->$size;
    $starty $p->$size;
    $endx $p->$size;
    $endy $p->$size;

    while(
    $starty >= $endy){  // genero tutti i punti possibili
        
    $x $startx;
        
        while(
    $x <= $endx){
        
            
    //echo $x.' '.$starty."\n";
            
    $points[]=new punto($x,$starty);
        
    $x++;
        }

    $starty--;
    }


    shuffle($points); // randomizzo
    return $points;

    }

    $pu = new punto(3,3);


    $nube swarm($pu,2);

    print_r($nube); 

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.