import java.applet.Applet; import java.awt.*; import java.awt.event.*; public class nagelpnt extends Applet implements MouseListener, MouseMotionListener{ int p1x, p1y, p2x, p2y, p3x, p3y, pick, cnt ; public void init() { addMouseListener(this); addMouseMotionListener(this); setBackground(Color.white); resize(300,300); Font font = new java.awt.Font("TimesRoman", Font.PLAIN, 12); cnt =0; p1x=150; p1y=20; p2x=30; p2y=220; p3x=240; p3y=280; pick =0; setFont(font); } public void paint(Graphics g) { double v1x = p2x-p1x; double v1y = p2y-p1y; double v2x = p3x-p2x; double v2y = p3y-p2y; double v3x = p3x-p1x; double v3y = p3y-p1y; double l1 = Math.sqrt(v1x*v1x+v1y*v1y); double l2 = Math.sqrt(v2x*v2x+v2y*v2y); double l3 = Math.sqrt(v3x*v3x+v3y*v3y); double dim = 2; double h1x = dim*v1y/l1; double h1y = -dim*v1x/l1; double h2x = dim*v2y/l2; double h2y = -dim*v2x/l2; double h3x = dim*v3y/l3; double h3y = -dim*v3x/l3; g.setColor(Color.green); Polygon pg1=new Polygon(); pg1.addPoint(p1x-(int)h1x,p1y-(int)h1y); pg1.addPoint(p1x+(int)h1x,p1y+(int)h1y); pg1.addPoint(p2x+(int)h1x,p2y+(int)h1y); pg1.addPoint(p2x-(int)h1x,p2y-(int)h1y); g.fillPolygon(pg1); Polygon pg2 =new Polygon(); pg2.addPoint(p2x-(int)h2x,p2y-(int)h2y); pg2.addPoint(p2x+(int)h2x,p2y+(int)h2y); pg2.addPoint(p3x+(int)h2x,p3y+(int)h2y); pg2.addPoint(p3x-(int)h2x,p3y-(int)h2y); g.fillPolygon(pg2); Polygon pg3 =new Polygon(); pg3.addPoint(p1x-(int)h3x,p1y-(int)h3y); pg3.addPoint(p1x+(int)h3x,p1y+(int)h3y); pg3.addPoint(p3x+(int)h3x,p3y+(int)h3y); pg3.addPoint(p3x-(int)h3x,p3y-(int)h3y); g.fillPolygon(pg3); g.setColor(Color.blue); g.fillOval(p1x-4,p1y-4,8,8); g.fillOval(p2x-4,p2y-4,8,8); g.fillOval(p3x-4,p3y-4,8,8); g.setColor(Color.orange); g.fillOval(p1x-2,p1y-2,4,4); g.fillOval(p2x-2,p2y-2,4,4); g.fillOval(p3x-2,p3y-2,4,4); g.setColor(Color.green); if (cnt > 0){ g.setColor(Color.red); double L1 = Math.sqrt(v1x*v1x+v1y*v1y); double L2 = Math.sqrt(v2x*v2x+v2y*v2y); double L3 = Math.sqrt(v3x*v3x+v3y*v3y); double h = (L1+L2+L3)/2; double q1x = p2x+(h-L1)*v2x/L2; double q1y = p1y+v1y+(h-L1)*v2y/L2; double q2x = p1x+(h-L1)*v3x/L3; double q2y = p1y+(h-L1)*v3y/L3; double q3x = p1x+(h-L3)*v1x/L1; double q3y = p1y+(h-L3)*v1y/L1; double V1x = q1x-p1x; double V1y = q1y-p1y; double V2x = q2x-p2x; double V2y = q2y-p2y; double V3x = q3x-p3x; double V3y = q3y-p3y; double m1 = V1y*p1x-V1x*p1y; double m2 = V2y*p2x-V2x*p2y; double m3 = V3y*p3x-V3x*p3y; double DET = -V1y*V2x+V1x*V2y; double nx = (-V2x*m1+V1x*m2)/DET; double ny = (-V2y*m1+V1y*m2)/DET; if(V1x == 0){ g.drawLine((int)(m1/V1y),0,(int)(m1/V1y),300);} else{ g.drawLine(0,(int)(-m1/V1x),300,(int)(-(m1-300*V1y)/V1x));} if(V2x == 0){ g.drawLine((int)(m2/V2y),0,(int)(m2/V2y),300);} else{ g.drawLine(0,(int)(-m2/V2x),300,(int)(-(m2-300*V2y)/V2x));} if(V3x == 0){ g.drawLine((int)(m3/V3y),0,(int)(m3/V3y),300);} else{ g.drawLine(0,(int)(-m3/V3x),300,(int)(-(m3-300*V3y)/V3x));} if (cnt >1){ if(DET != 0){ g.setColor(Color.blue); g.fillOval((int)nx-4,(int)ny-4,8,8); g.setColor(Color.orange); g.fillOval((int)nx-2,(int)ny-2,4,4); g.setColor(Color.gray); g.drawString("Nagelpunkten",(int)nx+15,(int)ny+5);}}} } public void mousePressed(MouseEvent e) { double bestdist = 8; int x = e.getX(); int y = e.getY(); double dist1 = (p1x - x) * (p1x - x) + (p1y - y) * (p1y - y); double dist2 = (p2x - x) * (p2x - x) + (p2y - y) * (p2y - y); double dist3 = (p3x - x) * (p3x - x) + (p3y - y) * (p3y - y); if (dist1 < bestdist) { pick = 1;} else{ if (dist2 < bestdist){ pick =2;} else{ if (dist3 < bestdist){ pick=3;} else{ pick =0;}}} if(pick==0){ cnt=(cnt+1)%3; play(getCodeBase(),"audio/ding.au"); repaint();} } public void mouseReleased(MouseEvent e) { } public void mouseEntered(MouseEvent e) { } public void mouseExited(MouseEvent e) { } public void mouseClicked(MouseEvent e) { } public void mouseMoved(MouseEvent e) { } public void mouseDragged(MouseEvent e) { int x= e.getX(); int y= e.getY(); if(pick==1){ p1x=x; p1y=y; } if(pick==2){ p2x=x; p2y=y; } if(pick==3){ p3x=x; p3y=y; } repaint(); } }