Go Down

Topic: Pi greco (Read 1 time) previous topic - next topic

Standardoil

mi sa che ci sono bizzarre idee, sulla geometria la matematica e gli infiniti
una retta è un insieme di punti, insieme di cardinalità infinita (cardinalità=banalente il numero)
un piano, essendo ottenuto per scorrimento di una retta è a sua volta un insieme di cardinalità infinita, e sorprendentemente, uguale alla cardinalità della retta, della semiretta e del segmento, che sono tutti insiemo di punti con la stessa cardinalità
diversamente da quanto affermato è possibile identificare un punto singolo, ovvero un insieme di punti di cardinalità uno, banalmente è il luogo dei punti comuni tra due rette non parallele (il punto dove si incontrano, per intenderci)
è pure possibile identificare un insieme di punti con coardinalità zero: il luogo dei punti comuni a due rette parallele: NON esistono punti che soddisfano la condizione
è pure possibile identificare due insiemi di punti di cardinalità infinita NON coincidenti e non sovrapponentisi
ovvero due differenti insiemi di punti infiniti ma differenti, ognuno con ognuono
sono due rette parallele (non il luogo dei punti comuni, ma il luogo dei punti di una E il luogo dei punti dell'altra)
e noterete che stiamo entrando nell'algebra di Boole, da cui deriva il tipo Bool
la matematica è la logica
se non è chiaro........... non è un problema mio
Prima legge di Nelson (che sono io):
A parità di risultato
maggiore è il pensiero,
minore il lavoro.
Quindi prima di fare pensa!

Standardoil

diverso è il caso di un algoritmo, che per definizione deve dare un risultato in un numero "finito" di passi
ecco quindi l'origine della confusione
secondo me lo OP deve cercare, nel luogo dei punti apparteneti alla superfice di un quadrato, quanti appartengono anche ad un settore circolare
il rapporto tra questi due numeri è correlato con PI greco
ma trattandosi di un algoritmo in una macchina reale, con un aritmetica limitata, deve prendere in cosiderazione solo alcuni dei possibili punti, e fare dei calcoli necessariamente approssimati
e con questo chiudo, fino almeno a che lo OP non ci scioglie i dubbi
Prima legge di Nelson (che sono io):
A parità di risultato
maggiore è il pensiero,
minore il lavoro.
Quindi prima di fare pensa!

Puso

Aggiungo la mia ......

sapendo che Riccardo Pisano...ha già definito una una formula matematica (ampiamente utilizzata nell'antichità),   perchè non utilizzare tale formula armonica???

  :o  :o  ::)  :smiley-fat:  :smiley-roll-blue:  :smiley-cry:

paulus1969

Credo nell'interpretazione di standardoil.
Ritengo che si stia cercando di trovare pi bombardando la superficie del quadrato con punti casuali, una specie di Montecarlo, si spara ripetutamente un punto rnd, poi si misura la distanza del punto dall'angolo che funge da centro del cerchio che quindi suggerirei di porre in (0,0). Se la distanza è > r allora è fuori dal cerchio, altrimenti è dentro il cerchio.
Dal rapporto fra quanti sono dentro e tutti si ha il rapporto fra il quarto dell'area del cerchio e l'area del quadrato ( pi *r^2 / 4*r^2)  quindi r ^2 si semplifica e si trova pi = 4 * rapporto.
La parte difficile è generare dei punti realmente casuali che stiano dentro il quadrato.
Visto che il raggio = lato è ininfluente, conviene prendere r = l = 1.
Il tutto quindi si riduce a generare coppie di rnd compresi fra 0 ed 1.
Si potrebbe fare con un filo ed un ingresso analogico.
Oppure con un pulsante ed un contatore in microsecondi, così sarebbe l'operatore a sparare.
Insomma qualcosa che giustifichi l'impiego di un atmega per un uso del genere.

Etemenanki

#19
May 12, 2018, 09:22 am Last Edit: May 12, 2018, 09:24 am by Etemenanki
...
Visto che il raggio = lato è ininfluente...
Ecco ... questa proprio non l'ho capita, scusa ... parlo di logica, non di calcolo ...

Se all'OP viene dato un quadrato con all'interno un settore di cerchio il cui raggio e' identico al lato del quadrato, e gli si dice di trovare "pigreco", allora l'intera cosa non ha senso, perche' "pigreco" e' una costante gia nota, indipendente dalle dimensioni che puo avere il quadrato ... se invece gli si chiede di trovare l'area del settore di cerchio, senza dargli la lunghezza del lato (che e' anche il raggio), di nuovo il problema non ha senso, perche' se vuoi poter controllare come dici che il punto sia maggiore o minore di r, devi gia conoscere r (anche perche' la vedo dura, per il micro, controllare se un numero e' maggiore o minore di "un'altro numero che pero' non conosco" ;)), e se gia conosci r, conosci anche l'area ...

