////////////////////////////////////////////////////////////////////////////////////////// // NMI's Java Code Viewer 5.1 © 1997-2001 B. Lemaire // http://njcv.htmlplanet.com - info@njcv.htmlplanet.com // Copy registered to Evaluation Copy // // Based on Walter Fendt's Hebel.jar classes // Source File Name: Hebel.java // Three classes in all: Hebel.class, Hebel$MHandler.class, Hebel$MMHandler.class // // CHANGE: Renamed Hebel to lever // CHANGE: Renamed Hebel$MHandler to lever_MHandler // CHANGE: Renamed Hebel$MMHandler to lever_MMHandler // CHANGE: Renamed "hebel = hebel" to "local_lever = lever" // CHANGE: Commented out second "local_lever = lever" lines in MHandler and MMHandler ////////////////////////////////////////////////////////////////////////////////////////// // From Hebel.java import java.awt.*; import java.applet.Applet; // From Hebel$MHandler.java import java.awt.*; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; // From Hebel$MMHandler.java import java.awt.*; import java.awt.event.MouseEvent; import java.awt.event.MouseMotionAdapter; public class lever extends Applet { final Applet appl = this; int width; int height; Graphics g1; Graphics g2; Image offscreen; Font fontH; final int mx = 225; final int my = 50; final int n = 10; final int dx = 12; final int dy = 5; double cos; double sin; int left[]; int right[]; Point l[]; int leftTorque; int rightTorque; Point mp; int pos; Polygon pH0; Polygon pHL; Polygon pHR; Polygon pF0[]; Polygon pFL[]; Polygon pFR[]; String lang; String text[]; String german[] = { ",", "\267 ", "Linksdrehendes Drehmoment:", "Rechtsdrehendes Drehmoment:", "\251 W. Fendt 1997" }; String english[] = { ".", "x ", "Left side torque:", "Right side torque:", "\251 W. Fendt 1997, T. Mzoughi 1998" }; String french[] = { ",", "\267 ", "Sens de rotation gauche:", "Sens de rotation droite:", "\251 W. Fendt 1997, Y. Weiss 1998" }; String spanish[] = { ",", "x ", "Momento a la Izquierda:", "Momento a la Derecha:", "\251 W. Fendt 1997, J. Mu\361oz 1999" }; String italian[] = { ",", "\267 ", "momento della forza a sinistra:", "momento della forza a destra:", "\251 W. Fendt 1997, C. Sansotta 1998" }; String danish[] = { ",", "\267 ", "Kraftmomentet p\345 venstresiden:", "Kraftmomentet p\345 h\370jresiden:", "\251 W. Fendt 1997, ORBIT 1999" }; String portuguese[] = { ".", "x ", "Torque do lado esquerdo:", "Torque do lado direito:", "\251 W. Fendt 1997, CEPA 2000" }; String dutch[] = { ",", "x ", "Moment linksdraaiend:", "Moment rechtsdraaiend:", "\251 W. Fendt 1997, T. Koops 2000" }; String slovak[] = { ",", "\267 ", "\u013Eavoto\u010Div\375 moment ot\341\u010Dania", "pravoto\u010Div\375 moment ot\341\u010Dania", "\251 W. Fendt 1997" }; int xCR; int rotX(int i, int j) { return (int)Math.round((225D + cos * (double)i) - sin * (double)j); } int rotY(int i, int j) { return (int)Math.round(50D - sin * (double)i - cos * (double)j); } void addPoint(Polygon polygon, int i, int j) { polygon.addPoint(rotX(i, j), rotY(i, j)); } void initPoly(Polygon polygon, int i, int j) { addPoint(polygon, i * 12, -5); addPoint(polygon, j * 12, -5); addPoint(polygon, j * 12, 5); addPoint(polygon, i * 12, 5); addPoint(polygon, i * 12, -5); } public void init() { width = getSize().width; height = getSize().height; g1 = getGraphics(); offscreen = createImage(width, height); g2 = offscreen.getGraphics(); fontH = new Font("Helvetica", 1, 12); l = new Point[19]; for(int i = 0; i < 19; i++) l[i] = new Point(0, 0); left = new int[10]; right = new int[10]; mp = new Point(0, 0); cos = 1.0D; sin = 0.0D; pH0 = new Polygon(); initPoly(pH0, -10, 10); pF0 = new Polygon[10]; for(int j = 0; j < 10; j++) { pF0[j] = new Polygon(); initPoly(pF0[j], -9 + 2 * j, -8 + 2 * j); } cos = 0.95999999999999996D; sin = 0.28000000000000003D; pHL = new Polygon(); initPoly(pHL, -10, 10); pFL = new Polygon[10]; for(int k = 0; k < 10; k++) { pFL[k] = new Polygon(); initPoly(pFL[k], -9 + 2 * k, -8 + 2 * k); } cos = 0.95999999999999996D; sin = -0.28000000000000003D; pHR = new Polygon(); initPoly(pHR, -10, 10); pFR = new Polygon[10]; for(int i1 = 0; i1 < 10; i1++) { pFR[i1] = new Polygon(); initPoly(pFR[i1], -9 + 2 * i1, -8 + 2 * i1); } } public void start() { text = german; xCR = 300; lang = getParameter("language"); if(lang == null) lang = "German"; if(lang.equals("English")) { text = english; xCR = 200; } else if(lang.equals("French")) { text = french; xCR = 200; } else if(lang.equals("Spanish")) { text = spanish; xCR = 200; } else if(lang.equals("Italian")) { text = italian; xCR = 200; } else if(lang.equals("Danish")) { text = danish; xCR = 200; } else if(lang.equals("Portuguese")) { text = portuguese; xCR = 200; } else if(lang.equals("Dutch")) { text = dutch; xCR = 200; } else if(lang.equals("Slovak")) text = slovak; addMouseListener(new lever_MHandler(this)); addMouseMotionListener(new lever_MMHandler(this)); for(int i = 0; i < 10; i++) left[i] = right[i] = 0; left[3] = 4; right[6] = 2; leftTorque = rightTorque = 0; } void masses(Graphics g, Point point, int i) { if(i == 0) return; int j = point.x; int k = point.y; g.drawLine(j, k, j, k + 5); for(int j1 = 0; j1 < i; j1++) { int i1 = k + j1 * 10 + 5; g.drawLine(j, i1, j, i1 + 5); g.fillRect(j - 4, i1 + 5, 8, 5); } } void fields(Graphics g) { Polygon polygon; Polygon apolygon[]; if(leftTorque > rightTorque) { polygon = pHL; apolygon = pFL; } else if(leftTorque == rightTorque) { polygon = pH0; apolygon = pF0; } else { polygon = pHR; apolygon = pFR; } g.setColor(Color.green); g.fillPolygon(polygon); g.setColor(Color.blue); for(int i = 0; i < 10; i++) g.fillPolygon(apolygon[i]); g.setColor(Color.black); g.drawPolygon(polygon); for(int j = 0; j < 10; j++) g.drawPolygon(apolygon[j]); } void lever(Graphics g) { g.setColor(Color.lightGray); g.fillRect(220, 30, 10, 140); g.setColor(Color.black); g.drawRect(220, 30, 10, 140); g.drawLine(10, 170, 440, 170); leftTorque = rightTorque = 0; for(int i = 1; i < 10; i++) leftTorque += i * left[i]; for(int j = 1; j < 10; j++) rightTorque += j * right[j]; if(leftTorque > rightTorque) { cos = 0.95999999999999996D; sin = 0.28000000000000003D; } else if(leftTorque == rightTorque) { cos = 1.0D; sin = 0.0D; } else { cos = 0.95999999999999996D; sin = -0.28000000000000003D; } for(int k = 0; k < 19; k++) { int l1 = ((k + 1) - 10) * 12; l[k].x = rotX(l1, 0); l[k].y = rotY(l1, 0); } fields(g); g.setColor(Color.red); for(int i1 = 1; i1 < 10; i1++) masses(g, l[9 - i1], left[i1]); g.setColor(Color.black); for(int j1 = 1; j1 < 10; j1++) masses(g, l[9 + j1], right[j1]); g.fillOval(223, 48, 4, 4); for(int k1 = 0; k1 < 19; k1++) g.fillOval(l[k1].x - 1, l[k1].y - 1, 3, 3); } void calculation(Graphics g, int i) { g.setColor(i != 0 ? Color.black : Color.red); g.drawString(text[i + 2], 20, 200 + i * 60); //g.drawString("M", 20, 220 + i * 60); // Used in M2 or M1 = ... g.drawString("T", 20, 220 + i * 60); // Changed to T g.drawString(i != 0 ? "2" : "1", 30, 226 + i * 60); String s = "= "; boolean flag = true; for(int j = i; j < (10 + i) - 1; j++) { int k; int i1; if(i == 0) { k = 9 - j; i1 = left[k]; } else { k = j; i1 = right[k]; } if(i1 > 0) { if(flag) flag = false; else s = s + " + "; s = s + doubleToString(i1, 1) + " N " + text[1]; s = s + doubleToString((double)k / 10D, 2) + " m "; } } s = s + " ="; double d = (double)(i != 0 ? rightTorque : leftTorque) / 10D; String s1 = "= " + doubleToString(d, 1) + " Nm"; if(s.length() <= 85 && !flag) { g.drawString(s, 40, 220 + i * 60); g.drawString(s1, 40, 240 + i * 60); return; } else { g.drawString(s1, 40, 220 + i * 60); return; } } String doubleToString(double d, int i) { String s = ""; int i1 = 0; int k = 1; for(; i1 < i; i1++) k *= 10; int j = (int)Math.round(d * (double)k); s = s + j / k; if(i > 0) s = s + text[0]; j %= k; for(int j1 = 0; j1 < i; j1++) { k /= 10; s = s + j / k; j %= k; } return s; } public void paint(Graphics g) { g.setFont(fontH); g.setColor(Color.yellow); g.fillRect(0, 0, width, height); lever(g); calculation(g, 0); calculation(g, 1); g.setColor(Color.blue); g.drawString(text[4], xCR, 330); } int number() { int i1 = 0; int j1 = -1; for(int i = 0; i < 19; i++) { if(i == 9) continue; int j = mp.x - l[i].x; int k = mp.y - l[i].y; if(i < 9) i1 = left[9 - i]; if(i > 9) i1 = right[(i + 1) - 10]; if(j < -5 || j > 5 || k < -5 || k > i1 * 10 + 5) continue; j1 = i; break; } return j1; } public lever() { } } // Source File Name: Hebel.java class lever_MHandler extends MouseAdapter { private final lever lever_local; /* synthetic field */ public void mousePressed(MouseEvent mouseevent) { int i = mouseevent.getX(); int j = mouseevent.getY(); lever_local.mp.move(i, j); lever_local.pos = lever_local.number(); if(lever_local.pos >= 0 && lever_local.pos < 9) { int k = 9 - lever_local.pos; if(lever_local.left[k] > 0) lever_local.left[k]--; } if(lever_local.pos > 9 && lever_local.pos <= 18) { int l = (lever_local.pos + 1) - 10; if(lever_local.right[l] > 0) lever_local.right[l]--; } lever_local.paint(lever_local.g2); lever_local.g2.setColor(Color.blue); lever_local.masses(lever_local.g2, lever_local.mp, 1); lever_local.g1.drawImage(lever_local.offscreen, 0, 0, lever_local.appl); } public void mouseReleased(MouseEvent mouseevent) { int i = mouseevent.getX(); int j = mouseevent.getY(); lever_local.mp.move(i, j); lever_local.pos = lever_local.number(); if(lever_local.pos >= 0 && lever_local.pos < 9) { int k = 9 - lever_local.pos; if(lever_local.left[k] < 10) lever_local.left[k]++; } if(lever_local.pos > 9 && lever_local.pos <= 18) { int l = (lever_local.pos + 1) - 10; if(lever_local.right[l] < 10) lever_local.right[l]++; } lever_local.paint(lever_local.g2); lever_local.g1.drawImage(lever_local.offscreen, 0, 0, lever_local.appl); } lever_MHandler(lever lever) { lever_local = lever; //lever_local = lever; } } // Source File Name: Hebel.java class lever_MMHandler extends MouseMotionAdapter { private final lever lever_local; /* synthetic field */ public void mouseDragged(MouseEvent mouseevent) { int i = mouseevent.getX(); int j = mouseevent.getY(); lever_local.mp.move(i, j); lever_local.paint(lever_local.g2); lever_local.g2.setColor(Color.blue); lever_local.masses(lever_local.g2, lever_local.mp, 1); lever_local.g1.drawImage(lever_local.offscreen, 0, 0, lever_local.appl); } lever_MMHandler(lever lever) { lever_local = lever; //lever_local = lever; } }