Avatar billede krukken Juniormester
27. november 2004 - 14:41 Der er 1 kommentar og
1 løsning

Problemer med Applet - hjælp søges.

Hej,

Jeg har denne applet - men jeg har noge små problemer med at få den til at virke her perfekt, og jeg er løbet tør for ideer nu.

Windrose.java:
***************
import java.util.*;
import java.awt.*;
import java.applet.*;
import java.net.*;
import java.awt.image.*;

public class WindRose extends Applet
{
        private int r = 133;
      private int cx = 185;
      private int cy = 185;
        private Image bgImage = null;
        private URL base;
        private double frekvens[];
        private double speed[];
        private double energy[];
        private double v[];
        private double maxfrekvens;
        private double maxenergy;
        private double maxspeed;
     
      public void init()
      {
          setBackground(Color.white);
              try
              {
                  base = getDocumentBase();
                  MediaTracker tracker = new MediaTracker (this);
                  bgImage = getImage(base, "circles.gif");
                  tracker.addImage (bgImage, 0);
                  tracker.waitForAll();
                this.v = new double[16];
                for(int i = 0; i < 16; i++)
                {
                    v[i] = Double.parseDouble(getParameter("Hparam"+i));
                }
                this.frekvens = new double[16];
                for(int i = 0; i < 16; i++)
                {
                    frekvens[i] = Double.parseDouble(getParameter("Fparam"+i));
                }
                this.speed = new double[16];
                this.energy = new double[16];
                calulateEnergy();
                calulateSpeed();
            this.maxenergy = max(energy);
            this.maxspeed  = max(speed);
                this.maxfrekvens = max(frekvens);
                System.out.println(""+maxenergy);
                System.out.println(""+maxspeed);
                System.out.println(""+maxfrekvens);                           
              }
            catch (Exception e)
            {
                System.out.println(System.err);
               
            } 
      }
     
          /* Given 16 pie slices for the wind rose, each pie slice will cover 22.5 degrees
        and will consist of two lines of length r, where r is the percentage of maximum
        radius appropriate for the data point, drawn at -11.25 degrees and +11.25 degrees
        from the compass angle for the direction. The lines will be joined by a 22.5 degree
        arc.  Labels will be centered on a point 35% greater than the maximum radius.
        */
      public void paint (Graphics g)
      {
          g.drawImage(bgImage, 0, 0, this); 
          /*String[] lbl = {"E", "ESE", "SE", "SSE",
                            "S", "SSW", "SW", "WSW",
                            "W", "WNW", "NW", "NNW",
                            "N", "NNE", "NE", "ENE"};*/
              double angle = -11.25;
              //Font f = new Font ("Helvetica", Font.PLAIN, 8);
              //FontMetrics fm = g.getFontMetrics (f);
              g.setColor(Color.blue);
              for (int i = 0; i < 16; i++)
              {
                  Polygon p = new Polygon(); 
                  int rd =  (int) ((frekvens[i]/maxfrekvens)*185);
                int dx = (int) (rd * Math.cos(angle * Math.PI / 180));
                int dy = (int) (rd * Math.sin(angle * Math.PI / 180));
                p.addPoint(cx, cy);
                //int lx = (int) ( (r * 1.35) * Math.cos((angle + 11.25) * Math.PI / 180));
                //int ly = (int) ( (r * 1.35) * Math.sin((angle + 11.25) * Math.PI / 180));
                //double a = angle + 11.25;
                //g.drawString (lbl[i], (cx + lx) - (fm.stringWidth(lbl[i])/2), (cy + ly) + (fm.getAscent()/2));
                angle = (angle + 22.5) % 360;
                int dx2 = (int) (rd * Math.cos(angle * Math.PI / 180));
                int dy2 = (int) (rd * Math.sin(angle * Math.PI / 180));
                p.addPoint(cx + dx, cy + dy);
                p.addPoint(cx + dx2, cy + dy2);               
                g.fillPolygon(p);
              }
              g.setColor(Color.black);
              angle = -11.25;
              for (int i = 0; i < 16; i++)
              {
                  Polygon p = new Polygon(); 
                  int rd =  (int) ((speed[i]/maxspeed)*185);
                int dx = (int) (rd * Math.cos(angle * Math.PI / 180));
                int dy = (int) (rd * Math.sin(angle * Math.PI / 180));
                p.addPoint(cx, cy);
                angle = (angle + 22.5) % 360;
                int dx2 = (int) (rd * Math.cos(angle * Math.PI / 180));
                int dy2 = (int) (rd * Math.sin(angle * Math.PI / 180));
                p.addPoint(cx + dx, cy + dy);
                p.addPoint(cx + dx2, cy + dy2);               
                g.fillPolygon(p);


              }
              g.setColor(Color.red);
              angle = -11.25;
              for (int i = 0; i < 16; i++)
              {
                  Polygon p = new Polygon();
                  int rd =  (int) ((energy[i]/maxenergy)*185);
                int dx = (int) (rd * Math.cos(angle * Math.PI / 180));
                int dy = (int) (rd * Math.sin(angle * Math.PI / 180));
                p.addPoint(cx, cy);
                angle = (angle + 22.5) % 360;
                int dx2 = (int) (rd * Math.cos(angle * Math.PI / 180));
                int dy2 = (int) (rd * Math.sin(angle * Math.PI / 180));
                p.addPoint(cx + dx, cy + dy);
                p.addPoint(cx + dx2, cy + dy2);               
                g.fillPolygon(p);


              }

         
      }
     
