Toon posts:

[JAVA] Draaien van een cirkel

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik ben bezig met het tekenen van een cirkel die moet draaien om zijn verticale as.
Voor het oog moet het net lijken of de cirkel draait, maar in werkelijkheid wordt de cirkel steeds smaller en weer breder.
Nu ben ik aan het stoeien geweest, alleen krijg ik de cirkel niet echt draaien, maar wel allemaal vreemde bewegingen.
Kan iemand mij misschien helpen en/of wat tips geven, aan de onderstaande code:

class CvRond extends Canvas
{ public void paint(Graphics g)
{ Dimension d = getSize();
int breedte = d.width,
hoogte = d.height;
g.drawRect(2, 2, breedte - 5, hoogte - 5);
int a = Math.min(breedte, hoogte) * 4 / 5;
int linkermarge = (breedte - a)/2;
int bovenmarge = (hoogte - a)/2;

int i = 0;
int q = 0;
for (i=0; i<1000; i++, q=q*i)
g.drawOval(linkermarge+i, bovenmarge+i, a-i, a);
repaint();
}
}

Verwijderd

zet er ff [ code ] tags omheen.

en als je een circel draait, dan zie je toch nix? hij 's toch rond? maar goed, je wilt dus steeds groter en kleiner?
lijkt het dan of ie draait denk je?

  • VonAalscht
  • Registratie: November 2001
  • Laatst online: 14-09 15:16

VonAalscht

Raaaar

for (i=0; i<1000; i++, q=q*i)

Volgens mij gaat er daar iets fout ?

for (i=0; i<1000; i++)
q = q * i;

lijkt me iets waarschijnlijker en beter 8-)

PS maak de code aub LEESBAAR, dit is niet te lezen zo !

Verwijderd

Topicstarter
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class CvRond extends Canvas
{  public void paint(Graphics g)
   {  Dimension d = getSize();
    int breedte = d.width, 
        hoogte = d.height; 
    g.drawRect(2, 2, breedte - 5, hoogte - 5);
    int a = Math.min(breedte, hoogte) * 4 / 5;
    int linkermarge = (breedte - a)/2;
    int bovenmarge = (hoogte - a)/2;
    
    int i = 0;
    int q = 0;
    for (i=0; i<1000; i++, q=q*i)
    g.drawOval(linkermarge+i, bovenmarge+i, a-i, a);
    repaint();
   }
}

sorry voor de onoverzichtelijkheid :)

en --> for (i=0; i<1000; i++, q=q*i) moet niet te letterlijk genomen worden, is een probeerseltje.

Verwijderd

Ik zou sowieso een fillRect doen...

Verwijderd

ik dacht aan een fillOval

Verwijderd

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
public void paint(Graphics g)
   {  
    int breedte = 100;
    int hoogte = 100;
    
    if( shrink )
        x--;
    else
        x++;
    if( x == 100 )
    {
        shrink = true;
        x--;
    }
    if( x == 0 )
    {
        shrink = false;
        x++;
    }
    g.setColor(Color.WHITE);
    g.fillRect(0,0,400, 400);
    g.setColor(Color.BLACK);
    g.drawOval(100+x, 100, 200-(2*x), 200);
        repaint();
   }

Even je sizes implementeren, zorgen dat x en shrink global zijn en een pause inbouwen dan doet ie het...

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 16-09 16:30

Janoz

Moderator Devschuur®

!litemod

Als je hem echt realistisch wil laten ronddraaien moet je de sinus gebruiken..

y-schaal = 1
x-schaal = sin(tijd)

(eventueel neem je de absolute waarde van de sinus als het niet goed werkt met negatiefe waarden)

Let op of die 'tijd' dan in graden is (0-360) of radialen (0-2Pi,0-6.28)

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'

Pagina: 1