Se non e' cosi, allora proprio non riesco a capire quale sia il problema che hanno dato all'OP ...
"Sopravvivere" e' attualmente l'unico lusso che la maggior parte dei Cittadini italiani,
sia pure a costo di enormi sacrifici, riesce ancora a permettersi.

zoomx

@Standardoil,
quello che scrivi vale in una geometria euclidea, se non sbaglio.

Simone sarà fuggito via!

Standardoil

@Standardoil,
quello che scrivi vale in una geometria euclidea, se non sbaglio.

Simone sarà fuggito via!
si, euclidea,
Ma anche nella geometrie curve si possono trovare punti e segmenti
Sarebbe differente il valore di pi greco. Temo
Prima legge di Nelson (che sono io):
A parità di risultato
maggiore è il pensiero,
minore il lavoro.
Quindi prima di fare pensa!

paulus1969

Ecco ... questa proprio non l'ho capita, scusa ... parlo di logica, non di calcolo ...

Se all'OP viene dato un quadrato con all'interno un settore di cerchio il cui raggio e' identico al lato del quadrato, e gli si dice di trovare "pigreco", allora l'intera cosa non ha senso, perche' "pigreco" e' una costante gia nota,
L'essenza è nel modo con cui ritrovi il valore (già noto) di pigreco.

miky_police

#23
May 12, 2018, 04:22 pm Last Edit: May 12, 2018, 04:52 pm by miky_police
Cerchiamo di rimanere in tema.
Quote
devo trovare un punto con coordinate casuali che stiano all'interno del quadrato.
Cerchiamo di capire numericamente di cosa stiamo parlando pertanto partiamo dal presupposto che il lato del quadrato è uguale a 5.

Quindi avremo che L=5;

Abbiamo già tutti assodato che il raggio del cerchio iscritto al quadrato è uguale appunto ad L.

Quindi r=L ==>quindi==> r=5;

Dalla tua richiesta appena citata significa che tu devi calcolare le coordinate di un qualsiasi punto interno al QUADRATO (quindi se sia anche dentro il quarto di cerchio a te non interessa).

Risposta
calcola due numeri random tra 0 e 5. Saranno le coordinate del tuo punto.

-----------------------Per il calcolo delle coordinate di un punto interne al quarto di cerchio continua a leggere---
Quote
Dal rapporto fra quanti sono dentro e tutti si ha il rapporto fra il quarto dell'area del cerchio e l'area del quadrato ( pi *r^2 / 4*r^2)  quindi r ^2 si semplifica e si trova pi = 4 * rapporto.
Questo è giustissimo, ma restituisce QUANTI e non QUALI punti appartengono al quarto di cerchio.

PREMESSA
Per avere le coordinate di un punto su un piano dobbiamo per forza fissare un'origine di questo piano, ovvero l'intersezione della retta x e y perpendicolari tra di loro che saranno rispettivamente l'asse ascisse e ordinate. Questo è il piano cartesiano, diviso in quattro quadranti, ovvero il primo in alto a destra, secondo a sinistra del primo, il terzo in basso a sinistra ed il quarto sulla sua destra. Di qui viene d'obbligo, anche in base al quesito, disegnare circonferenza goniometrica, ovvero il cerchio che ha il suo centro coincidente con l'origine del piano cartesiano e il suo raggio uguale ad 1.
Il quarto della circonferenza goniometrica riferita al primo quadrante è proprio il nostro quesito e se costruiamo un quadrato con lato =1 nel primo quadrante, con due lati sovrapposti agli assi, otteniamo la figura completa del quesito.

