AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

TPlotgrid zeichnet Strich in Polygon

Ein Thema von Stewag · begonnen am 20. Aug 2019 · letzter Beitrag vom 13. Okt 2022
Antwort Antwort
Stewag

Registriert seit: 12. Jun 2008
161 Beiträge
 
Delphi 12 Athens
 
#1

AW: TPlotgrid zeichnet Strich in Polygon

  Alt 11. Okt 2022, 17:09
Leider wird der Path in D11 (in Android) wieder durch den Strich geschlossen
https://www.swiftease.de/download/Sc...011-221811.PNG

Hat jemand eine Idee, wie Rollos obiger T289_Plotgrid Code angepasst werden kann?

Rollo hatte im Sample Code (https://docwiki.embarcadero.com/Code...tGrid_(Delphi))) das Polygon durch einen Pfad ersetzt.
Das hat bis D10 funktioniert.

Hier der zentrale Code (nur Cosinus):
Code:
procedure TForm1.CalculateCos;
var
  I : Integer;
  LPt: TPointF;
  LStr: string;
begin
  FPathData.Clear;

  SetParams;
  SetLength(FPoints, Resolution);                      // Alloc space for number of points to be calculated

  // First point moveto
  LPt := PointF( Origin.x + Radian * xPixels / Pi,
                 Origin.y - cos(Radian) * yPixels );

  LStr := LStr + 'M'
               + Format('%1.2f', [LPt.X], FFormatSettings)
               + ', '
               + Format('%1.2f', [LPt.Y], FFormatSettings)
               ;

  Radian := Radian + Interval;                       // Set next point

  for I := 1 to High(FPoints) do
  begin

    LPt := PointF( Origin.x + Radian * xPixels / Pi,
                   Origin.y - cos(Radian) * yPixels );

    LStr := LStr + 'L'
                 + Format('%1.2f', [LPt.X], FFormatSettings)
                 + ', '
                 + Format('%1.2f', [LPt.Y], FFormatSettings)
                 ;


    Radian := Radian + Interval;                       // Set next point
  end;

  LStr := LStr + 'M0 0';
  LStr := LStr + 'Z';

  FPathData.Data := LStr;

end;

procedure TForm1.SetParams;
begin
  Resolution := 200;                   // Set resolution to 200 points
  Radian := -2.0 * Pi;                 // Start angle at -2Pi
  xPixels := PlotGrid.Width / 4;       // Contain graph width within a quarter of the grid width (actually half because of neg values)
  yPixels := PlotGrid.Height / 4;      // Contain graph height within a quarter of the grid height (actually half because of neg values)
  Origin := PointF(PlotGrid.Width / 2, // Calculate the center point of the plot grid
    PlotGrid.Height / 2);
  Interval := 4.0 * Pi / Resolution;   // Set interval between two points in which function values are calculated
end;



procedure TForm1.PlotGridPaint(Sender: TObject; Canvas: TCanvas;
  const ARect: TRectF);
begin
  PlotGrid.Canvas.Stroke.Thickness := 3;                 // Set stroke thickness

  CalculateCos;
  PlotGrid.Canvas.Stroke.Color := TAlphaColorRec.Blue;  // Set color for cos to blue
  PlotGrid.Canvas.DrawPath( FPathData, 1.0 ); // DrawPolygon(FPoints, 1);              // Draw cos graph
end;
Steffen

Geändert von Stewag (12. Okt 2022 um 10:16 Uhr)
  Mit Zitat antworten Zitat
Stewag

Registriert seit: 12. Jun 2008
161 Beiträge
 
Delphi 12 Athens
 
#2

AW: TPlotgrid zeichnet Strich in Polygon

  Alt 13. Okt 2022, 07:47
... hier die Lösung, aus https://www.youtube.com/watch?app=de...nnel=QuarkCube


Code:
var
  FPoints: TPolygon;

procedure TfMain.CalculateCos;
var
  i: Integer;
begin
  SetLength(FPoints, Resolution + 1); // Alloc space for number of points to be calculated
  SetParams;
  for i := 0 to High(FPoints) do
  begin
    FPoints[i].X := Origin.X + Radian * xPixels / Pi; // Calculate X value with scaling
    FPoints[i].Y := Origin.Y - cos(Radian) * yPixels; // Calculate Y value (f(X)) with scaling
    Radian := Radian + Interval; // Set next point
  end;
end;

procedure TfMain.PlotGridPaint(Sender: TObject; Canvas: TCanvas; const ARect: TRectF);
var
  i: Integer;
begin
  PlotGrid.Canvas.Stroke.Thickness := 2; // Liniendicke
  CalculateCos; // hier nur Cosinus
  PlotGrid.Canvas.Stroke.Color := TAlphaColorRec.White;

  for i := 1 to High(FPoints) do
    PlotGrid.Canvas.DrawLine(FPoints[i - 1], FPoints[i], 1);
end;
Steffen

Geändert von Stewag (13. Okt 2022 um 08:28 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


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 00:35 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