      public void calulateSpeed()
    {
        for(int i = 0; i < 12; i++)
        {
            speed[i] = v[i]*frekvens[i];
        }
    }

    public void calulateEnergy()
    {
        for(int i = 0; i < 12; i++)
        {
            energy[i] = v[i]*v[i]*v[i]*frekvens[i];
        }
       
    }
     
      public static double max(double[] t)
    {
            double maximum = t[0];
            for (int i=1; i<t.length; i++)
            {
                if (t[i] > maximum)
                {
                        maximum = t[i];
                }
            }
            return maximum;
    }
}***********************

Windrose.html
*************************
<html>
<head>
<title>Applettest</title>
</head>
<body>
<APPLET CODE="WindRose.class" WIDTH=371 HEIGHT=371>
  <param name="Hparam0" value="5.85">
  <param name="Hparam1" value="5.67">
  <param name="Hparam2" value="6.75">
  <param name="Hparam3" value="7.19">
  <param name="Hparam4" value="6.84">
  <param name="Hparam5" value="5.93">
  <param name="Hparam6" value="5.76">
  <param name="Hparam7" value="5.85">
  <param name="Hparam8" value="7.35">
  <param name="Hparam9" value="6.47">
  <param name="Hparam10" value="6.38">
  <param name="Hparam11" value="5.76">
  <param name="Hparam12" value="5.76">
  <param name="Hparam13" value="5.76">
  <param name="Hparam14" value="5.76">
  <param name="Hparam15" value="5.76">
  <param name="Fparam0" value="6.7">
  <param name="Fparam1" value="5.0">
  <param name="Fparam2" value="8.5">
  <param name="Fparam3" value="7.5">
  <param name="Fparam4" value="7.7">
  <param name="Fparam5" value="7.7">
  <param name="Fparam6" value="7.9">
  <param name="Fparam7" value="9.2">
  <param name="Fparam8" value="14.5">
  <param name="Fparam9" value="14.5">
  <param name="Fparam10" value="6.7">
  <param name="Fparam11" value="4.1">
  <param name="Fparam12" value="14.5">
  <param name="Fparam13" value="6.7">
  <param name="Fparam14" value="4.1">
  <param name="Fparam15" value="4.1"> 
</APPLET>
</body>
</html>
******************************

Problemet er at de tre "kegler" bliver tegnet oven i hinaden og dækker hinanden. Istedet skal det gerne fungere på den måde at den bæå kegle er 22,5 grad bred. Den råd er måske 15, og den sorte 10. Men de to sidst nævnet er centeret i forhold til den blå kegle. Jeg ved at dette er en lidt rodet forklaring - så i er meget velkommende til at stille uddybnede spørgsmål. Men prøv at se appletten først!!!
Avatar billede morteeart Nybegynder
27. november 2004 - 14:45 #1
ehh, c++ ?

Den skal oprettes i javakategorien.

Opret selv et svar, og accepter det.
Avatar billede krukken Juniormester
27. november 2004 - 14:49 #2
Hmm - sorry
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester