added Algorithms/SierpinskiTriangle.cs
This commit is contained in:
1 parent
6acd8c8ff1
commit
a832521bda
7 files changed
+136
-3
No files matched your search
Vendored
+3
-1
@@ -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,
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -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());
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -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
@@ -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 + "}";
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -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;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
+19
-1
@@ -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)
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in new issue
Block a user