I 5 punti

Il forum di Base5, dove è possibile postare problemi, quiz, indovinelli, rompicapo, enigmi e quant'altro riguardi la matematica ricreativa e oltre.

Moderatori: Gianfranco, Bruno

Gianfranco
Supervisore del sito
Supervisore del sito
Messaggi: 1708
Iscritto il: ven mag 20, 2005 9:51 pm
Località: Sestri Levante
Contatta:

Re: I 5 punti

Messaggio da Gianfranco »

La notte porta consiglio.
Ho modificato il programma apportando le seguenti variazioni.
a) tutti i punti all'inizio partono dal centro del rettangolo (intersezione delle diagonali)
b) ogni punto ha due intorni di variabilità casuale: orizzontale e verticale.

Il programma riduce gli intervalli ad ogni miglioramento della configurazione ma quando gli intervalli sono troppo piccoli li allarga e riprende il ciclo.

Si ottiene così una struttura di punti che si espande dentro il rettangolo.
Ci sono momenti di espansione rapida alternati a momenti di stasi. Spettacolare!
Si possono raggiungere varie configurazioni finali, molto simili a quelle trovate da Panurgo.

Il prossimo passo è di aggiungere un po' di determinismo.

Ecco il programma.

Codice: Seleziona tutto

!'------------------------------------
!'Si dispongano 5 (n) punti all'interno (è compreso pure il perimetro) di un rettangolo 2x1,
!'in maniera tale che fra i punti più vicini la distanza sia massima.
!'Soluzione con una Macchina di Darwin 
!'------------------------------------

!'Matrice coordinate dei punti
DIM p(50,2)

!'Matrice intorni di ogni punto
!'Il valore è l'inizio dell'intorno di ogni punto
DIM basix(50)
DIM basiy(50)

!'Lati del rettangolo in cui stanno i punti
LET b=2
LET h=1

!'Minimo generale e minimo di ogni prova
LET mingen=0
LET minatt=3

!'Contatore generale delle prove,
!'contatore dei cicli senza miglioramento,
!'contantore dei miglioramenti
LET contgen=0
LET contatt=0
LET miglioramenti=0

!'Numero di punti
LET npunti=12

!'Intorni iniziali dei punti
!'orizzontali e verticali
LET intornox=b/5
LET intornoy=h/5

FOR i=1 TO npunti
   LET basix(i)=b/2-intornox/2
   LET basiy(i)=h/2-intornoy/2
NEXT i

!'Minima ampiezza intorni per uscire dal programma
LET minintor=0.01


!'------------------------------------
!'DUE VARIABILI CRITICHE
!'------------------------------------

!'Ogni quanti miglioramenti si riducono gli intorni
LET nmigl=2

!'Fattore di riduzione degli intorni
LET fatrid=0.7

LET t0=TIME

RANDOMIZE

!'------------------------------------
!'INIZIO PROGRAMMA
!'------------------------------------

