mirror of
https://github.com/bvanroll/cs-map-project.git
synced 2025-08-29 20:02:43 +00:00
momenteel geen errors, begonnen nieuwe items toe te voegen op ui
This commit is contained in:
@@ -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>
|
||||
|
@@ -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);
|
Binary file not shown.
Reference in New Issue
Block a user