30. marts 2004 - 20:54Der er
6 kommentarer og 1 løsning
variable vHjul might not have been initialized
Jeg er ved at lave et program, der skal simulere styretøjet på en bil i forbindelse med min uddannelse. programmet er bygget op af nogle metoder, en af dem skal beregne vHjul, som er en vinkel. Beregningen laves i en motode fordi den skal bruges flere gange. Tidliger havde jeg lavet hele beregningen der hvor den skal bruges, og dengang virkede programmet. Variablen vHjul bliver brugt i en anden metode, der skal tegne hjulene og nogle hjælpelinier. Jeg har prøvet at sætte vHjul = 0 i starten af programmet, det hjælper ikke. Jeg bruger NetBeans IDE 3.5.1
//vinkelBag =vinkelFor * (double)(position) * 0.01; //paintBox(270, 300, vinkelBag); //paintBox(330, 300, vinkelBag); } private void paintBox(int xp, int yp, int vinkel, int venstre){ int x1, y1, x2, y2, x3, y3, x4, y4; double bredde = 4, radius = 12, vHjul; double h, v; int xLinie, yLinie; Graphics page = getGraphics(); /* Beregn afstanden fra midten af hjulet og ud til hjørnerne (der er lige langt alle steder)*/ h = Math.sqrt(bredde * bredde + radius * radius); /* Beregn vinklen mellem x-aksen og vektoren, der går ud til hjørnet i *den første kvadrant*/ v = Math.atan(radius / bredde);
/* Hvis der er tale om højre forhjul, skal v2 være negativ.*/ page.setColor(Color.red); if (venstre == 0){ vHjul = -vHjul; if (vHjul < 0){ xLinie = 270; yLinie = -(int)(270 * Math.tan(vHjul)); page.drawLine(xp, yp, xp + xLinie, yp + yLinie); } else { xLinie = -330; yLinie = (int)(300 * Math.tan(vHjul)); page.drawLine(xp, yp, xp + xLinie, yp + yLinie); } } if (venstre == 1){ if (vHjul > 0){ xLinie = -270; yLinie = (int)(270 * Math.tan(vHjul)); page.drawLine(xp, yp, xp + xLinie, yp + yLinie); } else { xLinie = 330; yLinie = -(int)(300 * Math.tan(vHjul)); page.drawLine(xp, yp, xp + xLinie, yp + yLinie); } } page.setColor(Color.black);
/* beregn koordinater til hjørnerne på hjulet. Bemærk at punkt 2 er *en spejling af 1 i y-aksen (den y-akse, der drejer med hjulet)*/ x1 = (int)(h * Math.cos(v - vHjul)); y1 = (int)(h * Math.sin(v - vHjul)); x2 = (int)(h * Math.cos(Math.PI- v - vHjul)); y2 = (int)(h * Math.sin(Math.PI- v - vHjul)); x3 = (int)(h * Math.cos(v + Math.PI - vHjul)); y3 = (int)(h * Math.sin(v + Math.PI - vHjul)); x4 = (int)(h * Math.cos(-v - vHjul)); y4 = (int)(h * Math.sin(-v - vHjul)); xpos = xp; ypos = yp;
/* linierne tegnes, xpos og ypos lægges til fordi x1, y1 osv. beskriver *hjulet i et relativt koordinatsystem */ page.drawLine(x1 +xpos, y1 +ypos, x2 +xpos, y2 +ypos); page.drawLine(x2 +xpos, y2 +ypos, x3 +xpos, y3 +ypos); page.drawLine(x3 +xpos, y3 +ypos, x4 +xpos, y4 +ypos); page.drawLine(x4 +xpos, y4 +ypos, x1 +xpos, y1 +ypos); } private void laengdeStodstang(double vAcker, double a, double h){ /* Denne funktion skal bruge arckermanVinkel som input på første plads, *a er afstenden mellem "akslen" og tandstangen, og h er afstanden mellem *hjulets centrum, og der hvor stødstangen virker. */ stodstang = Math.sqrt((600+h*Math.sin(vAcker)-184.65)*(600+h*Math.sin(vAcker) -184.65)+(a-h*Math.cos(vAcker))*(a-h*Math.cos(vAcker))); } private void vJul(int vRat, double vAcker, double a, double s, double h){ /*vRat = så meget, som derer drejet på rettet. vAcker = ackermanVinkel. *a = Afstanden mellem "akslen" og tandstangen. s = længden af stødstangen. *h = afstenden fra hjulets centrum til der, hvor stødstangen virker. */ double v3, v4, m, vHjul; m = Math.sqrt(a*a + (600 - (184.65 + 0.1608 * (double)(vRat)))*(600 - (184.65 + 0.1608 * (double)(vRat)))); /* 600 er havdelen af sporvidden (skal rettes hvis hjulophæng ænder det) *184.65 er halvdelen af tandstangens længde. *0.1608 er en konstant, der giver forholdet mellem drejning på rettet *og tandstangens position. */ v3 = Math.acos((m*m + h*h - s*s) / 2 / m / h); v4 = Math.asin(a / m); vHjul = Math.PI / 2 + vAcker - v3 - v4; } ...
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.