!'Inizio del ciclo
10 DO
   !'Assegna al minimo un valore alto
   !'dev'essere più alto del massimo possibile
      LET minatt=3
       
      !'Estrae coordinate del primo punto    
      LET p(1,1)=basix(1)+intornox*RND
      IF p(1,1)<0 THEN LET p(1,1)=0
      IF p(1,1)>b THEN LET p(1,1)=b
       
      LET p(1,2)=basiy(1)+intornoy*RND
      IF p(1,2)<0 THEN LET p(1,2)=0
      IF p(1,2)>h THEN LET p(1,2)=h
       
      !'Estrae coordinate dei punti successivi
      !'e valuta le distanze di ciascun nuovo punto da quelli precedenti    
      FOR i = 2 TO npunti
         LET p(i,1)=basix(i)+intornox*RND
         IF p(i,1)<0 THEN LET p(i,1)=0
         IF p(i,1)>b THEN LET p(i,1)=b
          
         LET p(i,2)=basiy(i)+intornoy*RND 
         IF p(i,2)<0 THEN LET p(i,2)=0
         IF p(i,2)>h THEN LET p(i,2)=h
          
         !'Distanze
         FOR k=1 TO i-1
            LET d=SQR((p(k,1)-p(i,1))^2+(p(k,2)-p(i,2))^2)
            IF d<minatt THEN LET minatt=d
            IF minatt<mingen THEN EXIT FOR
         NEXT k
          
         !'Se il minimo di questa prova è minore del minimo generale è inutile continuare
         IF minatt<mingen THEN
            LET contatt=contatt+1
            EXIT FOR
         END IF
      NEXT i
       
      !'------------------------------------       
      !'Stampa rapporto solo se la situazione è migliorata
      IF minatt>=mingen THEN
       
         LET miglioramenti=miglioramenti+1
         LET mingen=minatt    
          
         !'------------------------------------       
         !'Stampa situazione migliorata
         CALL rapporto (n,p,mingen)   
          
         !'------------------------------------       
         !'Visualizza grafica  
         CALL grafica(mingen,n,p,basix,basiy,intornox, intornoy, b, h)
          
         !'------------------------------------
         !'Ogni nmigl miglioramenti riduce l'ampiezza dell'intorno  
         IF miglioramenti = nmigl THEN  
            LET intornox=intornox*fatrid
            LET intornoy=intornoy*fatrid    
            FOR i=1 TO npunti
               LET basix(i)=p(i,1)-intornox/2
               LET basiy(i)=p(i,2)-intornoy/2
            NEXT i
             
            LET contatt = 0
             
            PRINT "-------------------"
            PRINT "Ho ridotto gli intorni"
            PRINT "-------------------"
            !'------------------------------------       
            !'Stampa situazione migliorata
            CALL rapporto (n,p,mingen)   
             
            !'------------------------------------
            !'Visualizza grafica  
            CALL grafica(mingen, n, p, basix, basiy, intornox, intornoy, b, h)
            LET miglioramenti=0
            LET nmigl=nmigl-1
            IF nmigl<1 THEN LET nmigl=1
             
            !'------------------------------------
            !'A T T E N Z I O N E: qui c'é la possibile F I N E del programma
             
            IF intornox<minintor THEN
               PRINT "Riprendo"
                
               LET intornox=b/5
               LET intornoy=h/5    
               FOR i=1 TO npunti
                  LET basix(i)=p(i,1)-intornox/2
                  LET basiy(i)=p(i,2)-intornoy/2
               NEXT i
                
               LET contatt = 0
                
               CALL grafica(mingen, n, p, basix, basiy, intornox, intornoy, b, h)
               randomize
               GOTO 10
            END IF
             
             
             
            !'IF intorno<minintor THEN
            !'            PRINT "Ho finito!"
            !'            GOTO 100
            !'         END IF
             
         END if
      END if    
       
      LET contgen=contgen+1    
   LOOP
    
    
   !'------------------------------------
   !'FINE PROGRAMMA
   !'------------------------------------
    
    
   !'------------------------------------
   !'I N I Z I O   S U B R O U T I N E S
   !'------------------------------------
    
   !'------------------------------------
   !'Visualizza grafica, ogni punto e ogni intorno      
   SUB grafica(mingen, n, p(,), basix(), basiy(), intornox, intornoy, b, h)
      SET WINDOW -1,b+2,-1,h+2
       
      CLEAR 
      DRAW GRID
      SET AREA COLOR 38                          
      PLOT AREA:  0,0;0,h;b,h;b,0 
      SET LINE COLOR 1         
      PLOT LINES: 0,0;0,h;b,h;b,0;0,0
       
      FOR n=1 TO npunti
       
         LET x=p(n,1)
         LET y=p(n,2)
         LET xi=basix(n)
         LET xf= xi+intornox
         LET yi=basiy(n)
         LET yf=yi+intornoy
          
         LET lt=1/30
         SET LINE COLOR 41         
         PLOT LINES: xi, y; xf,y
         PLOT LINES: x, yi; x,yf
         SET AREA COLOR 4                          
         PLOT AREA:  x-lt,y-lt; x+lt,y-lt;x+lt,y+lt;x-lt,y+lt      
          
         SET TEXT COLOR 1
         PLOT TEXT,AT x+lt,y+lt:CHR$(64+n)
         LET min$=STR$(INT(mingen*10000)/10000)
         LET intornox$=STR$(INT(intornox*10000)/10000)
         LET tempo$=STR$(TIME-t0)
         LET testo$="Max distanza: "&min$&"   Tempo di elaborazione: "&tempo$&" secondi"&"   Intorno: "&intornox$
         PLOT TEXT, AT 0,h+1:testo$ 
          
      NEXT n
       
   END SUB
    
   !'------------------------------------
   !'Stampa il minimo e le coordinate dei punti
   SUB rapporto (npunti,p(,),mingen)  
      PRINT mingen
      !'FOR n=1 TO npunti
      !'   LET x=INT(p(n,1)*1000)/1000
      !'   LET y=INT(p(n,2)*1000)/1000
      !'   PRINT CHR$(64+n);"(";x;";";y;")"
      !'NEXT n
   END SUB   
    