CALCOLO DELLE COORDINATE DEI PUNTI INTERNI AL QUARTO DELLA CIRCONFERENZA GONIOMETRICA.
Si disegna un angolo Beta (ß) che ha il suo vertice coincidente con l'origine del piano ed una delle due semirette che lo compongono sovrapposta all'asse ascisse del piano e l'altra ricadente nel primo quadrante. Le coordinate del punto di intersezione tra la semiretta dell'angolo e la circonferenza goniometrica saranno rispettivamente X=coseno(ß) ed Y = seno(ß);
Di qui si può costruire un parallelepipedo che ha come primo vertice l'origine del piano cartesiano e come vertice opposto il predetto punto di intersezione tra l'angolo ß e la circonferenza goniometrica che per comodità lo chiamiamo C.
TUTTI I PUNTI DI QUESTO PARALLELEPIPEDO SONO PUNTI VALIDI INTERNI AL QUARTO DI CIRCONFERENZA, rimane l'imbarazzo della scelta = random.
Per facilitare il compito diciamo che ß=35° (ma si può scegliere qualsiasi valore tra 0 e 90 quindi il primo calcolo dell'mcu sarà ß = random(0,90) ).
Ne consegue che le coordinate del punto C, ovvero C(x,y,) saranno: C(0.82,0.57) considerati gli arrotondamenti alla seconda cifra decimale.
Dato che abbiamo convenzionato l'esempio con L=r=5 moltiplicheremo questi due valori per 5. Ne viene fuori che C(4.1,2.85).
Quindi qualsiasi x = random(0,4.1) ed y = random(0,2.85) SARANNO COORDINATE SICURAMENTE VALIDE POICHè ALL'INTERNO DEL NOSTRO QUARTO DI CIRCONFERENZA.

In tutto questo il piGreco non centra niente.
Se altri hanno altri metodi di calcolo più semplici avanti pure. Io avrei svolto come appena spiegato.

EDIT: qui non si bombarda niente, si calcola con certezza.
Il vero stupido è colui che fa e rifa la stessa cosa aspettandosi risultati diversi. A.E.

paulus1969

Quindi qualsiasi x = random(0,4.1) ed y = random(0,2.85) SARANNO COORDINATE SICURAMENTE VALIDE POICHè ALL'INTERNO DEL NOSTRO QUARTO DI CIRCONFERENZA.

In tutto questo il piGreco non centra niente.

EDIT: qui non si bombarda niente, si calcola con certezza.
Come hai detto tu stesso,
Quote
In tutto questo il piGreco non centra niente.
Il metodo da te indicato serve a trovare un punto casuale che sia sicuramente all'interno del quarto di cerchio (e contemporaneamente ovviamente anche all'interno del quadrato).

Ma di questi punti casuali che generi all'interno del cerchio poi cosa te ne fai? Come li usi per calcolare il pi?

Con il metodo del "bombardamento", invece, generi punti casuali che siano sicuramente nel quadrato e vedi quanti - rispetto al totale dei punti che hai generato - si trovano (anche) dentro il quarto di cerchio.
Infatti come tu stesso hai notato
Quote
Questo è giustissimo, ma restituisce QUANTI e non QUALI punti appartengono al quarto di cerchio.
A noi interessa sapere quanti sono nel cerchio rispetto a quanti sono sia nel cerchio che nel quadrato (quindi rispetto a tutti i punti che abbiamo generato - sparato).
Generando un grande numero di punti casuali, da questo rapporto deriviamo (come ho spiegato) il valore di pi ed ecco che adesso il discorso ha a che fare con pi.
Spiego meglio la filosofia che sta alla base del metodo, che è un cosiddetto "Montecarlo" basato sul gettare dati casuali su un bersaglio e fare poi una statistica.

Siamo d'accordo sul fatto che dal rapporto fra l'area del quadrato e l'area del cerchio possiamo ricavare pi.
Ovviamente se pi è proprio quello che dobbiamo trovare, non possiamo usarlo per calcolare l'area del cerchio, altrimenti non avremmo altro da fare.
Come facciamo quindi a trovare queste aree? O meglio.... più che le aree, ci interessa il rapporto fra le aree.
Immaginiamo di DIPINGERE con uno strato uniforme di vernice il quadrato e vedere quanti grammi di vernice abbiamo usato (lo pesiamo prima e dopo). Dipingiamo con uguale strato uniforme il quarto di cerchio e facciamo la stessa cosa. Dal rapporto fra i pesi della vernice, possiamo trovare il rapporto fra le aree e quindi pi.
Il metodo dei punti casuali è molto simile, è come spruzzare la vernice a goccioline.

