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!!!