momenteel geen errors, begonnen nieuwe items toe te voegen op ui

This commit is contained in:
BuildTools
2020-07-26 20:28:32 +02:00
parent 2cea96e863
commit b2ad2d4611
22 changed files with 312 additions and 34 deletions

View File

@@ -41,7 +41,7 @@
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="Class1.cs" />
<Compile Include="PolygonManipulatie.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup>
<ItemGroup>

View File

@@ -16,28 +16,67 @@ namespace Logica
JsonReader = jsonReader;
}
public List<PolygonPunten> getPolygons()
public List<PolygonPunten> GetPolygons()
{
return JsonReader._polygons;
}
public List<MultiPolygonPunten> getMultiPolygons()
public List<MultiPolygonPunten> GetMultiPolygons()
{
return JsonReader._multiPolygons;
}
public List<PolygonPunten> getAllPolygons()
public PolygonPunten GetPolygonByName(string naam)
{
return JsonReader._polygons.Find(punten => punten.Naam == naam);
}
public List<PolygonPunten> GetTrianglesPolygon(PolygonPunten polygon, double scaleX
= 1, double scaleY = 1, double epsilonPercet = 0)
{
double grootsteAfstandX = Math.Abs(polygon.MaximumX - polygon.MinimumX);
double grootsteAfstandY = Math.Abs(polygon.MaximumY - polygon.MinimumY);
double epsilon = ((grootsteAfstandX + grootsteAfstandY) / 2) * epsilonPercet;
polygon.Punten = Peuker(polygon.Punten, epsilon);
polygon = ScalePolygon(polygon, scaleX, scaleY);
return TriangulatePolygon(polygon);
}
private PolygonPunten ScalePolygon(PolygonPunten polygon, double scaleX, double scaleY)
{
double maxX = polygon.MaximumX;
double maxY = polygon.MaximumY;
double minX = polygon.MinimumX;
double minY = polygon.MinimumY;
maxX -= minX;
maxY -= minY;
List<Punt> returnWaarde = new List<Punt>();
foreach (Punt punt in polygon.Punten)
{
double x = punt.X - minX;
x /= maxX;
x *= scaleX;
double y = punt.Y - minY;
y /= maxY;
y *= scaleY;
returnWaarde.Add(new Punt(x, y, punt.Naam));
}
return new PolygonPunten(returnWaarde, polygon.Naam);
}
public List<PolygonPunten> GetAllPolygons()
{
List<PolygonPunten> lijst = new List<PolygonPunten>();
lijst.AddRange(getPolygons());
foreach (MultiPolygonPunten multiPolygonPunten in getMultiPolygons())
lijst.AddRange(GetPolygons());
foreach (MultiPolygonPunten multiPolygonPunten in GetMultiPolygons())
{
lijst.AddRange(multiPolygonPunten.PolygonPunten);
}
return lijst;
}
public List<PolygonPunten> triangulatePolygon(List<Punt> punten)
public List<PolygonPunten> TriangulatePolygon(List<Punt> punten)
{
List<PolygonPunten> returnWaarde = new List<PolygonPunten>();
int i = 0;
@@ -45,7 +84,6 @@ namespace Logica
int BACKBACKUP = punten.Count;
while (true)
{
if (i >= punten.Count)
{
i = 0;
@@ -56,13 +94,11 @@ namespace Logica
BACKBACKUP = punten.Count;
}
int punt1Index = i;
int punt2Index = i + 1;
if (punt2Index >= punten.Count) punt2Index -= punten.Count;
int punt3Index = i + 2;
if (punt3Index >= punten.Count) punt3Index -= punten.Count;
if (punten.Count < 3)
{
break;
@@ -71,20 +107,14 @@ namespace Logica
if (hoek < 180)
{
returnWaarde.Add(MaakNieuweDriehoek(punten[punt2Index], punten[punt3Index],
punten[punt1Index]));
punten[punt1Index], punten[punt1Index].Naam));
punten.RemoveAt(punt2Index);
Debug.WriteLine("added a triangle, polygonLijst count " + punten.Count);
i = punt1Index;
BACKUP = 0;
continue;
}
Debug.WriteLine(hoek);
i++;
if (BACKUP >= punten.Count)
{
@@ -92,10 +122,61 @@ namespace Logica
break;
}
}
return returnWaarde;
}
public List<PolygonPunten> TriangulatePolygon(PolygonPunten polygon)
{
List<Punt> punten = polygon.Punten;
List<PolygonPunten> returnWaarde = new List<PolygonPunten>();
int i = 0;
int BACKUP = 0;
int BACKBACKUP = punten.Count;
while (true)
{
if (i >= punten.Count)
{
i = 0;
if (punten.Count == BACKBACKUP)
{
BACKUP++;
}
BACKBACKUP = punten.Count;
}
int punt1Index = i;
int punt2Index = i + 1;
if (punt2Index >= punten.Count) punt2Index -= punten.Count;
int punt3Index = i + 2;
if (punt3Index >= punten.Count) punt3Index -= punten.Count;
if (punten.Count < 3)
{
break;
}
double hoek = VindHoek(punten[punt2Index], punten[punt1Index], punten[punt3Index]);
if (hoek < 180)
{
returnWaarde.Add(MaakNieuweDriehoek(punten[punt2Index], punten[punt3Index],
punten[punt1Index], punten[punt1Index].Naam));
punten.RemoveAt(punt2Index);
Debug.WriteLine("added a triangle, polygonLijst count " + punten.Count);
i = punt1Index;
BACKUP = 0;
continue;
}
Debug.WriteLine(hoek);
i++;
if (BACKUP >= punten.Count)
{
Debug.WriteLine("FUCK, couldnt parse " + punten.Count + " points");
break;
}
}
return returnWaarde;
}
private PolygonPunten MaakNieuweDriehoek(Punt punt, Punt punt1, Punt punt2, string naam = "")
{
return new PolygonPunten(new List<Punt>() { punt, punt1, punt2 }, naam);
@@ -111,7 +192,7 @@ namespace Logica
return hoek;
}
private List<Punt> peuker(List<Punt> punten, double epsilon)
private List<Punt> Peuker(List<Punt> punten, double epsilon)
{
double dmax = -1;
int index = 0;
@@ -132,8 +213,8 @@ namespace Logica
if (dmax > epsilon)
{
List<Punt> recResults1 = peuker(punten.GetRange(0, index), epsilon);
List<Punt> recResults2 = peuker(punten.GetRange(index, end - 1 - index), epsilon);
List<Punt> recResults1 = Peuker(punten.GetRange(0, index), epsilon);
List<Punt> recResults2 = Peuker(punten.GetRange(index, end - 1 - index), epsilon);
returnWaarde.AddRange(recResults1);