Skip to content

Commit 20df5dd

Browse files
committed
wip: initial implementation of vector class
1 parent 5c4aed2 commit 20df5dd

File tree

3 files changed

+129
-0
lines changed

3 files changed

+129
-0
lines changed
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
/*
2+
* Copyright (c) 2020-2021 DumbDogDiner <dumbdogdiner.com>. All rights reserved.
3+
* Licensed under the MIT license, see LICENSE for more information...
4+
*/
5+
package com.dumbdogdiner.stickyapi.math.transform;
6+
7+
public class Matrix {
8+
}
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
/*
2+
* Copyright (c) 2020-2021 DumbDogDiner <dumbdogdiner.com>. All rights reserved.
3+
* Licensed under the MIT license, see LICENSE for more information...
4+
*/
5+
package com.dumbdogdiner.stickyapi.math.vector;
6+
7+
import com.sun.net.httpserver.HttpServer;
8+
9+
/**
10+
* Base abstract class for an immutable vector.
11+
* @param <T>
12+
*/
13+
abstract class Vector<T> {
14+
/**
15+
* @return The number of dimensions this vector has.
16+
*/
17+
abstract int getDimensions();
18+
19+
abstract Vector<T> add(Vector<T> vector);
20+
21+
abstract Vector<T> subtract(Vector<T> vector);
22+
23+
/**
24+
* Return the vector from this vector to the target vector.
25+
* @param vector The target vector
26+
* @return The vector from this vector to the target vector.
27+
*/
28+
Vector<T> to(Vector<T> vector) {
29+
return vector.subtract(vector);
30+
};
31+
32+
/**
33+
* Scale this vector by the given scalar.
34+
* @param scalar The scalar to scale by
35+
* @return The scaled vector.
36+
*/
37+
abstract Vector<T> scale(Number scalar);
38+
39+
/**
40+
* @return The magnitude of this vector.
41+
*/
42+
abstract double abs();
43+
44+
/**
45+
* @return A unit vector of this vector.
46+
*/
47+
Vector<T> normalize() {
48+
return this.scale(this.abs());
49+
}
50+
51+
/**
52+
* Compute the dot product of two vectors.
53+
* @param vec The other vectors
54+
* @return The dot product of the two vectors.
55+
*/
56+
abstract double dot(T vec);
57+
}
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
/*
2+
* Copyright (c) 2020-2021 DumbDogDiner <dumbdogdiner.com>. All rights reserved.
3+
* Licensed under the MIT license, see LICENSE for more information...
4+
*/
5+
package com.dumbdogdiner.stickyapi.math.vector;
6+
7+
import lombok.Getter;
8+
9+
/**
10+
* Represents a two dimensional vector.
11+
*/
12+
public class Vector2 extends Vector<Vector2> {
13+
/**
14+
* The x value of this vector.
15+
*/
16+
@Getter
17+
private double x;
18+
19+
/**
20+
* The y value of this vector.
21+
*/
22+
@Getter
23+
private double y;
24+
25+
/**
26+
* Construct a new 2D vector.
27+
* @param x The x value
28+
* @param y The y value
29+
*/
30+
public Vector2(double x, double y) {
31+
this.x = x;
32+
this.y = y;
33+
}
34+
35+
@Override
36+
int getDimensions() {
37+
return 2;
38+
}
39+
40+
@Override
41+
Vector<Vector2> add(Vector<Vector2> vector) {
42+
return new Vector2(this.x + vector.x, this.y + vector.y);
43+
}
44+
45+
@Override
46+
Vector<Vector2> subtract(Vector<Vector2> vector) {
47+
return null;
48+
}
49+
50+
@Override
51+
Vector2 scale(Number scalar) {
52+
return new Vector2(this.x * scalar.doubleValue(), this.y * scalar.doubleValue());
53+
}
54+
55+
@Override
56+
double abs() {
57+
return Math.sqrt(Math.pow(this.x, 2) + Math.pow(this.y, 2));
58+
}
59+
60+
@Override
61+
double dot(Vector2 vec) {
62+
return this.x * vec.x + this.y * vec.y;
63+
}
64+
}

0 commit comments

Comments
 (0)