Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Kurve zeichnen (https://www.delphipraxis.net/130631-kurve-zeichnen.html)

Larsi 11. Mär 2009 13:01


Kurve zeichnen
 
Hi,

meine Frage ist recht simpel: Wie kann ich in Delphi eine Kurve zeichnen? Per Canvas wäre ganz gut.

Ich stelle mir drei definierbare Punkte vor, 2 für Anfang und Ende und den dritten auf der Hälfte der Linie, der dann für die Kurve verwantwortlich ist. Ich habe schon ein bisschen gesucht und habe etwas mit einer Bezierkurve herausgefunden, doch verstanden habe ich das ganze Verfahren nicht. Ich brauch das Ganze nicht für irgendwelche mathematischen Berechnungen, sondern möchte einfach nur eine Kurve zeichnen, bei der ich bestimmten kann wie gebogen sie ist..


Mit freundlichen Grüßen

Lars Wiltfang

nuclearping 11. Mär 2009 13:04

Re: Kurve zeichnen
 
Was ist denn eine Kurve? Ein Stück Kreis bzw. ein Stück Ellipse. Also brauchst du Kreisfunktionen zur Berechnung der Punkte. Stichworte: Sinus, Cosinus, ...

Larsi 11. Mär 2009 13:11

Re: Kurve zeichnen
 
Gibt es da keine Funktion in Delphi für um eine Kurve zu zeichnen? Wenn ich die drei Punkte errechnet habe und sie verbinde sind es ja eigentlich nur 3 Striche und keine Kurve.

Matze 11. Mär 2009 13:23

Re: Kurve zeichnen
 
Hi,

einfach mal die Suchfunktion bemühen. Du schwärmst ja immer so von ihr: Spline Linien zeichnen. Da findest du einiges und kannst das vermutlich auch deinen Bedürfnissen anpassen. Sonst eben nochmals fragen, wenn die Ergebnisse nicht deinen Vorstellungen entsprechen. ;)

Mal als manueller Ansatz: Berechne einzelne Punkte der Kurve (die trigonometrischen Funktionen wurden genannt) und verbinde diese über Canvas.MoveTo / Canvas.LineTo. Je mehr Punkte zu berechnest, desto enger liegen sie zusammen und desto sauberer wird die Kurve. Wobei Antialiasing nicht eingesetzt wird. Das wäre vermutlich dann aufwändiger.

Grüße, Matze

himitsu 11. Mär 2009 13:36

Re: Kurve zeichnen
 
falls dir der Mittelpunkt, Radius und Anfangs/Endwinkel reichen,
bzw. wenn du dir dieses aus deinen 3 Punkten errechnen kannst,
dann da http://www.delphipraxis.net/internal...005366#1005366

mr_emre_d 11. Mär 2009 13:41

Re: Kurve zeichnen
 
Schau dir das folgende Bild an und überlege dir, wie du das lösen kannst
(sehr simpel:)
http://upload.wikimedia.org/wikipedi...ratic_anim.gif


Falls du das mit funktionen machen willst, wäre dies ein guter Vorschlage:
Delphi-Quellcode:
type
  TFX = function( X: Double ): Double;
..
function MyFunc( X: Double ): Double;
begin
  Result := X*X;
end;

procedure Dot( Pos: TPoint; ACanvas: TCanvas );
begin
  with ACanvas do
  begin
    MoveTo( Pos.X, Pos.Y );
    LineTo( Pos.X + 1, Pos.Y );
    LineTo( Pos.X + 1, Pos.Y + 1 );
    LineTo( Pos.X, Pos.Y + 1 );
    LineTo( Pos.X, Pos.Y );
  end;
end;

procedure DrawFX( Center: TPoint; _Min, _Max, _Accuracy: Integer; ACanvas: TCanvas;
  fx: TFX );
var
  i: Integer;
begin
    for i := _Min*_Accuracy to _Max*_Accuracy do
      Dot( Point( Center.X+i div _Accuracy, Center.X + Round( fx(i / _Accuracy) ) ), ACanvas );
end;

// Zeichnen:
   DrawFX( Point( 100, 100 ), -10, 10, 10, Canvas, MyFunc );
MfG

himitsu 11. Mär 2009 13:46

Re: Kurve zeichnen
 
Was hast du denn an .PolyBezier nicht verstanden?

PS: OK, da werden 2 Steuerpunkte verwendet, aber so für den Anfang könntest du für beide Punkte dieselben Werte verwenden.

Delphi-Quellcode:
var x: array[0..3] of TPoint;

x[0] = Punkt 1
x[1] = Steuerpunkt
x[2] = Steuerpunkt
x[3] = Punkt 2
Canvas.PolyBezier(x);

Felix015 11. Mär 2009 14:59

Re: Kurve zeichnen
 
ansonsten lern opengl da is sone function gleich mit drin


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