package de.bigdev
class Vector(val x: Double, val y: Double) {
/**
* Addition of two vectors
*
* @param v
* @return the sum with v
*/
def +(v: Vector) = new Vector(x + v.x, y + v.y)
/**
* Scalar Mulitplication with a constant
*
* @param c
* @return the scalar multiplication with c
*/
def *(c: Double) = new Vector(c * x, c * y)
/**
* Length of two vectors
*
* @return length
*/
def length = math.sqrt(x * x + y * y)
/**
* Scalar Product of two vectors
*
* @param v
* @return the scalar product with v
*/
def *(v: Vector) = x * v.x + y * v.y
/**
* Angle between two vectors
*
* @param v
* @return the angle with v in degrees
*/
def angle(v: Vector) = math.acos(this * v / (this.length * v.length)) *
180.0 / Math.PI
override def toString = "[" + x + "," + y + "]"
}
For execution we need a main method (pay attention to the usage of *, + and angle):
package de.bigdev
object VectorTest {
/**
* for testing only... or use ScalaTest!
*/
def main(args: Array[String]) {
val v = new Vector(1, 1)
val w = new Vector(-1, -1)
println("Vector algebra")
println("==============")
println("addition : " + v + " + " + w + " = " + (v + w))
println("scalar multip.: 2 * " + v + " = " + v * 2)
println("length : ||" +v + "|| = " + v.length)
println("scalar product: " + v + " * " + w + " = " + v * w)
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