Entwickler-Ecke

Multimedia / Grafik - Linie zeichnen - Länge feststellen


M. Raab - Sa 14.06.03 15:07
Titel: Linie zeichnen - Länge feststellen
Hallo NG,

folgendes Problem: ich habe einen Canvas zur Laufzet erzeugt und zeichne eine Linie. Mein Problem: ich möchte die Linie nur so lange zeichnen, bis sie auf eine andere Linie stößt, die rot gefärbt (clRed) ist. Wie kann ich die Farbe des Pixels abfragen, welches gerade vor meiner Linie ist ?

Dann möchte ich gerne die Zahl der Pixel wissen, die die Länge der Linie hat. Gibt es da eine einfache Möglichkeit wenn ich den Anfangspunkt kenne (x1,y1) und den Endpunkt (dann die rote Linie) (x2,y2) ?


Gruss


Markus


Sven - Sa 14.06.03 15:50

Sind die Koordinaten der Linien irgendwo gespeichert, oder sind diese nur auf dem Canvas?

Sven


Aya - Sa 14.06.03 17:29

Hi,

um zu prüfen ob vor deiner Linie ne Rote linie ist, benutz einfach:


Delphi-Quelltext
1:
if Canvas.Pixels[X,Y]=clRed then...                    


für X und Y setzt du halt den punkt 1px vor deiner linie ein ;)

um rauszubekommen wie lang die linie ist, müßtest du den Satz des Phytagoras benutzen.. Also:

a² + b² = c²

Au'revoir,
Aya~


M. Raab - So 15.06.03 09:56

Hallo Aya,

vielen Dank für den Tipp - ich habe einen Richtungsvektor und einen Anfangspunkt. Ich frage jetzt immer 3 Pixel vor der Linie ab, ob ich auf eine rote Gegenlienie treffe und über den Betrag des Vektors bekomme ich die Länge.

Noch ne Frage: angenommen, das Canvas hat doch unabhängig von der Auflösung des Bildschirms immer die gleiche Anzahl an Pixel, oder ? Denn ansosnten würde das mit der Länge je ständig variieren.....


Gruss


Markus


MathiasH - So 15.06.03 11:11
Titel: der canvas richtet sich immer na
der canvas richtet sich immer nach der größe des zugehörigen fensters, wenn du dein Progi beispielsweise auf maximized laufen lässt hast du je nach auflösung mal mehr und mal weniger pixel in deinem canvas (kein zoom!), halt immer clientheight*clientwidth

war es das, was du wissen wolltest?

IO-sys/MathiasH


M. Raab - So 15.06.03 11:28

Hallo Mathias,

jo .... :D

Mein Denkfehler war: angenommen ich müßte eine Linie zeichnen von der linken oberen Ecke des Bildschirms zur rechten unteren Ecke. Bei einer Auflösung des Bildschirms von z.B. 800*600 wären das -ich sag mal- 1000 Pixel. Bei einer Auflösung von 1024x786 eben entsprechend mehr, obwohl es die gleiche Strecke ist. Aber: wenn ein Canvas 300x600 hat, hat es eben genau diese Zahl an Pixel unabhängig von der Auflösung des Bildschirms.

Mein Problem war, dass ich maßstabsgetreu eine Strecke berechnen soll, aber nur den Anfangspunkt und den Richtungsvektor kenne. Ich kenne jedoch nicht die Länge der Strecke. Also habe ich mir gedacht, ich fange mal an zu zeichnen und beende das wenn ich auf die andere Linie treffe. Dann berechne ich die Länge in Pixel, da ich nun den Endpunkt kenne. Da ich weiß, dass z.B. 250 Pixel eine Strecke von einem Meter repräsentieren, weiss ich auch, wie lange diese eben eingezeichnete Strecke ist. Oder ???????

Da ist eben die Auflösung eine Grundvoraussetzung.

Vielen Dank und Gruss


Markus :idea: