Estoy tratando de dibujar una ruta de autobús como una secuencia simple de líneas. Nada sofisticado. Pero en vez de líneas, me están dando cuñas. Inicialmente estaba bien con esto, porque las cuñas se ven como flechas y siempre miran hacia el segundo punto. Pero ahora quiero mejorar el aspecto, y las cuñas se están convirtiendo en un gran problema.¿Por qué Graphics.DrawLine dibuja una forma de cuña?
Mi sospecha es algún tipo de problema de coma flotante debido a la transformación de gráficos (lat/lons son alimentados y la transformación los convierte en x/y en el mapa de bits [asumiendo que lat/lon es euclidiano es lo suficientemente preciso para mi fines], por lo que la escala es de varios órdenes de magnitud).
Captura de pantalla:
En realidad parece un poco a la línea se dividió en dos triángulos, pero sólo uno de ellos se ha elaborado.
código relevante (nota: el dibujo se realiza de forma asíncrona, por lo que estoy creando un mapa de bits):
'-- Creating the transform --'
Dim bitmap = New Bitmap(Math.Max(1, PictureBox1.Width), Math.Max(1, PictureBox1.Height))
Dim g = Graphics.FromImage(bitmap)
g.TranslateTransform(0, bitmap.Height)
g.ScaleTransform(1, -1)
g.ScaleTransform(CSng(bitmap.Width)/(maxLon - minLon), CSng(bitmap.Height)/(maxLat - minLat))
g.TranslateTransform(-minLon, -minLat)
'-- Drawing the lines (in a method called asynchronously) --'
using pen = New Pen(Brushes.Black, 0.0001)
Dim shapes = busData.TripsInGroup(tripGroup.Value).
Select(Function(e) e.Shape).
Distinct()
For Each shape In shapes
For i = 0 To shape.Points.Count - 2
Dim e1 = shape.Points(i)
Dim e2 = shape.Points(i + 1)
Dim p1 = New PointF(CSng(e1.Longitude), CSng(e1.Latitude))
Dim p2 = New PointF(CSng(e2.Longitude), CSng(e2.Latitude))
g.DrawLine(pen, p1, p2)
Next
Next
Valores de ejemplo:
cenLat = 44.657176
cenLon = -63.549471
spnLat = 0.071921
spnLon = 0.179729
minLat = cenLat - spnLat/2
maxLat = cenLat + spnLat/2
minLon = cenLon - spnLon/2
maxLon = cenLon + spnLon/2
shpts = {(Lat: 44.6518683235, Lon: -63.5930836628),
(Lat: 44.6512537117, Lon: -63.5927528307),
(Lat: 44.6508013753, Lon: -63.5924572976),
(Lat: 44.6503312812, Lon: -63.5921923044),
(Lat: 44.6503312812, Lon: -63.5921923044),
(Lat: 44.6502137576, Lon: -63.5921260568),
(Lat: 44.6495810455, Lon: -63.5917829189),
(Lat: 44.648893839, Lon: -63.5913776026),
(Lat: 44.6485468163, Lon: -63.5911976944),
(Lat: 44.6485468163, Lon: -63.5911976944),
(Lat: 44.6475084762, Lon: -63.5906617219),
(Lat: 44.6475084762, Lon: -63.5906617219)}
Notas y descubrimientos:
- El uso de DrawLines en lugar de DrawLine resuelve el problema (pero ¿por qué?)
- El aumento del grosor del lápiz hace que el problema desaparezca (pero las líneas son demasiado gruesas)
- Alejar (aumentando lat ventana de la vista/lon) hace que el problema desaparezca, con el tiempo (pero quiero hacer un zoom!)
Debe publicar todo su código, incluidas las transformaciones. Nunca antes había visto una línea renderizada como una cuña, sin que sucediera algo inusual. – MusiGenesis
He agregado algo más del código. –
Tinker con el bolígrafo, especialmente las tapas. –