Rysowanie pierścienia

2013-07-16 15:09
0

39748259470c0136.jpg

Witam, chodzi mi o to, aby usunąć te przerwy w niektórych miejscach. Macie jakiś sposób na rysowanie pierścieni w Javie, aby wszystko było ładnie wypełnione? Ja robię to tak, że rysuję 40 łuków (akurat w przypadku tego pierścienia) odpowiednio je przesuwając, jednak jak widać, gdzieniegdzie zdarzy się, że jakiś pixel zostanie pominięty. Mam pewien pomysł, ale chciałbym jeszcze przeczytać Wasze propozycje.

dodanie obrazka do posta + dodanie tagu języka - fp

edytowany 3x, ostatnio: furious programming, 2013-07-17 12:42

Pozostało 580 znaków

2013-07-16 18:07

Ja bym wywoływał wielokrotnie fillArc, w każdym wywołaniu rysując wycinek koła. A na końcu raz fillOval rysując w środku jedno mniejsze koło w kolorze tła.


To smutne, że głupcy są tak pewni siebie, a ludzie mądrzy - tak pełni wątpliwości. Bertrand Russell

Pozostało 580 znaków

2013-07-16 19:13
0

Dzięki Bogdans, wydawałoby się to takie oczywiste, ale samemu nie wpadłem na ten pomysł. Wszystko elegancko śmiga, bez żadnych dziur :)

edytowany 1x, ostatnio: Patrulek, 2013-07-16 19:13

Pozostało 580 znaków

2013-07-16 19:25
1

Coś takiego


static BasicStroke wide = new BasicStroke(8.0f);

    public void paint(Graphics g) {
        Graphics2D g2 = (Graphics2D) g;
        int x = 5;
        int y = 7;
        int width = 100;
        int height = 100;

        g2.setStroke(wide);
        g2.draw(new Arc2D.Double(x, y, width, height, 0,
                360, Arc2D.OPEN));
      }

Pozostało 580 znaków

2013-07-17 10:15
0

Z ciekawości porównałem oba sposoby (sectors=60).

            int angle = 360/sectors;
            for(int i=0;i<sectors;i++)
            {
                g.setColor(colors[i]);
                g.fillArc(50,50,300,300,i*angle,angle);
            }
            g.setColor(Color.WHITE);
            g.fillOval(70,70,260,260);
...
            double angle = 360/sectors;
            BasicStroke wide = new BasicStroke(20.0f);
            Graphics2D g2 = (Graphics2D)g;
            g2.setStroke(wide);
            for(int i=0;i<sectors;i++)
            {
                g2.setColor(colors[i]);        
                g2.draw(new Arc2D.Double(50.0,50.0,300.0,300.0,i*angle,angle,Arc2D.OPEN));
            }

Moim zdaniem pierwszy sposób daje trochę ładniejszy rysunek (pierścień po lewej).
http://bogdan.students.wmi.amu.edu.pl/images/rings.png


To smutne, że głupcy są tak pewni siebie, a ludzie mądrzy - tak pełni wątpliwości. Bertrand Russell

Pozostało 580 znaków

2013-07-17 21:09
slogan reklamowy
0

Jeszcze można dodać renderng hints i nie będzie znaczenia. A różnica w pierścieniach to dlatego że lewy jest mniejszy.

Pozostało 580 znaków

Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0