[wadalabfont-kit] / java / Point.java  

Annotation of /java/Point.java

Parent Directory | Revision Log

Revision: 1.1 - (view) (download) (as text)

1 : ktanaka 1.1 //
2 :     //
3 :     //
4 :     // $B:BI87O$,2hLL:BI87O(B($B:8>e$,(B(0,0))$B$G$"$k$3$H$KCm0U$9$k(B
5 :     //
6 :     public final class Point {
7 :     double x,y;
8 :     // 10^-5$B0J2<$O(B0$B$H8+$J$9!%(B
9 :     static final double EPS=10e-5;
10 :     Point(double x,double y){ this.x=x; this.y=y; }
11 :     public double getX() { return x;}
12 :     public double getY() { return y;}
13 :     public String toString(){
14 :     return "Point("+x+","+y+")";
15 :     }
16 :     public double length(){
17 :     return Math.sqrt(x*x+y*y);
18 :     }
19 :     public double distance(Point p){
20 :     double dx=x-p.getX(),dy=y-p.getY();
21 :     return Math.sqrt(dx*dx+dy*dy);
22 :     }
23 :     public Point plus(Point p){
24 :     return new Point(x+p.getX(),y+p.getY());
25 :     }
26 :     public Point minus(Point p){
27 :     return new Point(x-p.getX(),y-p.getY());
28 :     }
29 :     public Point times(double r){
30 :     return new Point(x*r,y*r);
31 :     }
32 :     // $B%Y%/%?!<$ND9$5$r(B newLength$B$K@55,2=$9$k!%(B
33 :     public Point normal(double newLength){
34 :     double ratio=newLength/length();
35 :     return new Point(x*ratio,y*ratio);
36 :     }
37 :     // 2$B$D$NE@$NJ,3dE@$rJV$9!%(B
38 :     // ratio$B$,(B0$B$N;~$O85$NE@!%(B1$B$N;~$OAj<j$NE@(B
39 :     public Point inter(Point p,double ratio){
40 :     return times(1-ratio).plus(p.times(ratio));
41 :     }
42 :     // $B%Y%/%H%k$N(B90$BEY2sE>(B
43 :     public Point rot90(){
44 :     return new Point(y,-x);
45 :     }
46 :     // $B%Y%/%H%k$N(B270$BEY2sE>(B
47 :     public Point rot270(){
48 :     return new Point(-y,x);
49 :     }
50 :     // $B<+J,$H%Y%/%?!<(Bp$B$NFb@Q(B(inner product)
51 :     public double product(Point p){
52 :     return x*p.x+y*p.y;
53 :     }
54 :     // $B<+J,$+$i%Y%/%?!<(Bp$B$r8+$?3QEY$N(B cos
55 :     public double cosTheta(Point p){
56 :     return product(p)/(p.length()*length());
57 :     }
58 :     // $B<+J,$+$i%Y%/%?!<(Bp$B$r8+$?3QEY$N(B sin
59 :     public double cosTheta(Point p){
60 :     return rot270().cosTheta(p);
61 :     }
62 :     // $B<+J,$+$i%Y%/%?!<(B p $B$r8+$?3QEY(B
63 :     public double theta(Point p){
64 :     return Math.atan2(sinTheta(p),cosTheta(p));
65 :     }
66 :     // $BD>@~(B p0-p1, p2-p3 $B$N8rE@(B
67 :     // x = p0.x+t*(p1.x-p0.x) = p2.x+s*(p3.x-p2.x)
68 :     // y = p0.y+t*(p1.y-p0.y) = p2.y+s*(p3.y-p2.y)
69 :     public static Point cross(Point p0,Point p1,Point p2,Point p3){
70 :     double dy10=p1.y-p0.y,dx10=p1.x-p0.x;
71 :     double d=dy10*(p3.x-p2.x)-dx10*(p3.y-p2.y);
72 :     // $B9TNs<0$,>.$5$$$H$-$O(B null $B$rJV$9!%(B
73 :     if(Math.abs(d)<EPS) return null;
74 :     double s=(dy10*(p0.x-p2.x)-dx10*(p0.y-p2.y))/d;
75 :     return p2.inter(p3,s);
76 :     }
77 :     }
78 :    

ktanaka

Powered by ViewCVS 1.0-dev

ViewCVS and CVS Help