sabato 24 ottobre 2020

 Hilbert (1862-1943) 

Il matematico, studiò una curva tramite un processo iterativo che finisce per riempire l'intero quadrato di lato unitario.
Nel caso dello schermo ovviamente per avere il riempimento, il quadrato esce dai limiti dello stesso.

Curva di Hilbert il mio metodo:
 
//hilbert_monocromatico(2, 8, 1, 100/4, 90, 2,blu_acquamarina);//Hilbert tipico


I miei metodi [1] usano la curva di Hilbert, ma al termine di ogni passo viene disegnata o un'immagine da una mia libreria o una forma geometrica, ovvero ambedue le cose.

Le chiamate ai metodi, sono tutte disattivate da una doppia barra obliqua (slash //) la chiamata, (rappresentata per riconoscerla in blu), senza doppia barra obliqua (slash //) è invece attiva questo mi permette di scegliere cosa far fare al programma.

In fase di lavoro posso modificare i valori dei parametri per la ricerca di diverse configurazioni delle immagini risultanti, per colore, forma, angoli, ecc.

Spesso con un'unica chiamata, sono riuniti più metodi e spesso un metodo può richiamare se stesso.

//-----------curva di hilbert-----------------------------------------------------------------------------------
                
                ///PARAMETRI:
                /// <summary>
                /// 
                /// </summary>
                /// <param name="dimensione"></param>
                /// <param name="livello"></param>
                /// <param name="parità"></param>
                /// <param name="lunghezza"></param>
                /// <param name="angolo"></param>
                /// <param name="tratto"></param>
                /// <param name="colore"></param>
                /// <param name="vero"></param>
                //hilbert(1500, 300, 2, 28, 91,6,true,false);
                //hilbert(200, 200, 1, 620, 77,5,false,true);
                //hilbert(200, 200, 1, 200, 61, 2,true,false);
                //hilbert(200, 200, 4, 40, 80, 9,false,true);
                //hilbert(200, 200, 1, 50, 100,1,true,false);
                //hilbert(200, 200, 1, 300, 115, 10,false,true);             
                //hilbert(1500, 14, 1, 15, 90,24,true,false);
                //hilberth(2, 8, 1, 15, 90, 6, true, false);
                //--------------------------------------------------------------------------------------------------
                //hilbert_riempimenti(100, 100, 1, 190, 90,90,1,true,false,true);
                //hilbert_riempimenti(100, 100, 1, 50, 120, 120, 1, true, false,true);
               
               //hilbert_monocromatico(2, 8, 1, 100/4, 90, 2,blu_acquamarina);//Hilbert tipico

                //hilbert_variazioni(2, 8, 1, 6 , 90, 2, true, 3, 6, 9,true);               
                //hilbert_immagini(2, 8, 1, 70, 90, 2, false,true,1,1,1,43,53);
                //hilbert_immagini(2, 8, 1, 70, 94, 2, false, true, 1, 1, 1, 20, 30);
                //hilbert_immagini(2, 8, 1, 70, 90, 2, false, true, 1, 1, 1, 30, 31);
                //hilbert_alfabeti(1112, 8, 1,30, 90, 2, false, true, 1, 1, 1, 1, 28);
                //hilbert_alfabeti(1112, 30, 1, 25, 90, 2, true, false, 1, 1, 1, 1, 28);
                //****************************************************************
                  hilbert_tasselli(1112 * 6, 40 * 20, 1, 20, 90, 22, true, true, 1, 1, 1, 7, 7);
                //hilbert_tasselli(1112 * 6, 40 * 20, 1, 20, 90, 22, true, true, 1, 1, 1, 6, 6);
                //hilbert_tasselli(1112 * 6, 40 * 20, 1, 20, 90, 22, true, true, 1, 1, 1, 5, 5);
                //hilbert_tasselli(1112 * 6, 40 * 20, 1, 20, 90, 22, true, true, 1, 1, 1, 4, 4);
                //hilbert_tasselli(1112 * 6, 40 * 20, 1, 20, 90, 22, true, true, 1, 1, 1, 3, 3);
                //hilbert_tasselli(1112 * 6, 40 * 20, 1, 20, 90, 22, true, true, 1, 1, 1, 2, 2);
                //hilbert_tasselli(1112 * 6, 40 * 20, 1, 20, 90, 22, true, true, 1, 1, 1, 1, 3);
                //hilbert_tasselli(1112 * 6, 40 * 20, 1, 20, 90, 22, true, true, 1, 1, 1, 1, 5);
                //hilbert_tasselli(1112 * 6, 40 * 20, 1, 20, 90, 22, true, true, 1, 1, 1, 1, 10);
                //hilbert_tasselli(1112 * 6, 40 * 20, 1, 20, 90, 22, true, true, 1, 1, 1, 30, 33);
                //hilbert_tasselli(1112 * 6, 40 * 20, 1, 20, 90, 22, true, false, 1, 1, 1, 35, 45);
                //hilbert_tasselli(1112 * 6, 40 * 20, 1, 20, 90, 22, true, true, 1, 1, 1, 20, 30);
                //hilbert_tasselli(1112 * 6, 40 * 20, 1, 20, 90, 22, true, true, 1, 1, 1, 25, 25);
                //hilbert_tasselli(1112 * 6, 40 * 20, 1, 20, 90, 22, true, true, 1, 1, 1, 22, 22);
                //hilbert_tasselli(1112 * 6, 40 * 20, 1, 20, 90, 22, true, true, 1, 1, 1, 35, 35);
                
                /// <summary>
                /// 
                /// </summary>
                /// <param name="dimensione"></param>//numero iterazioni
                /// <param name="livello"></param>//livelli di complessità
                /// <param name="parità"></param>parità * angolo
                /// <param name="lunghezza"></param>lunghezza lato
                /// <param name="angolo"></param>angolo
                /// <param name="tratto"></param>spessore tratto
                /// <param name="colore"></param>colore della penna

n.b. - colore solido se = true 
         radiale se = false

                /// <param name="invisibile"></param> rende invisibile la penna 

n.b. - penna invisibile se=true

                /// <param name="aaa"></param>lunghezza/aaa
                /// <param name="bbb"></param>lunghezza/bbb
                /// <param name="ccc"></param>lunghezza/ccc
                /// <param name="inizio"></param>inizio immagine
                /// <param name="fine"></param>fine immagine
                 //****************************************************************

//---usa piccoli cerchi o quadrati o rettangoli---------------------------------------------------------------

//hilbert_cerchietti(1112 * 6, 40 * 20, 1, 20, 90, 2, true, true, 1, 1, 1, 35, 41, 40, 40, 90, 90);                
//hilbert_cerchietti(1112 * 6, 40 * 20, 1, 100, 120, 2, true, false, 1, 1, 1, 35, 35, 120, 120, 90, 90);
//hilbert_cerchietti(1112 * 6, 40 * 20, 1, 1, 144, 2, true, false, 1, 1, 1, 35, 35, 120, 120, 14, 14);                      //***************************************************************

[1] Con il termine "metodo"si intende un blocco di codice che contiene una serie di istruzioni.
[2] nel programma "Hilbert" è minuscolo, perché non uso in genere maiuscole nel nome del metodo



hilbert_tasselli(1112 * 6, 40 * 20, 1, 20, 90, 22, true, true, 1, 1, 1, 7, 7);il metodo richiama le immagini con il metodo 
public void random_pic2(int inizio, int fine) passando gli ultimi due parametri interi: 
(inizio, fine) che richiamano le immagini dalla libreria, una sola se uguali, da numero a numero se diversi






















 

 Per queste immagini ho programmato in linguaggio C# / WPF che implementa e usa il logo.

Ho realizzato vari metodi, basati sulla Spirale di Archimede, è possibile assegnare come input parametri diversi: colore, filling ( valore boleano true or false), numero di cicli, angolo usato, punto iniziale sullo schermo ( "Panel" in WPF) centrale o random. 
possibili parametri:
        
/// <summary>
        /// 
        /// </summary>
        /// <param name="ripeti"></param>
        /// <param name="tratto"></param>
        /// <param name="scala"></param>
        /// <param name="modalità"></param>
        /// <param name="numpic"></param>
        /// <param name="numpic2"></param>
        /// <param name="numpic3"></param>
        /// <param name="value_color"></param>










Lo stesso metodo con uso di geometrie vedi esempi.

esempi usando la classe: class System.Windows.Media.Geometry

Derivato

System.Windows.Media.CombinedGeometry

System.Windows.Media.EllipseGeometry

System.Windows.Media.GeometryGroup

System.Windows.Media.LineGeometry

System.Windows.Media.PathGeometry

System.Windows.Media.RectangleGeometry

System.Windows.Media.StreamGeometry

 

          Geometry ellisse = new EllipseGeometry(new Rect(0, 0, 50, 50));            Cerchio

          Geometry ellisse = new EllipseGeometry(new Rect(0, 0, 10, 50));            Ellisse

 

Geometry rectangle= new RettangleGeometry(new Rect(0, 0, 50, 50));    Quadrato

          Geometry rectangle= new RettangleGeometry(new Rect(0, 0, 10, 50));    Rettangolo














 



                /// <summary>//METODO riempimenti                ///.................................................................................................................................................................. 
                /// </summary>
                /// <param name="ciclox"></param>ciclo della x
                /// <param name="cicloy"></param>ciclo della y
                /// <param name="inizio"></param>serve per le immagini
                /// <param name="fine"></param>serve per le immagini
                /// <param name="value_fondo"></param>parametri per il colore del fondo: 1 chiaro,2 random,3 bianco,4 nero,5 a scelta
                /// <param name="colore"></param>se value_fondo è 5 allora indicare il nome del colore
                /// <param name="value_color_pen"></param>//colore per il tracciamento:1 mySolidColorBrush,2 myradial,3 myradial2,4 sortcolor_solid_pen,5 sortcolor_radial_pen,6 bianco,7 nero
                /// <param name="value_filling"></param>"1" filling "2" no filling
                /// 
                /// <param name="forma_geom"></param>1,2,3,4,5,6
                /// <param name="angolo"></param>valore dell'angolo per forma_geom = "4"
                /// <param name="tratto"></param>larghezza del tratto
                /// <param name="step"></param>intervallo tra le righe
                /// <param name="lunghezza"></param>
                
                //riempimenti(1110, 1980, 27, 27,  4,null,5,1,  5, 90, 1,  80,  150,100,14,12);
                //riempimenti(1110, 1980, 27, 27, 5, null, 3, 1, 6, 45, 1, 80, 150, 100, 16, 1);
                //riempimenti(1110 * 2, 1980, 27, 27, 4, null, 6, 1, 3, 90, 1, 40, 150,100, 6, 1);
                //riempimenti(1110*2, 1980, 27, 27,2,null,5,1,3,90,10,  40,  150,100,6,1);
                //riempimenti(1110, 1980, 27, 27, 2, null, 5, 1, 4, 90,10,  140,  150,100,6,1);
                //riempimenti(1110, 1980, 27, 27, 2, null, 5, 1, 4, 120, 10, 140, 150,100,6,1);
                //riempimenti(1110, 1980, 27, 27, 2, null, 5, 1, 5, 60, 2, 60, 50*2,100,6,1);
                //riempimenti(1110, 1980, 34, 35, 2, null, 5, 1,4, 90, 2, 60, 50*2,100,6,1);                //....................................................................................................................................................................
                //riempimenti_random(1110, 1980+100, 7, 17);
//....................................................................................................................................................................
                //riempi_con_figure(1, 1922, 19, 8);//non riempie quadretta
//....................................................................................................................................................................
                //riempi(15000, 7, 60, 1, false, 4);
                //carlo.WarpTo(xrisoluzione / 2, (yrisoluzione / 2)); riempi(15000, 8, 36, 1,true,3);
                //parametro vaue_color_pen da 1 a 7
                //carlo.WarpTo(xrisoluzione / 2, (yrisoluzione / 2)); riempi(15000, 7, 37, 1,true,3);
                //carlo.WarpTo(xrisoluzione / 2, (yrisoluzione / 2) - 100); riempi(15000, 7, 60, 1,true,4);
                //carlo.WarpTo(xrisoluzione / 2, (yrisoluzione / 2)-400);riempi(15000, 8, 61, 1,true,5);
                //carlo.WarpTo(xrisoluzione / 2, (yrisoluzione / 2) - 300); riempi(15000, 7, 66, 1,true,6);
                //carlo.WarpTo(xrisoluzione / 2, (yrisoluzione / 2) - 100); riempi(15000, 5, 66, 1,true,7);
                //carlo.WarpTo(xrisoluzione / 2, (yrisoluzione / 2) ); riempi(15000, 7, 70, 1,true,3);
                //carlo.WarpTo(xrisoluzione / 2, (yrisoluzione / 2)); riempi(15000, 7, 73, 1,true,4);
                //carlo.WarpTo(xrisoluzione / 2, (yrisoluzione / 2) + 100); riempi(15000, 8, 90, 1,true,5);
                //carlo.WarpTo(xrisoluzione / 2, (yrisoluzione / 2)+100); riempi(15000, 7, 95, 1,true,6);
                //carlo.WarpTo(xrisoluzione / 2, (yrisoluzione / 2) + 100); riempi(15000, 7, 45, 1,true,7);
                //carlo.WarpTo(xrisoluzione / 2, (yrisoluzione / 2) + 100); riempi(15000, 7, 120, 1,true,4);
                //carlo.WarpTo(xrisoluzione / 2, (yrisoluzione / 2) + 100); riempi(15000, 7, 144, 1,true,5);
                //carlo.WarpTo(xrisoluzione / 2, (yrisoluzione / 2) + 100); riempi(15000, 7, 120, 1,true,6);
                //carlo.WarpTo(xrisoluzione / 2, (yrisoluzione / 2) + 100); riempi(15000, 5, 128.5, 11,false,7);
                //**********************************************************************************






        /// <summary>
        ///   metodo scansione2
        /// </summary>
        /// <param name="step"></param>//intervallo
        /// <param name="riempi"></param>//filling o no filling
        /// <param name="value_color_pen"></param>//da 1 a 7 colori vari
        
                 //scansione2(144 / 2, true,4);
                 //scansione2(144 / 2, false,6);

       
 /// <summary>
        ///    metodo scansione3
        /// </summary>
        /// <param name="step"></param>
        /// <param name="riempi"></param>
        /// <param name="value_color_pen"></param>
        /// <param name="dimensione"></param>
        /// <param name="scala"></param>
        /// <param name="angolo"></param>

                //scansione3(60, true, 3,120,120/2,120);
                //scansione3(80, true, 4, 120, 120 / 2, 120);
                //scansione3(80, true, 4, 120, 95 / 2, 90);
                //scansione3(80, true, 4, 120, 90 / 2, 60);