Autor |
Beitrag |
bms
      
Beiträge: 735
Win XP
Delphi 3, Delphi 6 PE, Delphi 2005 PE
|
Verfasst: Di 06.06.06 10:48
Also die Kurve hat einen Namen, aber der fällt mir nicht ein. Wenn einer es weiß, dann ändere ich den Titel.
Also ich will statt so einer Linie
so eine Kurve
Was man hier hat, daß sind die Koordinaten der roten Punkte. Man hat hier also acht Punkte. Die eine Möglichkeit ist sie direkt zu verbinden wie im ersten Bild oder mit hilfe einer Formel wie in der zweiten Grafik.
Ich hatte vor Jahren ein Beispiel, aber den finde ich nicht mehr. Weiß einer wie man sowas berechnen kann?
_________________ VORSICHT: Ich behersche seit heute die Fünf-Finger-Handflächen-Herz-Explodier-Schlag-Kampf-Technik >
|
|
Kroko
      
Beiträge: 1284
W98 W2k WXP
Turbo D
|
Verfasst: Di 06.06.06 11:06
schau mal unter TCanvas.Bezier !
//EDIT:
es muss natürlich PolyBezier bzw. PoylBezierTo heißen 
_________________ Die F1-Taste steht nicht unter Naturschutz und darf somit regelmäßig und oft benutzt werden! oder Wer lesen kann, ist klar im Vorteil!
Zuletzt bearbeitet von Kroko am Di 06.06.06 12:06, insgesamt 1-mal bearbeitet
|
|
bms 
      
Beiträge: 735
Win XP
Delphi 3, Delphi 6 PE, Delphi 2005 PE
|
Verfasst: Di 06.06.06 11:16
TCanvas hat kein Bezier Funktion. Welches Delphi benutzt du? Auch D6 Pro hat sie nicht.
_________________ VORSICHT: Ich behersche seit heute die Fünf-Finger-Handflächen-Herz-Explodier-Schlag-Kampf-Technik >
|
|
Arno Nym
      
Beiträge: 131
|
Verfasst: Di 06.06.06 11:23
Hi!
Also, wie man an der Grafik schon sieht, werden die Kontrollpunkte alle durchlaufen, somit kann es sich schonmal nicht um eine Bézierkurve handeln. Ich würde mal eher auf die Verwandten B-Splines tippen
(Und seit welcher D-Version, gibt es sowas wie TCanvas.Bézier?)
Die B-Splines manuell zu zeichnen ist aber nicht ganz so easy. Mit OpenGL geht es ziemlich gut, das stellt nämlich Standartmethoden für NURBs/Splines zur Verfügung.
Ansonsten musst du mal googeln, da gibs bestimmt schon C-Code fürs von-Hand Zeichnen.
MFG, Arno Nyn
|
|
Fighter#1
      
Beiträge: 787
Win XP, Ubuntu 8.04
Turbo Delphi 2006, Delphi 2005 Pe, Delphi 5 Pe, Netbeans 6.1, Eclipse, Microsoft VisualC#, Dev C++, PHP, HTML, CSS
|
Verfasst: Di 06.06.06 11:55
Is PolyBezier nich das was du brauchst?
_________________ Wer andere beherrscht ist stark,
wer sich selbst beherrscht ist mächtig. Lao Tse
|
|
raziel
      
Beiträge: 2453
Arch Linux
JS (WebStorm), C#, C++/CLI, C++ (VS2013)
|
Verfasst: Di 06.06.06 11:59
Arno Nym hat folgendes geschrieben: | Ansonsten musst du mal googeln, da gibs bestimmt schon C-Code fürs von-Hand Zeichnen. |
Wozu in die Ferne schweifen, wenn das Gute liegt so nah 
_________________ JSXGraph
|
|
mexx
      
Beiträge: 1183
|
Verfasst: Di 06.06.06 12:01
Ich denke, du benötigst auch mehr Punkte. Woher sollen die Kurven denn wissen, wo sie lang laufen sollen. Bei Deinem erstes Bild geht der Strich von A nach B, aber bei der Kurve durchläuft er noch andere Punkte, welche nicht geradlinig auf der Strecke von A nach B zu finden sind. Zeichne mehr Punkte, viel mehr Punkte und verbinde diese dann. Je mehr Punkte du verwendest, um so mehr verschwimmt es, dass es direkte Verbindungen sind und Du hast Deine Kurven. So ist es genauer und richtiger.
_________________ Das Unsympathische an den Computern ist, dass sie nur ja oder nein sagen können, aber nicht vielleicht.
|
|
bms 
      