100 END
Pace e bene a tutti.
Gianfranco

David
Livello 4
Livello 4
Messaggi: 189
Iscritto il: mar ago 04, 2009 11:49 am

Re: I 5 punti

Messaggio da David »

Benone!

La DM si può prestare magnificamente ai problemi di impacchettamento di figure geometriche all'interno di altre figure geometriche,il passaggio della distribuzione con separazione minima dei punti ai problemi di impacchettamento è al tempo stesso semplice e sorprendente; immaginate di avere un cartone abbastanza grande e 10 lattine di olio uguali e perfettamente cilindriche con la base di raggio r,dobbiamo ritagliare una scatola parallelepipeda di base quadrata L tale da contenere (in piedi) tutte e 10 le lattine.
(l'altezza della scatola possiamo farla pari all'altezza delle lattine)

Quale sarà il lato minimo della base quadrata che riuscirà a contenere tutte e 10 le lattine?

panurgo
Livello 9
Livello 9
Messaggi: 1521
Iscritto il: sab nov 19, 2005 3:45 pm
Località: Padova

Re: I 5 punti

Messaggio da panurgo »

Gianfranco ha scritto:Panurgo: intuitivamente la tua MD mi piace, ma... potresti spiegare meglio il discorso dei fratelli?
Panurgo ha scritto:...il calcolo della distanza minima tra n punti è un processo che va con n^2 e vi sono 2^n possibili set...
a) lo so che la differenza è poca ma mi sembra che il calcolo della distanza minima tra n punti varia con n(n-1)/2 e inoltre, quando hai un record (minimo) già stabilito, puoi uscire dal ciclo appena trovi un valore al di sopra di tale record.
b) non ho capito da dove vengono i 2^n set.
Questo è uno pseudocodice che illustra in soldoni il mio algoritmo (tralascio i dettagli dell’output grafico)

Codice: Seleziona tutto

P <- genero n punti
distP <- calcolo le distanze tra P
while (condizione da definire) {
  Q <- P + "rumore" 
  # questi "figli" diventano "fratelli":
  # ora devo decidere quale fratello tenere per ogni coppia
  for (ogni possibile combinazione di P e Q - ce ne sono 2^n) {
    PQ <- P
    PQ[1,] <- Q[1,] # questo è un esempio
    distPQ <- calcolo le distanze tra PQ
    # "selezione naturale": la mutazione favorevole viene accettata
    if (min(distPQ) > min(distP)) {
      P <- PQ
      distP <- distPQ
    } 
    # "deriva genetica": la mutazione indifferente viene accettata 
    #                    solo alcune volte
    if (min(distPQ) == min(distP)) {
      if (runif(1) < 1/5) {
        P <- PQ
        distP <- distPQ
      } 
    } 
  } # end for
} # end while
Il "rumore" viene da una distribuzione gaussiana bivariata: quando il sistema si avvicina ad un punto di equilibrio solo le variazioni piccole possono produrre mutazioni favorevoli; quando è proprio vicino anche le mutazioni indifferenti derivano solo da variazioni piccole; il rumore gaussiano ha molte variazioni piccole ma un numero di variazioni grandi sufficiente a rendere efficiente l’algoritmo anche lontano dall’equilibrio.
le combinazioni di P e Q sono: 1 punto da Q, n - 1 da P; 2 punti da Q, n - 2 da P, ..., n punti da Q, 0 da P.

