001    package org.util;
002    
003    import java.util.*;
004    import java.io.*;
005    import java.net.*;
006    import java.awt.*;
007    import java.awt.event.*;
008    import javax.swing.*;
009    import javax.swing.event.*;
010    
011    public class Vector {
012    
013            private double angle_rad_;
014            private double distance_;
015    
016            /**
017             * 
018             */
019            public Vector(double angle_rad, double distance) {
020                    raddis(angle_rad, distance);
021            }
022    
023            public Vector(int angle_degree, double distance) {
024                    degdis(angle_degree, distance);
025            }
026    
027            private void raddis(double angle_rad, double distance) {
028                    rad(angle_rad);
029                    dis(distance);
030            }
031            private void degdis(int angle_deg, double distance) {
032                    deg(angle_deg);
033                    dis(distance);
034            }
035            
036            public double deg() {
037                    return rad2deg(angle_rad_);
038            }
039            public void deg(double angle_deg) {
040                    rad(deg2rad(angle_deg));
041            }
042            public double rad() {
043                    return angle_rad_;
044            }
045            public void rad(double angle) {
046                    angle_rad_ = roundRad(angle);
047            }
048            public double dis() {
049                    return distance_;
050            }
051            public void dis(double distance) {
052                    distance_ = distance;
053            }
054            
055            public Vector add(Vector vector) {
056                    double x = calcX() + vector.calcX();
057                    double y = calcY() + vector.calcY();
058                    return new Vector(Math.atan2(y, x), Math.sqrt(x*x+y*y));
059            }
060            public Vector sub(Vector vector) {
061                    double x = calcX() - vector.calcX();
062                    double y = calcY() - vector.calcY();
063                    return new Vector(Math.atan2(y, x), Math.sqrt(x*x+y*y));
064            }
065            public Vector multi(double scalar) {
066                    return new Vector((double)angle_rad_, scalar*distance_);
067            }
068            public double multi(Vector vector) {
069                    return distance_*vector.rad()*Math.cos(angle_rad_ - vector.rad());
070            }
071            public Vector normalize() {
072                    return new Vector((double)angle_rad_, 1.0);
073            }
074            public Vector normalize(double distance) {
075                    return new Vector((double)angle_rad_, distance);
076            }
077    /*
078            public double calcDistanceFrom(Vector v) {
079            }
080    */
081            public double calcX() {
082                    return distance_ * Math.cos(angle_rad_);
083            }
084            public double calcY() {
085                    return distance_ * Math.sin(angle_rad_);
086            }
087            public static double deg2rad(double deg) {
088                    return deg*Math.PI/180;
089            }
090            public static double rad2deg(double rad) {
091                    return rad*180/Math.PI;
092            }
093            public static double roundRad(double rad) {
094                    while(rad>Math.PI) rad -= 2*Math.PI;
095                    while(rad<-Math.PI) rad += 2*Math.PI;
096                    return rad;
097            }
098    }