15. april 2003 - 14:25Der er
5 kommentarer og 1 løsning
Skalering
Jeg sidder og kokser over et problem ved et eksamensprojekt i programmering (HTX). Mit projekt består af en java-applet der skal kunne tegne en graf ud fra en række givne koordinatsæt. Disse koordinatsæt læses fra den html-fil som appletten kaldes fra. Mit problem er det at jeg skal have skaleret koordinatsættene så de passer indenfor appletten. Hvis appletten f.eks. er 500 pixels i bredden nytter det jo ikke noget at et punkt på grafen bliver placeret i x = 700. Derfor har jeg sammenkogt følgende metoder til udregning af nye koordinatsæt i forhold til applettens størrelse:
int Xpos[] = {50,100,200,300,400,500,600,700,800,900,1000}; int Ypos[] = {15,30,70,130,150,170,190,230,140,100,70};
/* Fra classen GraphFunc.java */ public class GraphFunc {
public static int FindMax(int GrafArray[]) { int Max = GrafArray[0]; for (int Taeller = 0; Taeller < GrafArray.length; Taeller++) { if (GrafArray[Taeller] > Max) { Max = GrafArray[Taeller]; } } return Max; }
public static int FindMin(int GrafArray[]) { int Min = GrafArray[0]; for (int Taeller = 0; Taeller < GrafArray.length; Taeller++) { if (GrafArray[Taeller] < Min) { Min = GrafArray[Taeller]; } } return Min; }
public static int[] SkaleXakse(int GrafArray[], int MaxX) { int ArrayMax = FindMax(GrafArray); int SkaleringsForhold = MaxX / ArrayMax;
...men det fungere ikke helt ordentligt. Nogle gange bliver grafen for lav og nogle gange for smal. Jeg tror måske det skyldes min brug at int-variablen - dette skyldes at jeg benytter drawPolyline til at tegne grafen med, og den håndtere kun int-værdier. Jeg har sat "Skaleringsforhold" i kommentar, da det er en int. I stedet ganges en double nu direkte på en int uden at resultere i fejl og det burde give en gyldig int-værdi, men det kan godt være at fejlen ligger her. Mit spørgsmål lyder: Har jeg lavet en fejl, og hvis ja, hvor består den så i? ...eller: Hvordan kan jeg lave en skaleringsmetode der virker? -Sion
PS. I må undskylde hvis det er et simpelt spørgsmå, men jeg er ikke så sej til Java...
Umiddelbart vil jeg mene at din skalering er OK. Grunden til at din graf bliver for lav eller for smal kan være at du skalerer X og Y akse uafhængigt af hinanden. Hvis du vil skalere så grafen bare bliver "formindsket" så skal du bruge samme skaleringsforhold på begge akser. Jeg gætter på at dit maxX og MaxY giver de max værdier du kan tegne. Prøv at kalde
Jeg har ikke kunne få dit foreslag til at virke, men det gør ikke noget at akserne bliver skaleret uafhængigt af hinanden, tallene i array'ene skal bare skaleres så de alle ligger indenfor applettens højde og bredde. Jeg har forsøgt at bruge "scale"-metoden i stedet, men så bliver grafikken bare "streched" eller trukket ud så det passer med skaleringen...
conrad, du er simpelthen min redningsmand! Mange tak! Det virker helt perfekt, hvilket betyder at jeg alligvel kan blive færdig med projektet - jeg har satme brugt mange timer på at hive mig i håret over det her problem. Takker ydmygst mange gange for din uvurderlige hjælpe! MVH Sion
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.