P.S.: $n\left(n - 1\right)/2$ è dell’ordine di $n^2$: grossolanamente, $\lim_{n \to \infty}{\frac{n\left(n - 1\right)/2}{n^2}}\/=\/\frac12$
il panurgo

Principio di Relatività: $\mathbb{m} \not \to \mathbb{M} \, \Longleftrightarrow \, \mathbb{M} \not \to \mathbb{m}$
"Se la montagna non va a Maometto, Maometto NON va alla montagna"

Gianfranco
Supervisore del sito
Supervisore del sito
Messaggi: 1708
Iscritto il: ven mag 20, 2005 9:51 pm
Località: Sestri Levante
Contatta:

Re: I 5 punti

Messaggio da Gianfranco »

Grazie Panurgo,
così è tutto più chiaro.
Concordo anche sulla questione di n^2.

Per David, ho modificato la mia MD per farle impaccare dei cerchi in un quadrato sempre più piccolo. Anzi in un rettangolo che vorrebbe essere un quadrato.
Invio un primo risultato in cui 10 cerchi di raggio 1 stanno in un rettangolo di lati 6.81x6.84.
Dapprima li ha messi in un quadrato 9x9 e poi li ha avvicinati il più possibile fra di loro cercando di mantenerli su una superficie quadrata.

Ciao
Gianfranco
Allegati
Dieci cerchi nel quadrato più piccolo possibile.
Dieci cerchi nel quadrato più piccolo possibile.
quadrato.png (5.71 KiB) Visto 8263 volte
Pace e bene a tutti.
Gianfranco

David
Livello 4
Livello 4
Messaggi: 189
Iscritto il: mar ago 04, 2009 11:49 am

Re: I 5 punti

Messaggio da David »

Grazie Gianfranco, il problema comunque è perfettamente equivalente a quello di trovare la separazione massima per i punti vicini nel caso n=10 per un quadrato di lato 1, in effetti i 10 punti sono i centri delle circonferenze (la separazione massima per punti vicini varrà 2r, con r raggio del cerchio,mentre il lato del quadrato che contiene le circonferenze vale 1+r)

Una volta trovata la disposizione più efficiente per 10 punti,avremo trovato la massima misura di r per un quadrato unitario o viceversa ribaltando il problema se abbiamo la misura di r, possiamo trovare la misura minima del lato L della base quadrata che contenga i 10 punti e di conseguenza i 10 cerchi.

Spero di non aver generato confusione

Ciao

Gianfranco
Supervisore del sito
Supervisore del sito
Messaggi: 1708
Iscritto il: ven mag 20, 2005 9:51 pm
Località: Sestri Levante
Contatta:

Re: I 5 punti

Messaggio da Gianfranco »

Ciao David,

nessuna confusione.

Invio un'altra soluzione trovata dalla MD.
Qualcuno conosce la soluzione ottima?

Gianfranco
Allegati
quadrato2.png
quadrato2.png (5.27 KiB) Visto 8236 volte
Pace e bene a tutti.
Gianfranco

Pasquale
Livello 12
Livello 12
Messaggi: 2853
Iscritto il: mer mag 25, 2005 2:14 am

Re: I 5 punti

Messaggio da Pasquale »

Grande Gianfranco, mi hai fornito anche l'occasione di correggere l'inutilità ABS che avevo inserito nelle mie righe di programma.
Mi sarà utile studiare a fondo il tuo elaborato......in fondo, anche nell'informatica c'è matematica.
_________________

