// Sunday, Nov. 3, 2003, by Yamin Li, yamin@k.hosei.ac.jp // Free to use, modify, and distribute. import java.awt.Graphics; import java.awt.Color; import java.lang.Math; public class Needle{ private Color color; private int width, length, balance, center; private double angle; static double pi = 3.1415926535f; public Needle(Color inColor, int inWidth, int inLength, int inBalance, int inCenter){ color = inColor; width = inWidth; length = inLength; balance = inBalance; center = inCenter; } public void setAngle(double inAngle){ angle = 2 * pi * inAngle/360.0; } public void drawNeedle(Graphics g){ int x0, y0, x1, y1, dx, dy; x1 = center + (int)(length * Math.cos(angle)); y1 = center + (int)(length * Math.sin(angle)); x0 = center + (int)(balance * Math.cos(pi + angle)); y0 = center + (int)(balance * Math.sin(pi + angle)); dx = (int)(width * Math.cos(pi/2.0 - angle)); dy = (int)(width * Math.sin(pi/2.0 - angle)); drawPoly(g, x1, y1, x0 - dx, y0 + dy, x0 + dx, y0 - dy); } private void drawPoly(Graphics g, int x1, int y1, int x2, int y2, int x3, int y3){ int x[] = {x1, x2, x3, x1}; int y[] = {y1, y2, y3, y1}; g.setColor(color); g.fillPolygon(x, y, 4); g.setColor(Color.black); g.drawPolygon(x, y, 4); g.setColor(Color.gray); g.fillOval(center - 9, center - 9, 19, 19); g.setColor(Color.black); g.drawOval(center - 9, center - 9, 19, 19); g.drawLine(center - 1, center - 1, center + 1, center - 1); g.drawLine(center - 1, center, center + 1, center); g.drawLine(center - 1, center + 1, center + 1, center + 1); } }