diff --git a/src/main/java/org/example/chaosgame/linalg/Complex.java b/src/main/java/org/example/chaosgame/linalg/Complex.java index afe55243d048fa0c00ce4b3377bf9ff82a8c5f1d..fd20f0d623d7c913fdaadbb913dba862de36fc2c 100644 --- a/src/main/java/org/example/chaosgame/linalg/Complex.java +++ b/src/main/java/org/example/chaosgame/linalg/Complex.java @@ -1,4 +1,16 @@ package org.example.chaosgame.linalg; -public class Complex { +public class Complex extends Vector2D { + public Complex(double x, double y) { + super(x, y); + } + + public Complex sqrt(double cRe, double cIm) { + double a = Math.pow(cRe, 2) + Math.pow(cIm, 2); + + double r = Math.sqrt(0.5 * (Math.sqrt(a) + cRe)); + double i = Math.signum(cIm) * Math.sqrt(0.5 * (Math.sqrt(a) - cRe)); + + return new Complex(r, i); + } } diff --git a/src/main/java/org/example/chaosgame/linalg/Matrix2x2.java b/src/main/java/org/example/chaosgame/linalg/Matrix2x2.java index a456bc89acf51ecb3737694362464e3d6be8f102..45da65cf8fab01275ec9cb69128f5562b3796c13 100644 --- a/src/main/java/org/example/chaosgame/linalg/Matrix2x2.java +++ b/src/main/java/org/example/chaosgame/linalg/Matrix2x2.java @@ -1,4 +1,36 @@ package org.example.chaosgame.linalg; public class Matrix2x2 { + private final double a, b, c, d; + + public Matrix2x2(double a, double b, double c, double d) { + this.a = a; + this.b = b; + this.c = c; + this.d = d; + } + + public double getA() { + return a; + } + + public double getB() { + return b; + } + + public double getC() { + return c; + } + + public double getD() { + return d; + } + + + public Vector2D multiply(Vector2D vector) { + return new Vector2D( + a * vector.getX() + b * vector.getY(), + c * vector.getX() + d * vector.getY() + ); + } } diff --git a/src/main/java/org/example/chaosgame/linalg/Vector2D.java b/src/main/java/org/example/chaosgame/linalg/Vector2D.java index d1d2dabc24bf04b0799b8febe0732d621e9ce42e..8a0c03db238a9241b6f55ebe34c794e3d041c9be 100644 --- a/src/main/java/org/example/chaosgame/linalg/Vector2D.java +++ b/src/main/java/org/example/chaosgame/linalg/Vector2D.java @@ -1,4 +1,29 @@ package org.example.chaosgame.linalg; public class Vector2D { + private final double x; + private final double y; + + public Vector2D(double x, double y) { + this.x = x; + this.y = y; + } + + public double getX() { + return x; + } + + public double getY() { + return y; + } + + public Vector2D add(Vector2D other) { + return new Vector2D(x + other.x, y + other.y); + } + + public Vector2D subtract(Vector2D other) { + return new Vector2D(x - other.x, y - other.y); + } + + } diff --git a/src/main/java/org/example/chaosgame/transformations/AffineTransform2D.java b/src/main/java/org/example/chaosgame/transformations/AffineTransform2D.java index 362e91100d471c80541539b5bcf26b1ed6073fc1..19a91cad6260d0124763afa0c154f7e4c8d29fa8 100644 --- a/src/main/java/org/example/chaosgame/transformations/AffineTransform2D.java +++ b/src/main/java/org/example/chaosgame/transformations/AffineTransform2D.java @@ -1,4 +1,4 @@ package org.example.chaosgame.transformations; -public class AffineTransform2D { +public class AffineTransform2D implements Transform2D{ } diff --git a/src/main/java/org/example/chaosgame/transformations/JuliaTransform.java b/src/main/java/org/example/chaosgame/transformations/JuliaTransform.java index 035ea113d8f404ce56748c04c655bcec542a036b..3a2be6006bb8460a15782f30319c7a4ab8838667 100644 --- a/src/main/java/org/example/chaosgame/transformations/JuliaTransform.java +++ b/src/main/java/org/example/chaosgame/transformations/JuliaTransform.java @@ -1,4 +1,4 @@ package org.example.chaosgame.transformations; -public class JuliaTransform { +public class JuliaTransform implements Transform2D{ } diff --git a/src/main/java/org/example/chaosgame/transformations/Transform2D.java b/src/main/java/org/example/chaosgame/transformations/Transform2D.java index a94afeed1eba42f9448384e1688f3e5bbb18c998..ba92e3e6983170ebda89b1d91b60a36d554f9da0 100644 --- a/src/main/java/org/example/chaosgame/transformations/Transform2D.java +++ b/src/main/java/org/example/chaosgame/transformations/Transform2D.java @@ -1,4 +1,4 @@ package org.example.chaosgame.transformations; -public class Transform2D { +public interface Transform2D{ } diff --git a/src/test/java/org/example/chaosgame/linalg/ComplexTest.java b/src/test/java/org/example/chaosgame/linalg/ComplexTest.java new file mode 100644 index 0000000000000000000000000000000000000000..afd84af05899117f04b10d757ea1baa3bb0e71bd --- /dev/null +++ b/src/test/java/org/example/chaosgame/linalg/ComplexTest.java @@ -0,0 +1,23 @@ +package org.example.chaosgame.linalg; + +import org.junit.jupiter.api.Test; + +import java.text.DecimalFormat; + + +import static org.junit.jupiter.api.Assertions.*; + +class ComplexTest { + private final double x = 0.1; + private final double y = -0.4; + + Complex complex = new Complex(x, y); + + @Test + void sqrt() { + Complex z = complex.sqrt(x, y); + assertEquals(0.5061178531536732, z.getX()); + assertEquals(-0.3951648786024424, z.getY()); + + } +} \ No newline at end of file diff --git a/src/test/java/org/example/chaosgame/linalg/Matrix2x2Test.java b/src/test/java/org/example/chaosgame/linalg/Matrix2x2Test.java new file mode 100644 index 0000000000000000000000000000000000000000..0a14ed6aaa387d2cd4ea095c07ae827b2d829381 --- /dev/null +++ b/src/test/java/org/example/chaosgame/linalg/Matrix2x2Test.java @@ -0,0 +1,37 @@ +package org.example.chaosgame.linalg; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; + +class Matrix2x2Test { + private final double a = 1.0; + private final double b = 2.0; + private final double c = 3.0; + private final double d = 4.0; + Matrix2x2 matrix = new Matrix2x2(a, b, c, d); + Vector2D vector = new Vector2D(1.0, 2.0); + + @Test + void getA() { + } + + @Test + void getB() { + } + + @Test + void getC() { + } + + @Test + void getD() { + } + + @Test + void multiply() { + Vector2D w = matrix.multiply(vector); + assertEquals(5.0, w.getX()); + assertEquals(11.0, w.getY()); + } +} \ No newline at end of file diff --git a/src/test/java/org/example/chaosgame/linalg/Vector2DTest.java b/src/test/java/org/example/chaosgame/linalg/Vector2DTest.java new file mode 100644 index 0000000000000000000000000000000000000000..9dba323589201c0567cf547e68f7ec50f4ab2c0c --- /dev/null +++ b/src/test/java/org/example/chaosgame/linalg/Vector2DTest.java @@ -0,0 +1,38 @@ +package org.example.chaosgame.linalg; + +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; + +class Vector2DTest { + private final double x = 1.0; + private final double y = 2.0; + Vector2D vector = new Vector2D(x, y); + + + @Test + void getX() { + assertEquals(1.0, vector.getX()); + } + + @Test + void getY() { + assertEquals(2.0, vector.getY()); + } + + @Test + void add() { + Vector2D w = vector.add(new Vector2D(1.0, 1.0)); + assertEquals(2.0, w.getX()); + assertEquals(3.0, w.getY()); + } + + @Test + void subtract() { + Vector2D w = vector.subtract(new Vector2D(1.0, 1.0)); + assertEquals(0.0, w.getX()); + assertEquals(1.0, w.getY()); + } +} \ No newline at end of file