$\text { }$ciao Immagine ciao
E' la somma che fa il totale (Totò)

David
Livello 4
Livello 4
Messaggi: 189
Iscritto il: mar ago 04, 2009 11:49 am

Re: I 5 punti

Messaggio da David »

ten lovers in one.jpg
ten lovers in one.jpg (69.77 KiB) Visto 8208 volte
Ehm,sempre che sappiate destreggiarvi fra i miei appunti sempre permeati da un alone di fatale caos, i calcoli indicano che 10 lattine col raggio di 1 cm sono impacchettabili in una scatola con la base quadrata di lato 6.74757 cm

A voi

delfo52
Livello 9
Livello 9
Messaggi: 1556
Iscritto il: mer mag 25, 2005 4:19 pm
Località: bologna

Re: I 5 punti

Messaggio da delfo52 »

ho cercato in questi giorni nei miei libri, dove ricordo di aver visto trattato questo problema.
La cosa interessante è che la configurazione minima, consente, almeno ad una lattina, un po' di "gioco". Una cosa davvero contro-intuitiva!
Enrico

panurgo
Livello 9
Livello 9
Messaggi: 1521
Iscritto il: sab nov 19, 2005 3:45 pm
Località: Padova

Re: I 5 punti

Messaggio da panurgo »

Ho provato a giocare un po' con le lattine e ho trovato questa disposizione

Immagine

A differenze di quanto riportato nella figura di David, tutte le circonferenze poggiano in basso (in particolare quelle tratteggiate). Ho costruito la figura in modo da poterla modificare aggiustando il valore dell'angolo del rombo evidenziato in basso a destra, fino ad ottenere che i lati del contenitore siano approssimativamente uguali; i segmenti rossi sono tutti lunghi $2$
il panurgo

Principio di Relatività: $\mathbb{m} \not \to \mathbb{M} \, \Longleftrightarrow \, \mathbb{M} \not \to \mathbb{m}$
"Se la montagna non va a Maometto, Maometto NON va alla montagna"

Pasquale
Livello 12
Livello 12
Messaggi: 2853
Iscritto il: mer mag 25, 2005 2:14 am

Re: I 5 punti

Messaggio da Pasquale »

David, un po' complicata l'interpretazione ed allora segue il mio disegno (simile al tuo).

La figura è simmetrica rispetto alla diagonale AF.
Il disegno non è preciso, ma immaginiamolo tale.

Immagine


$AC = 2(sqrt{2}-1)+6 = 2sqrt{2}+4$
$AB = 2sqrt{2}+2$
$BE=2$
$AE = AB + BE = 2sqrt{2}+4 = 6,8284$

In tale quadrato entrano certamente i 10 cerchi, ma se facciamo convergere fra loro i cerchi 6/7 e 9/10, i lati EF ed FG non sono più tangenti e si guadagna una quantità x da sottrarre a 6,8284 (il cerchio 8 ha spazio in abbondanza a sua disposizione).
Purtroppo i pentagoni in figura non sono regolari e non ancora ho meditato a sufficienza per dare un valore a x.
Dunque, per il momento: 6,8284 - x
_________________

$\text { }$ciao Immagine ciao
E' la somma che fa il totale (Totò)

Gianfranco
Supervisore del sito
Supervisore del sito
Messaggi: 1708
Iscritto il: ven mag 20, 2005 9:51 pm
Località: Sestri Levante
Contatta:

Re: I 5 punti

Messaggio da Gianfranco »

David, grazie per gli appunti sudati e scritti a mano. Fa sempre piacere vedere un'idea matematica passata dal cervello a un foglio di carta con la sola mediazione di una penna. Con tutti questi computer, a volte dimentichiamo che carta e penna sono gli strumenti base con cui si fa matematica.

Panurgo, anch'io, facendo delle prove empiriche, ho pensato che con una scatola "quasi" quadrata si possa fare in modo che nessuna lattina abbia del "gioco", come dice Delfo52. Credo però che il risultato di David sia valido se si cerca la più piccola base che sia un quadrato.

