Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.awt.*;
- import java.awt.event.*;
- import java.util.*;
- import javax.swing.*;
- public class Main{
- public static final double displace=25,tolerance=.7;
- public static JJPanel panel;
- public static ArrayList<Point> list;
- public static double px,py,x,y;
- public static void main(String[] args) throws Exception{
- list=new ArrayList<Point>();
- JFrame frame=new JFrame("corner detection");
- frame.setContentPane(panel=new JJPanel());
- Mouse m=new Mouse();
- panel.addMouseListener(m);
- panel.addMouseMotionListener(m);
- frame.setVisible(true);
- frame.setSize(800,600);
- frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
- }
- public static double d(double x1,double y1,double x2,double y2){
- double dx=x2-x1,dy=y2-y1;
- return Math.sqrt(dx*dx+dy*dy);
- }
- public static void click(int xx,int yy){
- list=new ArrayList<Point>();
- list.add(new Point(x=px=xx,y=py=yy));
- panel.repaint();
- }
- public static void drag(int xx,int yy){
- double dist;
- while((dist=d(x,y,xx,yy))>=displace){
- double dx=px-xx,dy=py-yy;
- double dd=Math.sqrt(dx*dx+dy*dy);
- if(dd==0) break;
- dx/=dd;
- dy/=dd;
- dd=(x-xx)*dx+(y-yy)*dy;
- double ddx=dx*dd,ddy=dy*dd;
- double backup=Math.sqrt(displace*displace-dist*dist+ddx*ddx+ddy*ddy);
- list.add(new Point(x=xx+ddx-backup*dx,y=yy+ddy-backup*dy));
- }
- px=xx;
- py=yy;
- panel.repaint();
- }
- public static void paint(Graphics g){
- g.setColor(Color.black);
- g.fillRect(0,0,800,600);
- g.setColor(Color.gray);
- boolean[] corner=new boolean[list.size()];
- Point prev=null;
- double pdx=0,pdy=0;
- int i=0;
- for(Point p:list){
- if(prev!=null){
- g.drawLine((int)p.x,(int)p.y,(int)prev.x,(int)prev.y);
- double dx=p.x-prev.x,dy=p.y-prev.y;
- corner[i-1]=i>1 && d(dx,dy,pdx,pdy)>displace*tolerance;
- pdx=dx;
- pdy=dy;
- }
- i++;
- prev=p;
- }
- i=0;
- for(Point p:list){
- g.setColor(corner[i++]? Color.red:Color.white);
- int x=(int)p.x,y=(int)p.y;
- g.fillRect(x-2,y-2,5,5);
- }
- }
- }
- class Point{
- public double x,y;
- public Point(double x,double y){this.x=x;this.y=y;}
- }
- class JJPanel extends JPanel{
- public void paint(Graphics g){
- Main.paint(g);
- }
- }
- class Mouse implements MouseListener,MouseMotionListener{
- @Override
- public void mousePressed(MouseEvent arg0){Main.click(arg0.getX(),arg0.getY());}
- @Override
- public void mouseDragged(MouseEvent arg0){Main.drag(arg0.getX(),arg0.getY());}
- @Override
- public void mouseMoved(MouseEvent arg0){}
- @Override
- public void mouseClicked(MouseEvent arg0){}
- @Override
- public void mouseReleased(MouseEvent arg0){}
- @Override
- public void mouseEntered(MouseEvent arg0){}
- @Override
- public void mouseExited(MouseEvent arg0){}
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement