Close
Duke shfaqur rezultatin -9 deri 0 prej 10
  1. #1
    i/e regjistruar Maska e javac
    Anëtarësuar
    30-10-2005
    Vendndodhja
    GJILAN
    Postime
    35

    Smile Java - Vizatimi i grafikëve rrethorë

    Detyra kerkon nje Pie qe shfrytezuesi ta ndaj ne pjese sa te doje. E kam perfundu po s'po mund ta eliminoj nje 'jo saktesi' matematike. E di sakte ku osht po spo kam ide qysh me rregullu. Ndonji ide apo dicka qe nuk po di qe kish me rregullu ket Pie qe po du me nda SAKT...

    algoritmi duket:

    int ndarja = // Shfrytezuesi ka mundsi me nda nga 1 - 360 pjese
    float shkallet = (float) 360 / ndarja;
    for (int i = 0; i < ndarja; i++)
    { float kendi_fillues_i_ardhshem = (float)i * shkallet;
    g.fillArc(100, 100, 450, 450, (int)kendi_fillues_i_ardhshem, (int)shkallet);
    }

    ...

    Problemi eshte se kur p.sh. ndarja jepet numer qe nuk perpjestohet me 360 shkallet rezultojne numer me shume shifra pas presjes dhjetore dhe kjo e humb saktesine e algoritmit tim. Kjo ndodh sepse kur cilkli ec para, kendi_fillues_i_ardhshem varet natyrisht nga shkallet qe nuk kane ndonje vlere te sakte(!!!)

  2. #2
    Shpirt Shqiptari Maska e Albo
    Anëtarësuar
    16-04-2002
    Vendndodhja
    Philadelphia
    Postime
    33,153
    Postimet në Bllog
    22
    Duhet qe ta ndryshosh programin qe te marri ne konsiderate dy rrjedha llogjike:

    1. Kur ke te besh me nje numer te plote ndarjesh (360%ndarje=0) atehere mund te perdoresh ate for loop qe ke me lart.

    2. Kur ke te besh me nje numer tek ndarjesh (360%ndarje>0) atehere duhet qe te ndryshosh menyren se si i perllogarit shkallet, jo 360/ndarje por (360 - mbetjen)/ndarje.

    Per shembull: per 17 ndarje, 360 % 17 = 21 dhe mbetja eshte 3. Ne kete rast te duhet ta ndryshosh formulen nga 360 / ndarje ne 360-3 / ndarje ne kete menyre ndarja do te jete me e plote.

    Megjithese edhe kjo menyre nuk eshte ekzaktesisht e sakte, eshte me e njetratshme ne ndarje.

    Albo

    P.S Per te gjetur mbetjen ne Java perdor % modulus.

  3. #3
    i/e regjistruar Maska e javac
    Anëtarësuar
    30-10-2005
    Vendndodhja
    GJILAN
    Postime
    35

    mbetja?

    @Albo, por mbetja po mblidhet dhe po mebetet per ne fund, nje tjeter pjese e 'mbetjes' se pjeseve tjera.

  4. #4
    i/e regjistruar Maska e javac
    Anëtarësuar
    30-10-2005
    Vendndodhja
    GJILAN
    Postime
    35
    Ja si po duket my Pie me permiresimin tend @Albo.
    Ne pjesen e pare Pie eshte ndare ne 20 pjese qe perpjestohet me 360. Ndersa, ne pjesen e dyte ndarja eshte 26 qe nuk perpjestohet me 360.
    Fotografitë e Bashkëngjitura Fotografitë e Bashkëngjitura   
    Ndryshuar për herë të fundit nga Albo : 30-08-2006 më 00:50

  5. #5
    Shpirt Shqiptari Maska e Albo
    Anëtarësuar
    16-04-2002
    Vendndodhja
    Philadelphia
    Postime
    33,153
    Postimet në Bllog
    22
    Hidhe kodin qe ben veprimet ne forum pasi nuk e kam te qarte se si e ke shtruar.

    Albo

  6. #6
    i/e regjistruar Maska e javac
    Anëtarësuar
    30-10-2005
    Vendndodhja
    GJILAN
    Postime
    35
    Ja e tere klasa.
    Nuk po di cka te bej me mbetjen.
    Veshtire te ndahet pa perdorur float. Por si te vizatoj float kur penda vizaton ne pixela te plote. Kam pare se ka dicka nga Graphics2D paketat mirepo nuk du ti perdor ato!

    Kodi PHP:
    /*
     * @(#)Pie.java 1.0  23/08/06
     * Pie vizaton një "tortë" të cilën e preni ju duke caktuar numrin e copëve
     * Autor: Isa Bllaca, gjimnazi "Zenel-Hajdini", Gjilan.
     */
    import java.awt.*;
    import java.awt.event.*;

    public class 
    Pie extends Frame implements ActionListener{
        public  
    int ndarja// numri i ndarjeve
        
    private int ngjyre_ndrruesi// selektuesi i ngjyrave ne vargun ngjyrat
        
    private int ndrruesi// ndrruesi i vleres se ngjyre_ndrruesi
        
    private TextField txt// per vleren e ndarjes.
        
    private Button butoni// butoni
        
    public Color[] ngjyrat = {Color.blueColor.greenColor.pinkColor.cyan
                                  
    Color.redColor.yellowColor.magentaColor.lightGray}; // 8 ngjyrat me te cilat do te ngjyrosen pjeset e Pie-s
        
    private int x1// x1 e Pie
        
    private int y1// y1 e Pie
        
    private int x2// x2 e Pie
        
    private int y2// y2 e Pie
        
        /** konstruktori */
        
    public Pie() {
           
    ndarja 1// inicimi i variablave...
            
    ngjyre_ndrruesi 0;
            
    ndrruesi 1;
           
    x1 100;
            
    y1 100;
            
    x2 450;
            
    y2 450;
            
    txt = new TextField();
            
    this.setLayout(new FlowLayout());
            
    butoni = new Button("Vizato");
            
    this.add(txt);
            
    this.add(butoni);
            
    butoni.addActionListener(this);
            
    addWindowListener(new WindowAdapter() {  // per nje mbyllje te rregullt te dritares
                
    public void windowClosing(WindowEvent e) {
                    
    dispose();
                    
    System.exit(0);
                }
            });
        }
        
    /** @paint per te vizatuar */
        
    public void paint(Graphics g)
        { 
          for (
    int i 0ndarjai++)
               { 
    int mbetja 360 ndarja// mbetja
                
    int shkallet = (360 mbetja) / ndarja// vlera e shkalleve
                  
    int kendi_fillues_i_ardhshem shkallet// pika ne te cilen do te filloj pjesa e ardhshme
                 
    ngjyre_ndrruesi ngjyre_ndrruesi ndrruesi;  // percaktuesi i ngjyres ne varg
             
    if (ngjyre_ndrruesi >= || ngjyre_ndrruesi <= 0)  // nese percaktuesi i ngj. del jashte numrit te elementeve te vargut
                
    ndrruesi = -ndrruesi; } // ndrro drejtimin
                
    g.setColor(ngjyrat[ngjyre_ndrruesi]); // ngjyra e percaktuar ne varg
                  
    g.fillArc(x1y1x2y2kendi_fillues_i_ardhshemshkallet);  // vizatimi i harkut
             
    }
        }
        
    /** actionPerformed ne rast te klikimit te butonit */
        
    public void actionPerformed(ActionEvent evt)
        {  
    String ndarjett txt.getText();
            
    ndarja = new Integer(ndarjett).intValue();
            
    this.repaint();
        }
        
    /** main per testim */
        
    public static void main(String args[]) {
            
    System.out.println("Ne startim e siper Pie...");
            
    Pie dritarja = new Pie();
            
    dritarja.setSize(700700);
            
    dritarja.setTitle("Pie");
            
    dritarja.setVisible(true);
        }

    Ndryshuar për herë të fundit nga Albo : 30-08-2006 më 00:51

  7. #7
    Shpirt Shqiptari Maska e Albo
    Anëtarësuar
    16-04-2002
    Vendndodhja
    Philadelphia
    Postime
    33,153
    Postimet në Bllog
    22
    Mbetjen mund tua shtosh nga 1 grade cdo ndarjeje. Kjo do te sjelli qe rrethi te ndahet ekzaktesisht ne aq ndarje por disa kende do te jete me te medha me 1 grade, dhe disa do te jene me te vogla me nje grade.

    Shembull: 360 % 17 = 3

    Qe do te thote qe do te kesh 14 ndarje me kend 21 grade dhe 3 ndarje me kend 22 grade. Pra mbetjen e shperndave ne menyre te njetrajtshme tek ndarjet.


    Kodi PHP:
    for (int i 0ndarjai++)

    int mbetja 360 ndarja// mbetja
    int shkallet = (360 mbetja) / ndarja// vlera e shkalleve
    if(i<mbetja)
    int kendi_fillues_i_ardhshem shkallet 1
    else
    int kendi_fillues_i_ardhshem shkallet// pika ne te cilen do te filloj pjesa e ardhshme 
    Ndryshuar për herë të fundit nga Albo : 29-08-2006 më 23:39
    "Babai i shtetit është Ismail "Qemali", e zbuloi Edvin shkencëtari!"

  8. #8
    i/e regjistruar Maska e javac
    Anëtarësuar
    30-10-2005
    Vendndodhja
    GJILAN
    Postime
    35
    Same shit! Spo ndryshon shume plako! Mund ta provosh edhe vet.
    Ja si e shtrova

    Kodi PHP:
          public void paint(Graphics g)
           { 
            for (
    int i 0ndarjai++)
                 { 
    int kendi_fillues_i_ardhshem;
                   
    int mbetja 360 ndarja
                   
    int shkallet = (360 mbetja) / ndarja
              if (
    i<mbetja
                 { 
    kendi_fillues_i_ardhshem shkallet 1; }
            else { 
    kendi_fillues_i_ardhshem shkallet; }
                   
    ngjyre_ndrruesi ngjyre_ndrruesi ndrruesi;  
              if (
    ngjyre_ndrruesi >= || ngjyre_ndrruesi <= 0)  
                 { 
    ndrruesi = -ndrruesi; } // ndrro drejtimin
                   
    g.setColor(ngjyrat[ngjyre_ndrruesi]); // ngjyra e percaktuar ne varg
                   
    g.fillArc(x1y1x2y2kendi_fillues_i_ardhshemshkallet);  // vizatimi i harkut
                 
    }     
           } 
    Ndryshuar për herë të fundit nga javac : 30-08-2006 më 15:33

  9. #9
    i/e regjistruar Maska e javac
    Anëtarësuar
    30-10-2005
    Vendndodhja
    GJILAN
    Postime
    35
    @Albo, u zgjidh. Ishte dashur shkallet + 1, ti e dhe idene tek kendi_fillues_i_ardhshem + 1 dhe une e aplikova symbyllur lol. Sidoqofte shume faleminderit per idene . Nuk po e ndan sakte po me mire se ajo hapsira boshe qe po me acaronte.
    Nese do ta provoje dikush vetem nderrojeni komplet paint() nga klasa me lart me kete.

    Kodi PHP:
           public void paint(Graphics g)
           {   
    int kendi_fillues_i_ardhshem;
               
    int mbetja 360 ndarja// mbetja
               
    int shkallet// vlera e shkalleve
                 
    for (int i 0ndarjai++)
                 {  
                    if (
    ndarja// per ti shtuar + 1 nga mbetja pjeseve(per mbetjen n)
                       
    shkallet = ((360 mbetja) / ndarja) + 1;  } 
                     else { 
    shkallet = (360 mbetja) / ndarja;  }
                             
    kendi_fillues_i_ardhshem shkallet// pika ne te cilen fillon pjesa e ardhshme
                            
    ngjyre_ndrruesi ngjyre_ndrruesi ndrruesi;  // percaktuesi i ngjyres ne varg
                    
    if (ngjyre_ndrruesi >= || ngjyre_ndrruesi <= 0)  // nese percaktuesi i ngj. del jashte numrit te elementeve te vargut
                       
    ndrruesi = -ndrruesi; } // ndrro drejtimin
                         
    g.setColor(ngjyrat[ngjyre_ndrruesi]); // ngjyra e percaktuar ne varg
                         
    g.fillArc(x1y1x2y2kendi_fillues_i_ardhshemshkallet);  // vizatimi i harkut
                 

             } 

  10. #10
    i/e regjistruar
    Anëtarësuar
    01-03-2005
    Postime
    68
    javac normal eshte shum thjesht..
    akcepto vetem numra, me te cilet 360 plotpjestohet..

    agimi

Tema të Ngjashme

  1. Dëmtohet Shpella e Lepenicës, Vlorë
    Nga Shpend Bengu në forumin Arkeologji/antropologji
    Përgjigje: 54
    Postimi i Fundit: 01-08-2010, 21:17
  2. Java - Vizatimi i flamurit olimpik
    Nga nonamegirl në forumin Arti i programimit
    Përgjigje: 1
    Postimi i Fundit: 13-01-2006, 07:44

Regullat e Postimit

  • Ju nuk mund të hapni tema të reja.
  • Ju nuk mund të postoni në tema.
  • Ju nuk mund të bashkëngjitni skedarë.
  • Ju nuk mund të ndryshoni postimet tuaja.
  •