Pasquale, (mentre scrivo ho visto arrivare la tua figura, anche questa con carta e penna) se ti interessa allego il programma che ho scritto per impaccare dei cerchi in un quasi quadrato minimo. Ho semplicemente modificato la Macchina di Darwin trasformandola in una Macchina di Brown (in onore di Robert Brown. Ho tenuto anche conto delle idee di Panurgo sui fratellini. Il concetto è questo: metto dei cerchi a caso in un quadrato, poi faccio fare a ciascun cerchio una specie di moto browniano. Ad ogni passo, se il moto dei cerchi li porta in un quadrato più piccolo di quello precedente allora li imprigiono nel nuovo quadrato, e così via. Per non impiccare il programma, devo accettare situazioni in cui il quadrato non è "perfetto". Perciò definisco "quadrato" un rettangolo in cui il rapporto di due lati consecutivi è $1 \pm d$ dove $d$ è un numero piccolo a piacere.

Il miglior risultato che ho ottenuto è allegato.
Sembra che i cerchi escano un po' dal quadrato, ma ciò è dovuto all'approssimazione grafica.

Codice: Seleziona tutto

!'------------------------------------
!'Impaccare n cerchi in un quadrato minimo
!'Soluzione con una Macchina di Brown 
!'------------------------------------

!'Matrice coordinate dei centri dei cerchi
DIM p(12,2)

!'Matrice intorni di ogni centro
!'Il valore è l'inizio dell'intorno di ogni punto
DIM basix(12)
DIM basiy(12)

!'Numero di cerchi
LET npunti=10

!'Lati del rettangolo/quadrato in cui stanno i cerchi
LET b=10
LET h=10

!'Centro del rettangolo/quadrato
LET cx=b/2
LET cy=h/2

!'Raggio dei cerchi
LET r=1

!'Intorni iniziali dei centri
!'orizzontali e verticali
LET intornox=b
LET intornoy=h

FOR i=1 TO npunti
   LET basix(i)=cx-intornox/2
   LET basiy(i)=cy-intornoy/2
NEXT i


!'Contatore generale delle prove,
!'contantore dei miglioramenti
LET contgen=0
LET migl=0
LET stasi=0


LET t0=TIME

!'------------------------------------
!'INIZIO PROGRAMMA
!'------------------------------------

!'Semiperimetro minimo via via raggiunto 
LET semipmin=1000

RANDOMIZE

!'Inizio del ciclo
10 DO
    
   !'Estrae coordinate del primo centro    
      LET px=basix(1)+intornox*RND
      IF px<r THEN LET px=r
      IF px>b-r THEN LET px=b-r
      LET p(1,1)=px
       
      LET py=basiy(1)+intornoy*RND
      IF py<r THEN LET py=r
      IF py>h-r THEN LET py=h-r
      LET p(1,2)=py     
       
      !'Estrae coordinate dei centri successivi
      !'e valuta le distanze di ciascun nuovo centro da quelli precedenti       
      FOR i = 2 TO npunti
         LET px=basix(i)+intornox*RND
         IF px<r THEN LET px=r
         IF px>b-r THEN LET px=b-r
         LET p(i,1)=px
          
         LET py=basiy(i)+intornoy*RND 
         IF py<r THEN LET py=r
         IF py>h-r THEN LET py=h-r
         LET p(i,2)=py  
          
         !'Distanze
         FOR k=1 TO i-1
            LET d=SQR((p(k,1)-p(i,1))^2+(p(k,2)-p(i,2))^2)
            !'Se la distanza è minore del diametro, esce            
            IF d<2*r THEN GOTO 50         
         NEXT k
      NEXT i
       
      !'------------------------------------       
      !'Calcola alcuni parametri che gli servono per centrare l'insieme dei cerchi
      !'Trova minx e maxx e miny e maxy
      LET minx=b
      LET maxx=0
      LET miny=h
      LET maxy=0
       
      FOR i=1 TO npunti
         IF p(i,1)<=minx THEN LET minx=p(i,1)
         IF p(i,1)>=maxx THEN LET maxx=p(i,1)
         IF p(i,2)<=miny THEN LET miny=p(i,2)
         IF p(i,2)>=maxy THEN LET maxy=p(i,2)
      NEXT i
       
      LET latox=maxx-minx
      LET latoy=maxy-miny   
      LET xmed=latox/2+minx
      LET ymed=latoy/2+miny
       
      !'Vettore di traslazione 
      LET trasx=cx-xmed 
      LET trasy=cy-ymed 
       
      LET rappxy=latox/latoy
      LET semip=latox+latoy
      !'dr è un rapporto che più piccolo è,
      !'più il rettangolo in cui sono i cerchi
      !'tende a essere un quadrato
      LET dr=ABS(1-rappxy)
       
      !'------------------------------------
      !'Condizioni determinanti per stabilire
      !'se c'è stato un miglioramento della struttura
      !'IF semipmin<=9.6 THEN stop
      IF semip<=semipmin AND dr<=0.05 THEN     
         LET migl=migl+1
         LET semipmin=semip        
         LET intornox=b/(migl)
         LET intornoy=h/(migl)
          
          
         !'Sposta tutti i punti verso il centro
         FOR i=1 TO npunti
            LET p(i,1)=p(i,1)+trasx
            LET p(i,2)=p(i,2)+trasy
         NEXT i
         FOR i=1 TO npunti
            LET basix(i)=p(i,1)-intornox/2
            LET basiy(i)=p(i,2)-intornoy/2
         NEXT i        
          
         !'------------------------------------       
         !'Stampa situazione migliorata
         CALL rapporto (npunti,p,maxgen)   
          
         !'------------------------------------       
         !'Visualizza grafica  
         CALL grafica(maxgen,npunti,p,basix,basiy,intornox, intornoy, b, h)
      END IF 
       
50    LET contgen=contgen+1 
       
       
   LOOP
    
    
   !'------------------------------------
   !'FINE PROGRAMMA
   !'------------------------------------
    
    
   !'------------------------------------
   !'I N I Z I O   S U B R O U T I N E S
   !'------------------------------------
    
   !'------------------------------------
   !'Visualizza grafica, ogni punto e ogni intorno      
   SUB grafica(maxgen, npunti, p(,), basix(), basiy(), intornox, intornoy, b, h)
      SET WINDOW -1,b+3,-1,b+3
       
      CLEAR 
      DRAW GRID
      SET AREA COLOR 38                          
      PLOT AREA:  0,0;0,h;b,h;b,0 
      SET LINE COLOR 1         
      PLOT LINES: 0,0;0,h;b,h;b,0;0,0
      SET LINE COLOR 1         
      PLOT LINES: minx-r,miny-r;maxx+r,miny-r;maxx+r,maxy+r;minx-r,maxy+r;minx-r,miny-r
       
      FOR n=1 TO npunti
         LET x=p(n,1)
         LET y=p(n,2)
         LET xi=basix(n)
         LET xf= xi+intornox
         LET yi=basiy(n)
         LET yf=yi+intornoy
          
         LET lt=b/100
         SET LINE COLOR 41         
         PLOT LINES: xi, y; xf,y
         PLOT LINES: x, yi; x,yf
          
         OPTION ANGLE DEGREES
         SET LINE COLOR 4
         FOR t=0 TO 360 
            PLOT LINES : x+r*COS(t),y+r*SIN(t);
         NEXT t
          
         SET TEXT COLOR 1
         !'PLOT TEXT,AT x+lt,y+lt:CHR$(64+n)
         LET lx$=STR$(INT((latox+2*r)*100)/100)
         LET ly$=STR$(INT((latoy+2*r)*100)/100)
         PLOT TEXT, AT 0,h+1:"Lati: "&lx$&" x "&ly$ 
      NEXT n
       
   END SUB
    
   !'------------------------------------
   !'Stampa il minimo e le coordinate dei punti
   SUB rapporto (npunti,p(,),maxgen)  
      PRINT semipmin
   END SUB   
    
100 END
  
  

Allegati
quadrato3.png
quadrato3.png (5.24 KiB) Visto 8151 volte
Pace e bene a tutti.
Gianfranco

Pasquale
Livello 12
Livello 12
Messaggi: 2853
Iscritto il: mer mag 25, 2005 2:14 am

Re: I 5 punti

Messaggio da Pasquale »

Grazie Gianfranco per il regalino. Per me è sempre interessante vedere le soluzioni adottate ed il loro sviluppo (è un esercizio e un divertimento).
_________________

$\text { }$ciao Immagine ciao
E' la somma che fa il totale (Totò)

Pasquale
Livello 12
Livello 12
Messaggi: 2853
Iscritto il: mer mag 25, 2005 2:14 am

Re: I 5 punti

Messaggio da Pasquale »

Sciogliendo la riserva sul calcolo incompleto e facendo riferimento al disegno precedente, ho accertato che, quando la congiungente i centri dei cerchi 4 e 6 è angolata di circa 12° rispetto all'asse orizzontale (0,2086 radianti), si ottiene un lato minimo (con quella configurazione) di 6,7850...
Considerate le simmetrie della figura, è stato sufficiente posizionare solo il cerchio 6.

Considerando AE e AG come assi cartesiani, le coordinate del centro del cerchio 6 sono 5.7850..., 1.41420....(verosimilmente $sqrt{2}$)


Segue il programma di calcolo:


DIM p(10,2)
LET p(3,1)=1
LET p(3,2)=1
LET p(1,1)=SQR(2)+1
LET p(1,2)=SQR(2)+1
LET p(5,1)=2*SQR(2)+1
LET p(5,2)=2*SQR(2)+1
LET p(4,1)=2*SQR(2)+1
LET p(4,2)=1
LET p(2,1)=1
LET p(2,2)=2*SQR(2)+1

LET mi=p(4,1)+3
LET i=PI/1000000
LET a=0
DO
LET a=a+i
LET x=p(4,1)+2*COS(a)
LET y=p(4,2)+2*SIN(a)
LET w=y+1
LET z=ABS(w-p(1,2))
LET l=x+1
IF l<mi THEN
LET mi=l
LET x2=x
LET y2=y
END if
LOOP UNTIL z<=0.00001
PRINT mi;a;x2;y2

END

In sostanza, ho fatto rotolare il cerchio 6 sul 4, fino a renderlo tangente alla parallela all'asse delle ascisse passante per il centro del cerchio 1, rispetto alla quale si posiziona simmetricamente il cerchio 7.
_________________

$\text { }$ciao Immagine ciao
E' la somma che fa il totale (Totò)

David
Livello 4
Livello 4
Messaggi: 189
Iscritto il: mar ago 04, 2009 11:49 am

Re: I 5 punti

Messaggio da David »

Davvero un plauso sincero ad ognuno per i notevoli contributi sia matematici sia informatici espressi in queste pagine relativamente a questo interessante problema;sembra (per ora) che una configurazione asimmetrica, intrisa da una punta di caos, risulti la più efficiente per contenere le 10 lattine nella base quadrata più piccola.
Questo potrebbe lasciare un pò frastornati, visto che non sembra esserci un sentiero di logica ferrea che possa portare a scovare tale disposizione,ma forse ciò è pure dovuto al fatto che vediamo nelle forme simmetriche non solo come quelle esteticamente migliori ma anche come quelle che "dovrebbero" essere più redditizie sempre e comunque,scordandoci che talvolta nel mondo dei numeri il diavolo si diverte a mescolare un pò le carte.

Prometto che la prossima volta se dovessi ancora postare appunti di mia mano,di essere un attimo meno confusionario
(ha ha, ho già perso quel foglio colla soluzione,per fortuna che l'ho messo qui nel sito)

Bye David

Rispondi