![]() |
Sinuskurve auf PlotGrid ausgeben
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo liebe Gemeinde,
ich versuche derzeit eine plattformübergreifende Anwendung mit Delphi zu schreiben. (RAD Studio) Diese soll eine Kurve darstellen, dazu nun 3 Fragen. 1. Wieso wird bei mir nach dem Zeichnen der Kurve noch eine Linie vom letzten zum ersten Punkt gezeichnet. 2. Weiß jemand ob es (speziell Andorid) möglich ist, in einer gezeichneten Funktion auf einem PlotGrid die Zoomfunktion zu nutzen? Habe eine GestureManger hinzugefügt und Zoomen aktiviert, Zoomt aber nix :/ 3. Ich habe versucht über den Timer die Kurve "punktweise" zeichnen zu lassen, also so, dass ein Graph wächst quasi (schlecht zu umschreiben). Kann mir vielleicht jemand helfen :) Ich hänge mal den von Rad Studio (aus einem Tutorial) vorgefertigten Code mit an. Vielen Dank schon einmal für eure Mühe.
Code:
procedure TForm1.SetParams;
begin Resolution := 200; // Set resolution to 200 points Radian := -2.0 * Pi; // Start angle at -2Pi xPixels := PlotGrid1.Width / 4; // Contain graph width within a quarter of the grid width (actually half because of neg values) yPixels := PlotGrid1.Height / 4; // Contain graph height within a quarter of the grid height (actually half because of neg values) Origin := PointF(PlotGrid1.Width / 2, // Calculate the center point of the plot grid PlotGrid1.Height / 2); Interval := 4.0 * Pi / Resolution; // Set interval between two points in which function values are calculated end; procedure TForm1.CalculateSin; var I: Integer; begin SetLength(FPoints, Resolution); // 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 - sin(Radian) * yPixels; // Calculate Y value (f(X)) with scaling Radian := Radian + Interval; // Set next point end; end; procedure TForm1.PlotGridPaint(Sender: TObject; Canvas: TCanvas; const ARect: TRectF); begin plotgrid1.Frequency:=1000; PlotGrid1.Canvas.StrokeThickness := 1; // Set stroke thickness CalculateSin; // Calculate and scale X and sin(X) values and save them in FPoints PlotGrid1.Canvas.Stroke.Color := TAlphaColorRec.Red; // Set color for sin to red PlotGrid1.Canvas.DrawPolygon(FPoints, 1); // Draw sin graph end; |
AW: Sinuskurve auf PlotGrid ausgeben
Zu 1.:
Das ist so dokumentiert ![]() Zitat:
![]() Zitat:
Delphi-Quellcode:
) erzeugen und mit
TPathData
![]() |
AW: Sinuskurve auf PlotGrid ausgeben
Vielen Dank für die schnelle Antwort.
Ich guck mir das gleich mal an :) BTW ich arbeite mit XE8. |
AW: Sinuskurve auf PlotGrid ausgeben
Zitat:
|
AW: Sinuskurve auf PlotGrid ausgeben
Mich verwirrt dabei nur, dass in der Doku die Sinusfunktion normal dargestellt wird. Ich les mich jetzt mal in das TPathData ein und hoffe das ich das umsetzen kann. :D
|
AW: Sinuskurve auf PlotGrid ausgeben
Zitat:
Use the force of the source, Luke! :mrgreen: |
AW: Sinuskurve auf PlotGrid ausgeben
Das sagst du so leicht ;)
Für mich ist das eine Herausforderung, hab auch erstmal 5 Tage nur gedrosseltes mobiles Internet, von daher ist auch alles ordentlich langsam. |
AW: Sinuskurve auf PlotGrid ausgeben
Ich hab dabei folgendes Problem, ich hab mir ein TPathData angelegt und würde das jetzt in der gleichen Weise befüllen wollen. Bei FPoints, einem einfachen Array konnte ich ja schreiben FPoints[i].X:=.... die Möglichkeit hab ich aber bei dem TPathData nicht. Kann ich das einfach mit TPathData.point:= ... machen?
Ich weiss schon das ist jetzt nicht die beste Frage, aber mir fehlt hier grad der Einstieg. Danke schon mal |
AW: Sinuskurve auf PlotGrid ausgeben
|
AW: Sinuskurve auf PlotGrid ausgeben
Meinst du einfach so? DIe komplette Prozedur einfügen?
Wieso hab ich das mit Strg drücken nicht gewusst ;D ich hab mir die Doku durchgelesen, du meintest mit Source aber wirklich Source :)
Code:
procedure TCanvas.DrawPolygon(const Points: TPolygon; const AOpacity: Single);
var I: Integer; Path: TPathData; PathBreakFound: Boolean; begin if not DoDrawPolygon(Points, AOpacity, FStroke) then begin Path := TPathData.Create; try PathBreakFound := False; for I := 0 to High(Points) do begin if I = 0 then Path.MoveTo(Points[I]) else if (Points[I].X = PolygonPointBreak.X) and (Points[I].Y = PolygonPointBreak.Y) then begin // Path.ClosePath; PathBreakFound := True; end else Path.LineTo(Points[I]); end; if not PathBreakFound then // Path.ClosePath; DrawPath(Path, AOpacity); finally Path.Free; end; end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:59 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz