![]() |
AW: Canvas - gleichschenkliches gefülltes Dreieck
Liste der Anhänge anzeigen (Anzahl: 1)
Ja, das ist schon klar. Dass der Canvas Pixel darstellt ist ja bekannt.
Ich hätte mir gewünscht, dass das Dreieck so aussieht, wie im Anhang. Das wäre ja auch nicht unlogisch. Ok, dann muss man das vermutlich explizit als Anforderung berücksichtigen. @himitsu Dein Beispiel sieht gut aus. Aber größere Dreiecke können auch besser dargestellt werden. |
AW: Canvas - gleichschenkliches gefülltes Dreieck
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Hier noch mal was ich meinte. Dieses Dreieck (siehe Anhang) besteht aus zwei übereignender liegenden Dreiecken. Beide haben die gleichen Koordinate, nur hat das eine einen Pinsel der Breit 4 Pixel, das andere einen Pinsel der Breite 1 Pixel. Sie sind nicht symmetrisch, obwohl die Koordinate identisch sind. Also wenn du verstanden hast, dass ich dir sagen wollte, dass Canvas Pixel darstellen kann, dann weiß ich was du verstanden hast. //Edit: Andere Grafik eingefügt. Sie zeigt besser was ich meine. |
AW: Canvas - gleichschenkliches gefülltes Dreieck
Nichtmal "austricksen" lässt sich die Zeichenroutine. :stupid:
Delphi-Quellcode:
Da bleibt dann wohl nur selber malen. (Pixel für Pixel)
Canvas.MoveTo(A[0].X, A[0].Y);
Canvas.LineTo(A[1].X, A[1].Y); Canvas.LineTo(A[2].X, A[2].Y); Canvas.MoveTo(A[0].X, A[0].Y); Canvas.LineTo(A[2].X, A[2].Y); |
AW: Canvas - gleichschenkliches gefülltes Dreieck
Oder um es mal laienhaft auszudrücken: Bei eine schrägen Linie mit der Stärke ein Pixel springen die Pixel eben etwas hin und her. Bei einer längeren und oder breiteren Linie fällt es nicht so stark auf, wenn man nicht gerade mit der Nase vorm Bildschirm hängt. Um den Effekt etwas abzuschwächen gibt es die Kantenglättung oder Antialiasing. Das funktioniert aber nur wenn die Linie entsprechen breit ist. Bei der Stärke von einem Pixel kann die Kantenglättung auch nichts mehr reißen.
Aber die Grafik ist doch nur 5x5 Pixel groß. Da kann man doch die Pixel einzeln setzen. Wenn du mehrere Grafiken zeichnen willst, dann hinterleg sie als "Zeichenvorschrift" in einer entsprechenden Datenstruktur. Oder binde entsprechende Bitmaps als Ressource ein. |
AW: Canvas - gleichschenkliches gefülltes Dreieck
Liste der Anhänge anzeigen (Anzahl: 1)
Ich hab mal gezeichnet:
|
AW: Canvas - gleichschenkliches gefülltes Dreieck
Ich danke Euch.
Die Pinselstärke habe ich mal gedanklich ausgenommen, da die hier nicht relevant ist. Letztlich gibt es Algorithmen für Linien, die ein Pixel (das rechnerisch bei 3,5 liegen würde) auf 3 oder auf 4 setzen. Das ist logisch. Dass es mir als Betrachter lieber wäre das untere auf 3 und das obere auf 4 zu setzen, kann die Polygon-Funktion ja nicht wissen. Dazu müsste ich eben eine GleichschenklichesDreieck-Funktion schreiben oder benutzen (oder fixe Bitmaps oder Pfade). Insofern schließe ich mich hier Luckie komplett an. Ich war nur zunächst von dem etwas unschönen Ergebnis überrascht und dachte, ich müsste vielleicht noch einen bestimmten Endpunkt festlegen oder so. Oder dass ein anderer Fehler vorlag. Jetzt sehe ich, dass "mein spezielles" Wunschpolygon mit der Standardfunktion so nicht zu erreichen ist. Also lasse ich es so oder entscheide mich irgendwann für eine genauere Lösung. |
AW: Canvas - gleichschenkliches gefülltes Dreieck
Der Algo müsste praktisch einen Mittelpunkt berechnen und von diesem Punkt aus gesehn alle Punkte eher aufrunden, als abzurunden. (mit Bankers-Round würde das ganze noch unvorhersehbarer und sieht gleich anders aus, nur weil man das Bild um 1-2 Pixel verschiebt)
|
AW: Canvas - gleichschenkliches gefülltes Dreieck
Zitat:
|
AW: Canvas - gleichschenkliches gefülltes Dreieck
Mit dem Bresenham-Algorithmus wäre das vermutlich nicht passiert. Der wird aber wohl nicht angewandt, weil es schnellere Algorithmen gibt, aber sicher bin ich mir hier nicht. Die Vorgehensweise bei dem Algorithmus ist jedenfalls so, das alle Linien zunächst auf den Bereich (x>0, y>0, Steigung < 1) normalisiert werden und dadurch eigentlich gleiche Linien herauskommen müssten.
![]() Grundsätzlich ist es ja so: Um eine Linie von (0,0) nach (1,2) zu zeichnen kann man so vorgehen (0,0)-(1,1)-(1,2): Erst schräg nach oben dann nach rechts (0,0)-(0,1)-(1,2): Erst nach rechts, dann nach schräg oben Beide Pfade sind komplett gleichwertig. Wenn ein Algorithmus nun für eine Linie (0,0)-(1,2) die Variante #1 wählt, aber von (1,2)-(0,0) die Variante #2 hätte man schon eine Asymmetrie. Nicht umsonst ist das Rendern von Fonts im Pixelbereich so schwer und gelingt kaum so, das die Buchstaben dann noch symmetrisch sind. Es geht halbwegs, aber dazu sind die einzelnen Buchstaben mit so.g. 'Hints' versehen, die dem Renderer z.B. sagen, das bei dem Dreicke die linke und rechte Schräge Linie symmetrisch sein sollen, und dann kann er das entsprechend rendern. Ob intern in der Canvas-Paint.Methode mit Nachkommastellen gearbeitet wird, wage ich zu bezweifeln. |
AW: Canvas - gleichschenkliches gefülltes Dreieck
Danke. Das klingt plausibel und ist (auch für mich) verständlich. :-)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:12 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz