package de.bigdev;
public class Vector {
private double x;
private double y;
public Vector(double x, double y) {
super();
this.x = x;
this.y = y;
}
/**
* Addition of two vectors
*
* @param v
* @return the sum with v
*/
public Vector add(Vector v) {
return new Vector(x + v.x, y + v.y);
}
/**
* Scalar Mulitplication with a constant
*
* @param c
* @return the scalar multiplication with c
*/
public Vector scalarMult(double c) {
return new Vector(c * x, c * y);
}
/**
* Length of two vectors
*
* @return length
*/
public double length() {
return Math.sqrt(x * x + y * y);
}
/**
* Scalar Product of two vectors
*
* @param v
* @return the scalar product with v
*/
public double scalarProd(Vector v) {
return this.x * v.getX() + this.y * v.getY();
}
/**
* Angle between two vectors
*
* @param v
* @return the angle with v in degrees
*/
public double angle(Vector v) {
return Math.acos(this.scalarProd(v) / (this.length() * v.length()))
* 180.0 / Math.PI;
}
public double getX() { return x; }
public double getY() { return y; }
@Override
public String toString() {
return "[" + x + ", " + y + "]";
}
/**
* for testing only. should be factored out into another class... or use
* JUnit!
*
* @param args
*/
public static void main(String[] args) {
Vector v = new Vector(1, 1);
Vector w = new Vector(-1, -1);
System.out.println("Vector algebra");
System.out.println("==============");
System.out.println("addition : " + v + " + " + w + " = " + v.add(w));
System.out.println("scalar multip.: 2 * " + v + " = " + v.scalarMult(2));
System.out.println("length : ||" +v + "|| = " + v.length());
System.out.println("scalar product: " + v + " * " + w + " = " + v.scalarProd(w));
System.out.println("angle : angle(" + v + ", " + w
+ ") = " + Math.round(v.angle(w)) + "°");
}
}
The output on the console is
Vector algebra
==============
addition : [1.0, 1.0] + [-1.0, -1.0] = [0.0, 0.0]
scalar multip.: 2 * [1.0, 1.0] = [2.0, 2.0]
length : ||[1.0, 1.0]|| = 1.4142135623730951
scalar product: [1.0, 1.0] * [-1.0, -1.0] = -2.0
angle : angle([1.0, 1.0], [-1.0, -1.0]) = 180°
No comments:
Post a Comment