Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Diagonales Raster zeichnen (https://www.delphipraxis.net/203820-diagonales-raster-zeichnen.html)

hansklok 28. Mär 2020 10:53


Diagonales Raster zeichnen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,

ich habe ein vergebenes Rect (Bereich), den ich gern mit einem diagonalen Raster füllen möchte. Der gesamte Bereich soll damit ausgefüllt sein. Gibt es einen einfachen Algorithmus, der dies in zwei Schleifen zuverlässig tut? Wie sieht dieser aus? Vermutlich muss man der Zeichenbereich clippen.

himitsu 28. Mär 2020 11:40

AW: Diagonales Raster zeichnen
 
Delphi-Referenz durchsuchenTBrush.Style ?

hansklok 28. Mär 2020 11:43

AW: Diagonales Raster zeichnen
 
Zitat:

Zitat von himitsu (Beitrag 1460688)

Ja, das kenne ich. Ich möchte es aber gern selbst programmieren.

Delbor 28. Mär 2020 12:02

AW: Diagonales Raster zeichnen
 
Hi hansklok

Schau dir doch mal das an:
https://www.delphipraxis.net/109527-...-zeichnen.html
https://www.delphipraxis.net/128983-...-erzeugen.html
https://www.delphipraxis.net/128617-...eser-code.html
Die Diagonale erreichst du, indem du die einzelnen Rasterpunkt gegeneinander versetzt.

Gruss
Delbor

hansklok 28. Mär 2020 12:26

AW: Diagonales Raster zeichnen
 
Zitat:

Zitat von Delbor (Beitrag 1460691)
Die Diagonale erreichst du, indem du die einzelnen Rasterpunkt gegeneinander versetzt.

Hi Delbor,

danke für Deinen Beitrag. Wie müsste ich diesen Code hier modifizieren, damit die Rasterpunkte gegeneinander versetzt werden?
Delphi-Quellcode:
for rx := 0 to (img_main.Width div gridsize) do
  for ry := 0 to (img_main.Height div gridsize) do
    img_main.Canvas.Pixels[rx*gridsize,ry*gridsize] := clGrey;

jfheins 28. Mär 2020 14:43

AW: Diagonales Raster zeichnen
 
ein horizontales/vertikales Raster besteht aus Linien, bei denen entweder alle X gleich sind (vertikale Linien), oder alle Y.

Solange es immer ein 45° Winkel sein soll, gilt für das diagonale Raster: Es gibt Linien bei denen X+Y gleich ist (Diagonale von links unten nach rechts oben) und solche bei denen X-Y gleich ist (andere Richtung)

Also ganz einfacher Fall: Die beiden Linien X+Y = 100 und X-Y = 10 ergeben schon mal 2 Linien die sich kreuzen. Für mehr Linien brauchst du entsprechend viele Werte, also zum Beispiel alle durch 10 teilbaren.

Das kannst du also in deine Scheife packen: Ein Pixel ist dann schwarz, wenn X+Y mod 10 = 0 oder wenn X-Y mod 10 = 0 ist.


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:16 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