Forums Neueste Beiträge
 

DrawXYZ imitieren

01/04/2008 - 09:52 von Karsten Sosna | Report spam
Hallo NG,
ich brauche eine etwas spezielle Funktion. Diese soll so etwas machen, wie
die DrawXYZ-Methoden und zwar nur die, die Linien Zeichen. Ich nehme mal
DrawEllipse als Beispiel um besser zu erkàren worauf ich hinaus will.
\\\
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs)
Handles Me.Load
Me.ClientSize = New Size(350, 500)
End Sub

Protected Overrides Sub OnPaint(ByVal e As
System.Windows.Forms.PaintEventArgs)
'MyBase.OnPaint(e)
Using BM As New Bitmap(50, 100)
Using G = Graphics.FromImage(BM)
G.Clear(Color.White)
G.DrawEllipse(Pens.Blue, 5, 5, 40, 40)
For a = 0 To 359
Dim x = CInt(Math.Cos(a * Math.PI / 180) * 20 + 25)
Dim y = CInt(Math.Sin(a * Math.PI / 180) * 20 + 75)
BM.SetPixel(x, y, Color.Red)
Next
Using SBR As New SolidBrush(Color.White)
For y1 = 0 To BM.Height - 1
For x1 = 0 To BM.Width - 1
SBR.Color = BM.GetPixel(x1, y1)
e.Graphics.FillRectangle(SBR, x1 * 5, y1 * 5, 5, 5)
Next
Next
End Using
e.Graphics.DrawImageUnscaled(BM, 300, 0)
End Using
End Using
End Sub
///

Der obere Kreis(blau) wird mit DrawEllipse gezeichnet. Der Untere(rot)
mittels der Winkelfunktionen. Wie man sieht, sieht der rote Kreis etwas
"plump" aus. Ich meine Damit die Linienstàrke. Das liegt an den Bereichen
der Schràgen. Hier scheint es so als wàren dort Bildpunkte zuviel. Und genau
darauf will ich hinaus. Ich brauche eine Funktion, die sich genauso verhàlt
die die bspw. DrawEllipse-Methode, also ohne diese "zusàtzlichen" Punkte.
Die Funktion soll nicht zeichnen sondern mir eine Liste von Punkten liefern,
wie die Punkte gesetzt werden müssten. Einfach auf einer Bitmap zeichnen und
zu schauen welche Punkte gesetzt sind scheidet aus zwei Gründen aus. 1)
liegen meine Dimensionen bei ca. 100.000*100.000 Punkten und 2) brauche ich
den Verlauf der Kurve oder des Linienzug(so wie oben die Berechnung der
Koordinaten zeigt).

Mir fàllt da gerade was ein. Angenommen ich hàtte nur die Bildpunkte, die in
eine Grafik gesetzt sind. Beispiel
P1(2, 0)
P2(1, 1)
P3(3, 1)
P4(0, 2)
P5(4, 2)
P6(1, 3)
P7(3, 3)
P8(2, 4)
Hier sind die Punkte zeilen-spaltenweise orientiert.

Wie könnte ich jetzt so eine Liste nach meinen Regeln sortieren? Also dann
als Ergebnis dieses erhalten:
P4(0, 2)
P2(1, 1)
P1(2, 0)
P3(3, 1)
P5(4, 2)
P7(3, 3)
P8(2, 4)
P6(1, 3)
Hier ergeben sie einen Linienzug.

Danke für jeden Tipp.
Gruß Scotty
 

Lesen sie die antworten

#1 Peter Fleischer
01/04/2008 - 15:01 | Warnen spam
"Karsten Sosna" schrieb im Newsbeitrag
news:%23$

Mir fàllt da gerade was ein. Angenommen ich hàtte nur die Bildpunkte, die
in eine Grafik gesetzt sind. Beispiel
P1(2, 0)
P2(1, 1)
P3(3, 1)
P4(0, 2)
P5(4, 2)
P6(1, 3)
P7(3, 3)
P8(2, 4)
Hier sind die Punkte zeilen-spaltenweise orientiert.

Wie könnte ich jetzt so eine Liste nach meinen Regeln sortieren? Also dann
als Ergebnis dieses erhalten:
P4(0, 2)
P2(1, 1)
P1(2, 0)
P3(3, 1)
P5(4, 2)
P7(3, 3)
P8(2, 4)
P6(1, 3)
Hier ergeben sie einen Linienzug.



Hi Karsten,
für die Sortierung musst du noch einige zusàtzliche fetslegungen treffen.
Das ist der Abstand und die Richtungsànderung. Du kannst nach minimalem
Abstand zum Vorgànger sortieren und nach minimaler Richtungsànderung bei
gleichen Abstànden mehrere Punkte. Noch komplizierter wird es, wenn die
Punkte im 3-dimensionalen Raum liegen und Iso-Linien über die Approximation
zwischen den Höhen der Punkte zu berechnen sind. Aber auch das ist lösbar.

Viele Gruesse

Peter

Ähnliche fragen