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 }