Beiträge: 735
Win XP
Delphi 3, Delphi 6 PE, Delphi 2005 PE
|
Verfasst: Sa 10.06.06 10:39
Danke euch allen. Allerdings sieht der Hinweis von raziel am vielversprechendsten aus.
_________________ VORSICHT: Ich behersche seit heute die Fünf-Finger-Handflächen-Herz-Explodier-Schlag-Kampf-Technik >
|
|
tommie-lie
      
Beiträge: 4373
Ubuntu 7.10 "Gutsy Gibbon"
|
Verfasst: Sa 10.06.06 12:40
mexx hat folgendes geschrieben: | Ich denke, du benötigst auch mehr Punkte. Woher sollen die Kurven denn wissen, wo sie lang laufen sollen. [...] Zeichne mehr Punkte, viel mehr Punkte und verbinde diese dann. Je mehr Punkte du verwendest, um so mehr verschwimmt es, dass es direkte Verbindungen sind und Du hast Deine Kurven. So ist es genauer und richtiger. |
Ich glaube, du weißt nicht, was Splines sind
Es ist Sinn der Sache, daß man nur die acht roten Punkte hat. Es existieren keine weiteren bekannten Punkte. Die geschwungene Kurve dazwischen soll mit Polynomen errechnet werden, nicht durch eine Reihe von Punkten, die wiederum linear verbunden werden. Beim *zeichnen* auf einen Canvas musst du zwar wieder einzelne Pixel ausrechnen, die du schwarz färbst, aber das ist ein Problem der grafischen Darstellung, nicht der internen Darstellung.
_________________ Your computer is designed to become slower and more unreliable over time, so you have to upgrade. But if you'd like some false hope, I can tell you how to defragment your disk. - Dilbert
|
|
P_G
      
Beiträge: 75
Win XP
Delphi 7 / 8 Enterprise
|
Verfasst: Mo 12.06.06 09:17
Wie oben bereits gesagt, mußt du auf Splines zurückgreifen: ein ebenfalls sehr einfacher Lösungsansatz ist, nicht GDI sondern GDI+ zu verwenden - Download z.B. unter www.progdigy.com/modules.php?name=gdiplus
Dann rufst du anstatt Canvas.Polyline oder Canvas.Bezier 'DrawCurve' auf. Der Parameter 'Tension' gibt an, wie stark die Krümmung des Kurvenverlaufes sein soll.
Gruß, P_G
|
|
battledevil
      
Beiträge: 96
WinXP, Win7
C#, C++, VBNET
|
Verfasst: Sa 01.07.06 08:43
Versuchs mal mit Catmull-Rom Splines, die verlaufen direkt durch die angegebenen Punkte.
infos findest du z.b. hier: [url]web.inf.tu-dresden.de/ST2/cg/pdf_daten/Informatik/HS/cg1/ws0203/kurven_script.pdf[/url]
Nico
|
|
alzaimar
      
Beiträge: 2889
Erhaltene Danke: 13
W2000, XP
D6E, BDS2006A, DevExpress
|
Verfasst: Sa 01.07.06 11:52
Bei kubischen Spines, die imho am Eifnachsten zu implementieren sind, geht es darum, zwischen jeweils zwei benachbarten Punkten ein Polynom dritten Grades zu zeichen, und zwar so, das die 1.Ableitung des Endpunktes des i.ten Polygons gleich der 1.Ableitung am Anfangspunkt des [i+1].ten Polynoms ist. Jetzt fehlen nur noch Vorgaben for den ersten und den Letzten Punkt. 'Natürliche' kubische Splines erhält man, indem man die 2.Ableitung an den beiden Punkten auf setzt.
Das ergibt ein Gleichungssystem für die 4*(n-1) Koeffizienten der Polynome. Und das widerum lässt sich hinreichend genau mit Gauss lösen. Daraufhin kann man dann die Kurve zeichen.
_________________ Na denn, dann. Bis dann, denn.
|
|
|