Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Canvas.Freihandlinie (https://www.delphipraxis.net/178250-canvas-freihandlinie.html)

Bjoerk 27. Dez 2013 10:10

Canvas.Freihandlinie
 
Hat jemand eine Idee, wie man eine Freihandlinie implementieren könnte, die nur durch die beiden Endpunkte definiert ist? Die Line sollte in etwa eine Gerade sein, man sollte eben nur sehen, daß sie "etwas gekraxelt daherkommt".

Perlsau 27. Dez 2013 10:19

AW: Canvas.Freihandlinie
 
Dazu mußt einige der Punkte, die auf der Linie liegen, ermitteln und dann von Punkt zu Punkt malen, wobei du die dazwischen liegenden Punkte um einen gewissen Wert in X- und/oder Y-Richtung abweichen läßt.

Bjoerk 27. Dez 2013 12:36

AW: Canvas.Freihandlinie
 
Jo Frank, funzt prima. Die einfachsten Lösungen sind doch oft die besten. :)

Delphi-Quellcode:
procedure SketchLine(Canvas: TCanvas; AX1, AY1, AX2, AY2: integer);
const
  N = 11;
var
  X1, X2, Y1, Y2: double;
  I, A: integer;
begin
  for I := 1 to N do
  begin
    if (I = 1) or (I = N) then
      A := 0
    else
      if Odd(I) then
        A := 1
      else
        A := -1;
    X1 := AX1 + (AX2 - AX1) / N * (I - 1);
    X2 := A + AX1 + (AX2 - AX1) / N * I;
    Y1 := AY1 + (AY2 - AY1) / N * (I - 1);
    Y2 := A + AY1 + (AY2 - AY1) / N * I;
    Canvas.MoveTo(Round(X1), Round(Y1));
    Canvas.LineTo(Round(X2), Round(Y2));
  end;
end;

procedure TForm2.SketchLineButtonClick(Sender: TObject);
begin
  SketchLine(Canvas, 10, 10, 400, 150);
end;


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