AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Kennt sich jemand mit SPLines aus?
Thema durchsuchen
Ansicht
Themen-Optionen

Kennt sich jemand mit SPLines aus?

Ein Thema von Phantom1 · begonnen am 24. Aug 2004 · letzter Beitrag vom 24. Aug 2004
Antwort Antwort
Phantom1

Registriert seit: 20. Jun 2003
282 Beiträge
 
Delphi 10.4 Sydney
 
#1

Kennt sich jemand mit SPLines aus?

  Alt 24. Aug 2004, 19:26
Hi,

und zwar suche ich die richtigen Formeln für verschiedene SPLines arten und zwar genau die die auch in AutoCAD verwendet werden. Das wären die 4 folgenden: Periodic spline, Rational spline, Planar spline, Linear spline.

Irgendwie war meine Suche nach den Formeln bisher erfolglos. Ich habe nur den folgenden DelphiCode gefunden:

Delphi-Quellcode:
procedure DrawCubicCurve(Canvas: TCanvas; const Points: array of TPoint; Steps: cardinal);

  function Interpolate(const p1, p2, p3, p4: TPoint; t: single): TPoint;
    
    function cubic(v1, v2, v3, v4, t: single): single;
    begin
      result:=v2+t*((-v1+v3)+t*((2*v1-2*v2+v3-v4)+t*(-v1+v2 - v3 + v4)));
    end;

  begin
    Result.x:=round(cubic(p1.x, p2.x, p3.x, p4.x, t));
    Result.y:=round(cubic(p1.y, p2.y, p3.y, p4.y, t));
  end;

var
  i, s: integer;
  p, p1, p2, p3, p4: TPoint;
begin
  if Length(Points) < 2 then exit;
  Canvas.MoveTo(Points[0].x, Points[0].y);
  p2:= Points[0];
  p3:= Points[0];
  p4:= Points[1];
  for i:= 0 to High(Points)-1 do
  begin
    p1:= p2;
    p2:= p3;
    p3:= p4;
    if i+2 < Length(Points) then p4:= Points[i+2];
    for s:= 1 to Steps do begin
      p:= Interpolate(p1, p2, p3, p4, s / Steps);
      Canvas.LineTo(p.x, p.y);
    end;
  end;
end;
Der Code funktioniert zwar, aber ich kann diese Spline art keine von den oben genannten 4 arten zuordnen.

Wäre für jede hilfe dankbar.

mfg
  Mit Zitat antworten Zitat
Benutzerbild von CenBells
CenBells

Registriert seit: 30. Mär 2003
Ort: Kiel urspr. Lübeck
176 Beiträge
 
Delphi 7 Professional
 
#2

Re: Kennt sich jemand mit SPLines aus?

  Alt 24. Aug 2004, 21:42
Hi,

Splines sind mathemathische Formeln zur Interpolation von Polynom-Funktionen. Such einfach mal im Internet nach Spline (oder auch Splinefunktion) und Definition und Interpolation, dann wirst du schon ein paar sachen finden. Und das nachprogrammieren ist dann sicherlich keine große Sache.


Gruß
Ken
  Mit Zitat antworten Zitat
Benutzerbild von dizzy
dizzy

Registriert seit: 26. Nov 2003
Ort: Lünen
1.932 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: Kennt sich jemand mit SPLines aus?

  Alt 24. Aug 2004, 22:26
Hier sind auch noch 4 beschrieben incl. C-Code. Cubic ist auch dabei, und linear (der wohl einfachste Typ ).

Das Problem der Zuordnung der Verfahren zu den richtigen Bezeichnung ist garnicht so eeinfach, da sehr viele Algos vorhanden sind, und teilweise auch ein und der selbe Algo, oder mit minimal unterschiedliche Algos unter völlig anderen Namen "firmieren".

Bekannt sind da noch B-Splines, Heremite-Splines, Beziér-Kurven etc.pp. und alle machen's etwas anders. Die von die genannten kenne ich z.B. (bis auf linear) nicht, was aber nicht heisst, das es nicht vielleicht doch einer der obigen ist, nur halt unter anderem Namen

Da wäre eine intensive Google-Suche wahrscheinlich am ertragsreichsten...

gruss,
dizzy
Fabian K.
INSERT INTO HandVonFreundin SELECT * FROM Himmel
  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 19:09 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