diff --git a/.vscode/settings.json b/.vscode/settings.json index 47cf5cd..1e70228 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -3,6 +3,8 @@ "editor.fontSize": 22, "window.zoomLevel": 1, "terminal.integrated.fontSize": 22, - "workbench.tree.indent": 23 + "workbench.tree.indent": 23, + "debug.console.fontSize": 22, + } \ No newline at end of file diff --git a/Algorithms.Tests/PointTest.cs b/Algorithms.Tests/PointTest.cs new file mode 100644 index 0000000..a406121 --- /dev/null +++ b/Algorithms.Tests/PointTest.cs @@ -0,0 +1,32 @@ +namespace Algorithms.Tests; +using Algorithms; + +[TestClass] +public class PointTest +{ + [TestMethod] + public void TestToString() + { + Point point = new Point(0, 1); + Assert.AreEqual("{\"x\": 0, \"y\": 1}", point.ToString()); + } + + [TestMethod] + public void TestMidPointOf(){ + Point point1 = new Point(2, 6); + Point point2 = new Point(5, 3); + Point res = point1.MidPointOf(point2); + + Assert.AreEqual(3.5, res.X(), 0.001); + Assert.AreEqual(4.5, res.Y(), 0.001); + } + + + [TestMethod] + public void TestDistance(){ + Point point1 = new Point(2, 6); + Point point2 = new Point(5, 3); + Assert.AreEqual(4.24264, point1.Distance(point2), 0.001); + + } +} \ No newline at end of file diff --git a/Algorithms.Tests/SierpinskiTriangleTest.cs b/Algorithms.Tests/SierpinskiTriangleTest.cs new file mode 100644 index 0000000..7a6480c --- /dev/null +++ b/Algorithms.Tests/SierpinskiTriangleTest.cs @@ -0,0 +1,14 @@ +namespace Algorithms.Tests; +using Algorithms; + +[TestClass] +public class SierpinskiTriangleTest +{ + [TestMethod] + public void TestGeneration() + { + SierpinskiTriangle st = new SierpinskiTriangle(new Random(666)); + Assert.AreEqual(10, st.GenerateRandomPath(new Point(2, 3), 10).Count()); + } + +} \ No newline at end of file diff --git a/Algorithms.Tests/TriangleTest.cs b/Algorithms.Tests/TriangleTest.cs new file mode 100644 index 0000000..d4535e3 --- /dev/null +++ b/Algorithms.Tests/TriangleTest.cs @@ -0,0 +1,34 @@ +namespace Algorithms.Tests; +using Algorithms; + +[TestClass] +public class TriangleTest +{ + [TestMethod] + public void TestEquilateral() + { + Triangle triangle = Triangle.Equilateral(10); + Assert.AreEqual(10, triangle.Vertex1.Distance(triangle.Vertex2), 0.001); + Assert.AreEqual(10, triangle.Vertex2.Distance(triangle.Vertex3), 0.001); + Assert.AreEqual(10, triangle.Vertex3.Distance(triangle.Vertex1), 0.001); + } + + [TestMethod] + public void TestGetVertexById(){ + Triangle triangle = Triangle.Equilateral(10); + Assert.AreEqual(triangle.Vertex1, triangle.GetVertexById(0)); + Assert.AreEqual(triangle.Vertex2, triangle.GetVertexById(1)); + Assert.AreEqual(triangle.Vertex3, triangle.GetVertexById(2)); + + } + + [TestMethod] + public void TestRandomSummit(){ + Triangle triangle = Triangle.Equilateral(10); + Random random = new Random(666); + + Assert.AreEqual(triangle.Vertex2, triangle.RandomSummit(random)); + Assert.AreEqual(triangle.Vertex1, triangle.RandomSummit(random)); + } + +} \ No newline at end of file diff --git a/Algorithms/Point.cs b/Algorithms/Point.cs index b9d67a6..53e4584 100644 --- a/Algorithms/Point.cs +++ b/Algorithms/Point.cs @@ -1,6 +1,6 @@ namespace Algorithms; using System; -class Point +public class Point { private double x; private double y; @@ -26,6 +26,13 @@ class Point return Math.Sqrt(X() * X() + Y() * Y()); } + public double Distance(Point other) + { + double xDiff = X() - other.X(); + double yDiff = Y() - other.Y(); + return Math.Sqrt(xDiff * xDiff + yDiff*yDiff); + } + public Point MidPointOf(Point other) { double midX = (X() + other.X()) / 2; @@ -33,4 +40,8 @@ class Point return new Point(midX, midY); } + public override string ToString(){ + return "{\"x\": " + this.x + ", \"y\": " + this.y + "}"; + } + } \ No newline at end of file diff --git a/Algorithms/SierpinskiTriangle.cs b/Algorithms/SierpinskiTriangle.cs new file mode 100644 index 0000000..6a6147f --- /dev/null +++ b/Algorithms/SierpinskiTriangle.cs @@ -0,0 +1,22 @@ +namespace Algorithms; + +public class SierpinskiTriangle{ + private readonly Random random; + + public SierpinskiTriangle(Random random){ + this.random = random; + } + + public List GenerateRandomPath(Point point, int length){ + List path = new List(); + Triangle triangle = Triangle.Equilateral(10); + for(int i = 0; i < length; i++){ + path.Add(point); + point = point.MidPointOf(triangle.RandomSummit(random)); + } + + return path; + } + + +} \ No newline at end of file diff --git a/Algorithms/Triangle.cs b/Algorithms/Triangle.cs index c6a5c32..920454e 100644 --- a/Algorithms/Triangle.cs +++ b/Algorithms/Triangle.cs @@ -1,5 +1,5 @@ namespace Algorithms; -internal class Triangle +public class Triangle { @@ -7,7 +7,25 @@ internal class Triangle private Point sommet2; private Point sommet3; - + public Point Vertex1 { get {return sommet1;}} + public Point Vertex2 { get {return sommet2;}} + public Point Vertex3 { get {return sommet3;}} + + public Point GetVertexById(int id){ + if(id == 0){ + return Vertex1; + } + if(id == 1){ + return Vertex2; + } + return Vertex3; + } + + + public Point RandomSummit(Random random){ + int id = random.Next(3); + return GetVertexById(id); + } public Triangle(Point sommet1,Point sommet2,Point sommet3) {