package com.interview.basics.model.geometry;
/**
* Created_By: stefanie
* Date: 15-1-4
* Time: 下午6:21
*/
public class Vector {
float[] fields;
public Vector(float[] vector){
this.fields = vector;
}
public Vector(float[] pointA, float[] pointB){
fields = new float[pointA.length];
for(int i = 0; i < pointA.length; i++) fields[i] = pointB[i] - pointA[i];
}
public float length(){
float sum = 0;
for(int i = 0; i < fields.length; i++) sum += fields[i] * fields[i];
return (float) Math.sqrt(sum);
}
public Vector plus(Vector v1){
float[] vector = new float[fields.length];
for(int i = 0; i < fields.length; i++) vector[i] = fields[i] + v1.fields[i];
return new Vector(vector);
}
public Vector minus(Vector v1){
float[] vector = new float[fields.length];
for(int i = 0; i < fields.length; i++) vector[i] = fields[i] - v1.fields[i];
return new Vector(vector);
}
public float dot(Vector v1){
float dot = 0;
for(int i = 0; i < fields.length; i++) dot += fields[i] * v1.fields[i];
return dot;
}
public float cosine(Vector v1){
float dot = dot(v1);
return dot / (this.length() * v1.length());
}
/**
* Implement only for 2D
*/
public float cross(Vector v1){
return fields[0] * v1.fields[1] - fields[1] * v1.fields[0];
}
//x' = x Cos(θ) - y Sin(θ) and y' = x Sin(θ) + y Cos(θ)
public Vector rotate(int degree){
double radians = Math.toRadians(degree);
double cos = Math.cos(radians);
double sin = Math.sin(radians);
float[] vector = new float[2];
vector[0] = (float) (fields[0] * cos - fields[1] * sin);
vector[1] = (float) (fields[0] * sin - fields[1] * cos);
return new Vector(vector);
}
}