AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi Canvas - gleichschenkliches gefülltes Dreieck
Thema durchsuchen
Ansicht
Themen-Optionen

Canvas - gleichschenkliches gefülltes Dreieck

Ein Thema von stahli · begonnen am 30. Mai 2015 · letzter Beitrag vom 1. Jun 2015
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.343 Beiträge
 
Delphi 11 Alexandria
 
#11

AW: Canvas - gleichschenkliches gefülltes Dreieck

  Alt 31. Mai 2015, 00:40
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.
Angehängte Grafiken
 
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#12

AW: Canvas - gleichschenkliches gefülltes Dreieck

  Alt 31. Mai 2015, 01:22
Ja, das ist schon klar. Dass der Canvas Pixel darstellt ist ja bekannt.
Das ist das was du verstanden hast? Hm, wo waren Pixel das Thema? Das mit dem Pinsel hast du aber verstanden?

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.
Miniaturansicht angehängter Grafiken
dreieck_4px_und_1px_b.png  

Geändert von Popov (31. Mai 2015 um 01:32 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.088 Beiträge
 
Delphi 12 Athens
 
#13

AW: Canvas - gleichschenkliches gefülltes Dreieck

  Alt 31. Mai 2015, 01:25
Nichtmal "austricksen" lässt sich die Zeichenroutine.
Delphi-Quellcode:
  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);
Da bleibt dann wohl nur selber malen. (Pixel für Pixel)
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#14

AW: Canvas - gleichschenkliches gefülltes Dreieck

  Alt 31. Mai 2015, 01:39
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.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#15

AW: Canvas - gleichschenkliches gefülltes Dreieck

  Alt 31. Mai 2015, 02:09
Ich hab mal gezeichnet:
Miniaturansicht angehängter Grafiken
dreieck_c.png  
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.343 Beiträge
 
Delphi 11 Alexandria
 
#16

AW: Canvas - gleichschenkliches gefülltes Dreieck

  Alt 31. Mai 2015, 11:05
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.
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.088 Beiträge
 
Delphi 12 Athens
 
#17

AW: Canvas - gleichschenkliches gefülltes Dreieck

  Alt 31. Mai 2015, 12:18
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)
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#18

AW: Canvas - gleichschenkliches gefülltes Dreieck

  Alt 31. Mai 2015, 12:31
Die Pinselstärke habe ich mal gedanklich ausgenommen, da die hier nicht relevant ist.
Indirekt schon. Das ist eigentlich das was ich versuche die ganze Zeit rüberzubringen. Wäre LineTo eine Funktion die immer eine 1-Pixel breite Linie zeichnet, wäre die Interne Berechnung der Line evtl. anders. Vermutlich würde man dann einer anderen Berechnungslogik folgen und schräge Linien wären symmetrisch. Aber LineTo ist eine Funktion die immer mit einem Pinsel der Stärke X zeichnet, bei der die Breite 1-Pixel nur der kleinste Wert ist.
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#19

AW: Canvas - gleichschenkliches gefülltes Dreieck

  Alt 1. Jun 2015, 08:06
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.

http://de.wikipedia.org/wiki/Bresenham-Algorithmus

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.
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.343 Beiträge
 
Delphi 11 Alexandria
 
#20

AW: Canvas - gleichschenkliches gefülltes Dreieck

  Alt 1. Jun 2015, 09:16
Danke. Das klingt plausibel und ist (auch für mich) verständlich.
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:43 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz