Applet Code



import java.awt.*;
import java.applet.*;
import java.lang.*;

public class Triangle extends Applet
{
       Graphics    sG;

       Graphics    bG;
       Image       bI;

       Font      font       = new Font("Courier", Font.PLAIN, 12);

       Color       red      = new Color(255, 0, 0);
       Color       blue     = new Color(0, 0, 255);
       Color       green    = new Color(0, 255, 0);
       Color       white    = new Color(247, 243, 234);
       Color       black    = new Color(0, 0, 0);

       Polygon     triangle = new Polygon();

       int         redx     = 40;
       int         redy     = 214;

       int         greenx   = 140;
       int         greeny   = 40;

       int         bluex    = 240;
       int         bluey    = 214;

       public void init()
       {
              bI = createImage(this.size().width, this.size().height);
              bG = bI.getGraphics();
              triangle.addPoint(redx, redy);
              triangle.addPoint(bluex, bluey);
              triangle.addPoint(greenx, greeny);
              triangle.addPoint(redx, redy);
              drawscreen();
       }

       public void paint(Graphics g)
       {
              g.drawImage(bI, 0, 0, this);
              sG = getGraphics();
       }

       public void update(Graphics g)
       {
              g.drawImage(bI, 0, 0, this);
       }

       public void drawscreen()
       {
              bG.setColor(white);
              bG.fillRect(0, 0, 301, 334);
              bG.setColor(black);
              bG.drawPolygon(triangle);
              bG.setColor(red);
              bG.fillOval(redx - 5, redy - 5, 11, 11);
              bG.setColor(blue);
              bG.fillOval(bluex - 5, bluey - 5, 11, 11);
              bG.setColor(green);
              bG.fillOval(greenx - 5, greeny - 5, 11, 11);
       }

       public boolean mouseDrag(Event evt, int mx, int my)
       {
              mouseDown(evt, mx, my);
              return true;
       }

       public boolean mouseDown(Event evt, int mx, int my)
       {
              double      x, y, work;
              double      cred, cblue, cgreen;
              int         ired, iblue, igreen;

              if((mx - redx) * (mx - redx) + (my - redy) * (my - redy) < 8)
              {
                     mx = redx;
                     my = redy;
              }
              if((mx - bluex) * (mx - bluex) + (my - bluey) * (my - bluey) < 8)
              {
                     mx = bluex;
                     my = bluey;
              }
              if((mx - greenx) * (mx - greenx) + (my - greeny) * (my - greeny) < 8)
              {
                     mx = greenx;
                     my = greeny;
              }

              x = 1.0 * mx;
              y = 1.0 * my;

              cred = 1 + ((greeny - redy) * (redx - x) - 
                         (greenx - redx) * (redy - y)) / 
                         (-(bluey * greenx) + bluex * greeny + bluey * redx - 
                         greeny * redx - bluex * redy + greenx * redy) - 
                         ((bluey - redy) * ((greeny - redy) * (redx - x) - 
                         (greenx - redx) * (redy - y))) / 
                         ((greeny - redy) * (-(bluey * greenx) + bluex * greeny + 
                         bluey * redx - greeny * redx - bluex * redy + 
                         greenx * redy)) + (redy - y)/(greeny - redy);

             cgreen = ((bluey - redy) *  ((greeny - redy) * (redx - x) - 
                      (greenx - redx) * (redy - y))) / 
                      ((greeny - redy) * (-(bluey * greenx) + bluex * greeny + 
                      bluey * redx - greeny * redx - bluex * redy + 
                      greenx * redy)) + (redy - y)/(greeny - redy);

             cblue =  -(((greeny - redy) * (redx - x) - 
                      (greenx - redx) * (redy - y)) / 
                      (-(bluey * greenx) + bluex * greeny + bluey * redx - 
                      greeny * redx - bluex * redy + greenx * redy));

             cgreen = -cgreen;

              drawscreen();
              bG.setColor(black);
              bG.fillOval(mx - 3, my - 3, 7, 7);
              bG.setFont(font);
              if(java.lang.Math.abs(cred) < .000001)
              {
                     cred = 0;
              }
              if(java.lang.Math.abs(cblue) < .000001)
              {
                     cblue = 0;
              }
              if(java.lang.Math.abs(cgreen) < .000001)
              {
                     cgreen = 0;
              }
              bG.drawString("red   coefficient: " +
                             java.lang.Double.toString(cred), 20, 262);
              bG.drawString("blue  coefficient: " +
                             java.lang.Double.toString(cblue), 20, 282);
              bG.drawString("green coefficient: " +
                             java.lang.Double.toString(cgreen), 20, 302);
              sG.drawImage(bI, 0, 0, this);
              return true;
       }

}


Copyright c 1995 by Frank Wattenberg, Department of Mathematics, Montana State University, Bozeman, MT 59717