PapstRatze
Lt. Junior Grade
- Registriert
- Aug. 2008
- Beiträge
- 436

Eigentlich kein wirkliches Programmierproblem, hoffe es passt aber trotzdem hier rein
Auf dem angehängten Bild ist abgebildet das Saarland. Für die Erstellung werden Daten von OpenStreetMap verwendet, es handelt sich also um eine Ansammlung von Punkten.
Alle Punkte werden in ein Bild gemalt. Damit eine durchgängige Linie entsteht wollte ich nun die Punkte verbinden. Die Verbindungen sind im Bild rot. Einige schießen leider aber übers Ziel hinaus.
Für die Berechnung habe ich den letzten Punkt als Vektor und der Punkt der als nächstes verarbeitet werden soll. Aus der Subtraktion der Beiden erstelle ich einen Richtungsvektor. Diese multipliziere ich von 0.01 bis 0.99 und Rechne den Vektor des letzten Punktes dazu. Dadurch entstehen neue Punkte, die ich wie die anderen noch skaliere und dann in das Bild schreibe.
Code:
foreach (var item in points)
{
Vector last = new Vector(0, 0), now = new Vector(0, 0);
foreach (Point po in item)
{
now = new Vector(po.X, po.Y);
if (last.X != 0 && last != now)
{
Vector dir = last - now;
for (double i = 0.01; i < 1; i+= 0.01)
{
Vector inuse2 = new Vector((last.X + dir.X * i)*scale-minX*scale, (last.Y + dir.Y * i)*scale*-1-minY*scale);
bt.SetPixel((int)(inuse2.X + 10), (int)(inuse2.Y + 10), roundColor);
}
}
Vector inuse = new Vector(po.X*scale-minX*scale,po.Y*scale*-1-minY*scale);
bt.SetPixel((int)(inuse.X+10), (int)(inuse.Y+10), choosenColor);
last = now;
}
}
Anmerkung: Aktuell steht das Saarland Kopf, was daraus resultiert, dass geografisch gesehen 0 am Äquator ist, während beim Bild 0 oben ist.
Zuletzt bearbeitet:
(Bild vergessen :))