added Algorithms/SierpinskiTriangle.cs

This commit is contained in:
didier amyot committed 2023-08-28 09:30:26 -04:00
1 parent 6acd8c8ff1
commit a832521bda
7 files changed
+137 -4

No files matched your search

+3 -1
View File
@@ -3,6 +3,8 @@
"editor.fontSize": 22, "editor.fontSize": 22,
"window.zoomLevel": 1, "window.zoomLevel": 1,
"terminal.integrated.fontSize": 22, "terminal.integrated.fontSize": 22,
"workbench.tree.indent": 23 "workbench.tree.indent": 23,
"debug.console.fontSize": 22,
} }
+32
View File
@@ -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);
}
}
@@ -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());
}
}
+34
View File
@@ -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));
}
}
+12 -1
View File
@@ -1,6 +1,6 @@
namespace Algorithms; namespace Algorithms;
using System; using System;
class Point public class Point
{ {
private double x; private double x;
private double y; private double y;
@@ -26,6 +26,13 @@ class Point
return Math.Sqrt(X() * X() + Y() * Y()); 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) public Point MidPointOf(Point other)
{ {
double midX = (X() + other.X()) / 2; double midX = (X() + other.X()) / 2;
@@ -33,4 +40,8 @@ class Point
return new Point(midX, midY); return new Point(midX, midY);
} }
public override string ToString(){
return "{\"x\": " + this.x + ", \"y\": " + this.y + "}";
}
} }
+22
View File
@@ -0,0 +1,22 @@
namespace Algorithms;
public class SierpinskiTriangle{
private readonly Random random;
public SierpinskiTriangle(Random random){
this.random = random;
}
public List<Point> GenerateRandomPath(Point point, int length){
List<Point> path = new List<Point>();
Triangle triangle = Triangle.Equilateral(10);
for(int i = 0; i < length; i++){
path.Add(point);
point = point.MidPointOf(triangle.RandomSummit(random));
}
return path;
}
}
+20 -2
View File
@@ -1,5 +1,5 @@
namespace Algorithms; namespace Algorithms;
internal class Triangle public class Triangle
{ {
@@ -7,7 +7,25 @@ internal class Triangle
private Point sommet2; private Point sommet2;
private Point sommet3; 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) public Triangle(Point sommet1,Point sommet2,Point sommet3)
{ {