Autor Beitrag
bms
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 735

Win XP
Delphi 3, Delphi 6 PE, Delphi 2005 PE
BeitragVerfasst: 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

user defined image

so eine Kurve

user defined image

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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1284

W98 W2k WXP
Turbo D
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 735

Win XP
Delphi 3, Delphi 6 PE, Delphi 2005 PE
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 131



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
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
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2453

Arch Linux
JS (WebStorm), C#, C++/CLI, C++ (VS2013)
BeitragVerfasst: Di 06.06.06 11:59 
user profile iconArno 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
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 1183



BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 735

Win XP
Delphi 3, Delphi 6 PE, Delphi 2005 PE
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 4373

Ubuntu 7.10 "Gutsy Gibbon"

BeitragVerfasst: Sa 10.06.06 12:40 
user profile iconmexx 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 75

Win XP
Delphi 7 / 8 Enterprise
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 96

WinXP, Win7
C#, C++, VBNET
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2889
Erhaltene Danke: 13

W2000, XP
D6E, BDS2006A, DevExpress
BeitragVerfasst: 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.