import java.awt.*; import java.awt.image.*; public class Pts{ // // len // public static int len_se(int p, int sta, int end){ if(p0 ? 1 : (x<0 ? -1 : 0); } public static Point sign(Point p){ return new Point(sign(p.x), sign(p.y)); } public static Point add(Point a, Point b){ return new Point(a.x+b.x, a.y+b.y); } public static Point sub(Point a, Point b){ return new Point(a.x-b.x, a.y-b.y); } public static Point mul(double n, Point p){ return new Point((int)(n*p.x), (int)(n*p.y)); } public static Point mul(Point p, double n){ return mul(n, p); } public static Point cen(Point a, Point b){ return mul(0.5, add(a,b)); } public static Point cen(Dimension sz){ return new Point(sz.width/2,sz.height/2); } public static double nai(Point a, Point b){ return a.x*b.x + a.y*b.y; } // ratio 0.0: a, ratio 1.0:b public static Point ratioPt(Point a, Point b, double ratio){ return add(mul(a,1-ratio),mul(b,ratio)); } // // rot // public static Point rot(Point v, double rad){ int r = 10000; Point argV = new Point( (int)(r*Math.cos(rad)), (int)(r*Math.sin(rad)) ); return rotMul(v, argV); /* double s = Math.sin(rad); double c = Math.cos(rad); return new Point(c*v.x-s*v.y, s*v.x+c*v.y); */ } public static Point rotP90(Point v){ return new Point(-v.y, v.x); } public static Point rot180(Point v){ return new Point(-v.x, -v.y); } public static Point rotN90(Point v){ //return rot180(rotP90(v)); return new Point(v.y, -v.x); } public static Point rev(Point v){ return new Point(v.x, -v.y); } public static Point exch(Point v){ //return rotP90(rev(v)); return new Point(v.y, v.x); } public static Point rotMul(Point p, Point v){ return new Point((int)nai(rev(v), p), (int)nai(exch(v), p)); } public static Point rot(Point p, Point v){ double vl = len(v); if(vl==0) return null; return mul(rotMul(p,v), 1/vl); } public static Point getArgV(Point prevV, Point nextV){ //return rotMul(prevV, rev(nextV)); // NG return rotMul(rev(prevV), nextV); } public static Point rot(Point p, Point prevV, Point nextV){ return rot(p, getArgV(prevV,nextV)); } public static Point rotoff(Point p, Point o, Point v){ return add(rot(sub(p,o),v),o); } public static Point rotoff(Point p, Point o, Point prevV, Point nextV){ return add(rot(sub(p,o),prevV,nextV),o); } // // draw // public static void line(Graphics g, Point a, Point b){ g.drawLine(a.x,a.y,b.x,b.y); } public static void drawImage(Graphics g, Image img, Point p, ImageObserver obs){ g.drawImage(img, p.x,p.y, obs); } // // cast // public static Point p(Dimension sz){ return new Point(sz.width, sz.height); } public static Dimension sz(Point p){ return new Dimension(p.x,p.y); } public static Point p(Polygon pl, int i){ if(i>=pl.npoints) return null; return new Point(pl.xpoints[i], pl.ypoints[i]); } public static void add(Polygon pl, Point p){ pl.addPoint(p.x, p.y); } } // EOF