miky_police

Quote
devo trovare un punto con coordinate casuali che stiano all'interno del quadrato
avrò frainteso io la richiesta originale....
Il vero stupido è colui che fa e rifa la stessa cosa aspettandosi risultati diversi. A.E.

paulus1969

Stiamo un po' tutti cercando di interpretare la richiesta originale...  :smiley-mr-green:

docdoc

Stiamo un po' tutti cercando di interpretare la richiesta originale...  :smiley-mr-green:
Sono entrato in questo thread più che altro per curiosità, ed ho visto che siete "partiti per la tangente" (per restare in tema ;) ) con disquisizioni su punti, infiniti, generazione di numeri casuali, eccetera...

Per cui vorrei riepilogare la "richiesta originale". Quello che ha scritto come compito da realizzare è calcolare il pi greco proprio col metodo Montecarlo ossia il rapporto tra le due aree coincide con 1/4 di pi greco quindi generando coordinate casuali (x,y) all'interno di un quadrato che parte dall'origine e di raggio r, il rapporto tra il numero di punti interni al quarto di cerchio e quelli totali moltiplicato per 4 approssima pi greco.

Passando allo sketch dell'OP, intanto non capisco perché per le coordinate generi valori random tra 1 ed 10: oltre a comprendere lo zero, maggiore è la "densità" dei punti migliore sarà l'approssimazione (io farei il lato del quadrato almeno di 100 unità). Poi il generatore casuale va inizializzato mettendo randomSeed(analogRead(0)); nella setup().

Detto questo, che il generatore di numeri casuali sia in realtà pseudocasuale è a mio avviso poco influente, almeno per un numero di generazioni sufficientemente alto (ne farei almeno un migliaio).
Le coordinate x,y da generare sono quindi 0 <= x,y <= r .
Determinare se il punto generato fa parte del quarto di cerchio è semplice basta verificare se x^2+y^2 <= r^2.

Quindi nello sketch basta mantenere due valori interi, uno con il conteggio dei punti generati e l'altro quello dei punti interni al cerchio, e mostrare il risultato di 4*interni/totali che si avvicinerà naturalmente al valore di Pi (a meno della precisione usata per il float) man mano che si effettuano nuove estrazioni.

Una cosa del genere (oh, l'ho scritta al volo, è da provare...;) ):

Code: [Select]
#define RAGGIO 100
unsigned long x = 0;
unsigned long y = 0;
unsigned long r;
unsigned long r2;
unsigned int tot = 0;
unsigned int hit = 0;
float p;

void setup(){
  Serial.begin(9600);
  randomSeed(analogRead(0));
  // Per evitare di calcolare radici quadrate e rendere
  // lo sketch più efficiente, uso il quadrato del raggio
  r2 = RAGGIO * RAGGIO;
}

void loop() {
  x = random(RAGGIO);
  y = random(RAGGIO);
  //Serial.print(x);
  //Serial.print(",");
  //Serial.println(y);
  r = x*x + y*y;
  ++tot;
  if ( r <= r2 )
    ++hit;
  p = 4.0 * hit / tot;
  Serial.println(p);
  delay(100); // 10 campioni al secondo
}





Alex "docdoc" - ** se ti sono stato d'aiuto, un punto karma sarà gradito, clicca su "add" qui a sinistra, vicino al mio nome ;) **

gpb01

... comunque ... l'OP, fatta la domanda ... è sparito (e magari ha già risolto) ormai da 10 giorni ... ::)

Guglielmo
Search is Your friend ... or I am Your enemy !

Etemenanki

Probabilmente l'abbiamo spaventato :D

> docdoc: mi chiedo comunque perche' coordinate "casuali" ... voglio dire, metti di usare il tuo quadrato di lato 100x100 ... che differenza c'e' fra generare 10000 punti in modo casuale per riempire il quadrato, e "popolare" ogni punto generando semplicemente una sequenza progressiva di 10000 punti ? ... tanto, sia con la generazione casuale che con la generazione progressiva, alla fine il rapporto fra il numero di punti interni ed esterni al settore di cerchio sara' lo stesso ...
"Sopravvivere" e' attualmente l'unico lusso che la maggior parte dei Cittadini italiani,
sia pure a costo di enormi sacrifici, riesce ancora a permettersi.

Go Up