import java.applet.Applet; import java.awt.*; import java.lang.*; public class Wrench extends Applet { WrenchPanel mainpanel; Button restartButton, componentsButton; Panel buttonpanel = new Panel(); public void init() { mainpanel = new WrenchPanel(); setLayout(new BorderLayout()); add("Center",mainpanel); mainpanel.init(); add("South",buttonpanel); buttonpanel.setLayout(new BorderLayout()); restartButton = new Button("restart"); buttonpanel.add("West",restartButton); componentsButton = new Button("components"); buttonpanel.add("East",componentsButton); } public boolean action(Event e, Object o) { if (e.target.equals(restartButton)) mainpanel.init(); if (e.target.equals(componentsButton)) mainpanel.components=!mainpanel.components; mainpanel.repaint(); return true; } public class WrenchPanel extends Panel { int boltradius = 400/20; double to_radians = Math.atan(1)/45.0; Image back; Graphics bg; Dimension bsize = size(); boolean components=false; int centerx = 400/2, centery = 400/2; int wrench_ang, wrench_len, force_ang, force_len, arrow_head, unit_len; int wrench_x, wrench_y, epsilon, force_x,force_y, torque; int handlex[]={0,0,0,0}; int handley[]={0,0,0,0}; int mode = 0; boolean busy = false; Color tan_col = new Color(.9f,.8f,.6f); public void init() { wrench_len=400/4; wrench_ang=0; force_ang=90; force_len=wrench_len/2; arrow_head=force_len/10; epsilon=(int) wrench_len/7; wrench_x=(int) (centerx+wrench_len*Math.cos(((double)wrench_ang)*to_radians)); wrench_y=(int) (centery+wrench_len*Math.sin(((double)wrench_ang)*to_radians)); force_x=(int) (wrench_x+force_len*Math.cos(((double)(force_ang+180.))*to_radians)); force_y=(int) (wrench_y+force_len*Math.sin(((double)(force_ang+180.))*to_radians)); unit_len=wrench_len; components=false; reset(); } public void reset() { repaint(); } public boolean mouseDown(Event e, int x, int y) { if (Math.abs(x-wrench_x)<=epsilon && Math.abs(y-wrench_y)<=epsilon) { wrench_x=x; wrench_y=y; wrench_len=(int) (Math.sqrt((wrench_x-centerx)*(wrench_x-centerx)+(wrench_y-centery)*(wrench_y-centery))); wrench_ang=(int) (Math.atan(((double)(wrench_y-centery))/((double)(wrench_x-centerx)))/to_radians); if (wrench_x180) wrench_ang-=360; s = "Wrench angle = " + String.valueOf(-wrench_ang) + '\u00B0'; g.drawString(s,10,40); s = "Torque magnitude = " + String.valueOf(((double)(torque/100))/100.); g.drawString(s,220,60); s = "Force length = " + String.valueOf(((double)(force_len))/100); g.drawString(s,220,20); if (force_ang>180) force_ang-=360; s = "Force angle = " + String.valueOf(-force_ang) + '\u00B0'; g.drawString(s,220,40); if (components) s = "Components on"; else s = "Components off"; g.drawString(s,10,60); } private synchronized void done() { busy = false; notifyAll(); } } }