[JAVA] Schalen van een grafiek

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • HotFix
  • Registratie: April 2009
  • Laatst online: 28-09 20:05
Gegroet, medetweakers!

Ik ben bezig met een project voor school, maar aangezien ik eigenlijk slecht ben in programmeren heb ik daar hulp bij nodig. Overigens betekent dit niet dat ik jullie vraag mijn huiswerk te doen, maar enige hints zou ik op prijs stellen ;)

De opdracht is om, aan de hand van een eerder gemaakte rente-applet, een grafiek te tekenen. Die grafiek zou moeten schalen en dergelijke ('idiot proof'), zodat extreme waarden niet van het scherm verdwijnen.

Ik neem aan dat ik mijn code hier kan neerplempen, dus zonder langer wachten:
Java:
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
26
27
28
29
      public void paint(Graphics g) {
   int xmax;
   int ymax;
   ymax = (this.getHeight());
   xmax = (this.getWidth());


   int beginkapitaal = Integer.parseInt(beginkapitaalVeld.getText());
   int rente = Integer.parseInt(renteVeld.getText());
   int termijnen = Integer.parseInt(termijnenVeld.getText());
   int kapitaal = beginkapitaal;
   x = 0;

   ymax = eindkapitaal;

   do {

    kapitaal = kapitaal + (kapitaal * rente/100);
    xx = (int) (x*30.0);

    yy = (int) (kapitaal*1.0);
    g.drawLine((xx), (ymax), (xx), ((ymax)-yy));
    x=x + 1;

    }
   while (x <= termijnen);


   }

Relevante code ;)

Als je deze code test, en bij kapitaal, rente en termijnen respectievelijk 100, 20 en 20 invult, komen er nog enigszins nette waarden uit. However, als ik andere waarden invoer, loopt de grafiek plots door de 'tabel' heen. Dit had ik als het goed is _niet_ op mijn andere computer, maargoed.
Hoe lost ik dit op?

Daarnaast, het schalen is mij door de leraar uitgelegd, enigszins, maar ik snap er eerlijk gezegd maar weinig van. De uitleg die hij ons gaf (in de vorm van een stukje code) was als volgt:
code:
1
2
3
4
5
6
7
8
9
10
11
Stel, je eindkapitaal is 10.000 (pixels, lekker makkelijk)

ymax = eindkapitaal;

int ymax = this.getHeight;
- double hh
- int h;
- k = k + (k*r) (Kapitaal en Rente)
     - hh = (double) k / (double) eindkapitaal * (double) ymax;
     - h = (int) hh;
- teken


Het probleem bij mij is dan, dat ik niet weet wat ik ermee moet doen :')
Wat ik eruit begrijp is dat je de van de ymax het eindkapitaal wilt maken (of juist andersom?)
Maar ik snap ook het systeem van double hh enzovoort niet...

Wellicht kan iemand mij opheldering hierover geven ;)

[ Voor 40% gewijzigd door HotFix op 19-11-2010 19:15 ]


Acties:
  • 0 Henk 'm!

  • Herko_ter_Horst
  • Registratie: November 2002
  • Niet online
Code neerplempen is niet de bedoeling. Als je relevante stukjes code post, geef dan ook even de taal aan [code=java] zodat je syntax highlighting krijgt.

Wat je docent probeert duidelijk te maken, is dat je wilt voorkomen dat je grafiek te groot wordt voor de beschikbare ruimte. Je kunt dus niet zomaar de waarde uit je data gebruiken als y-waarde in je grafiek. In plaats daarvan reken je alle waarden om afhankelijk van ymax, die de hoogte van je canvas aangeeft (danwel de maximale hoogte waarop je mag/wilt tekenen).

Dus als de hoogste waarde uit je data 10000 is, en de hoogte van je canvas is 300, dan teken je het punt voor 10000 op de hoogte 300. Het punt voor 5000 zou dan op de hoogte 150 moeten komen (want 10000:5000 = 300:150).

De double is er omdat delen nou eenmaal vaak leidt tot getallen achter de komma. Op het eind wordt de waarde gecast naar een int, omdat pixel-coordinaten hele getallen moeten zijn.

[ Voor 4% gewijzigd door Herko_ter_Horst op 19-11-2010 18:20 ]

"Any sufficiently advanced technology is indistinguishable from magic."


Acties:
  • 0 Henk 'm!

  • HotFix
  • Registratie: April 2009
  • Laatst online: 28-09 20:05
Overigens, een ander vervelend iets is dat de grafiek ergens links bovenin zweeft. Niet erg handig, dus ik vraag me af hoe ik dat oplos. Als het goed is stond dat al in de code, en op school had ik er geen last van, maar helaas werkt het nu dus niet..

Acties:
  • 0 Henk 'm!

  • Herko_ter_Horst
  • Registratie: November 2002
  • Niet online
Kwestie van debuggen met welke x- en y-waardes de grafiek getekend wordt of je wel het juiste component gebruikt om op te tekenen.

"Any sufficiently advanced technology is indistinguishable from magic."