realbasic-nug.de
[Top] [All Lists]

Re: Bezierkurvenproblem

To: REALbasic NUG German <realbasic-nug dot de at lists dot realsoftware dot com>
Subject: Re: Bezierkurvenproblem
From: Michael Köhler <realbasic at skie dot info>
Date: Tue, 3 Jul 2007 09:55:27 +0200
Delivered-to: listarchive at realsoftware dot com
Delivered-to: realbasic-nug dot de at lists dot realsoftware dot com
References: <D8E17729-BD02-4CF4-838F-CAE24C5EB535 at skie dot info>
Mein Problem mit der Bezierkurve besteht noch immer...leider...aber ich habe inzwischen die richtigen Werte in meiner Tabelle drin. Am Code hat sich erstmal nicht viel geändert, möchte das hier jetzt nur mal bringen um euch zu zeigen wie so eine Kurve im Schmidt-Diagram wirklich aussehen kann...tabellenmäßig...genaugenommen sind es zwei Kurven ;)


Winkel  Y1              Y2

-10             199
-9              207
-8              236
-7              263
-6              300
-5              306
-4              339
-3              322
-2              332
-1              312
0               283
1               280
2               237
3               196
4               177
5               120
6               136
35                              138
37                              167
39                              178
40                              188
41                              207
43                              148
45                              135
46                              134
47                              135
50                              121

Als Diagramm kommt dann folgendes zustande sofern ich die Punkte mit Linien zeichne:

http://i14.tinypic.com/5xzig7m.jpg

Als Code für die Linien hab ich folgendes verwandt:

  For i=0 to Datensatz.ListBox1.ListCount-2
If Datensatz.ListBox1.Cell(i,1)<>"" And Datensatz.ListBox1.Cell(i +1,1)<>""Then
      Graph.Graphics.ForeColor=RGB(255,0,0)
Graph.Graphics.DrawLine Graph.Width/2+(skalierungsfaktor2*Cdbl (Datensatz.ListBox1.Cell(i,1))*cos(Cdbl(Datensatz.ListBox1.Cell(i,0)) *PI/180)), Graph.Height/2-(skalierungsfaktor2*Cdbl (Datensatz.ListBox1.Cell(i,1))*sin(Cdbl(Datensatz.ListBox1.Cell(i,0)) *PI/180)),Graph.Width/2+(skalierungsfaktor2*Cdbl (Datensatz.ListBox1.Cell(i+1,1))*cos(Cdbl(Datensatz.ListBox1.Cell(i +1,0))*PI/180)),Graph.Height/2-(skalierungsfaktor2*Cdbl (Datensatz.ListBox1.Cell(i+1,1))*sin(Cdbl(Datensatz.ListBox1.Cell(i +1,0))*PI/180))
    End If
If Datensatz.ListBox1.Cell(i,2)<>"" And Datensatz.ListBox1.Cell(i +1,2)<>""Then
      Graph.Graphics.ForeColor=RGB(0,255,0)
Graph.Graphics.DrawLine Graph.Width/2+(skalierungsfaktor2*Cdbl (Datensatz.ListBox1.Cell(i,2))*cos(Cdbl(Datensatz.ListBox1.Cell(i,0)) *PI/180)), Graph.Height/2-(skalierungsfaktor2*Cdbl (Datensatz.ListBox1.Cell(i,2))*sin(Cdbl(Datensatz.ListBox1.Cell(i,0)) *PI/180)),Graph.Width/2+(skalierungsfaktor2*Cdbl (Datensatz.ListBox1.Cell(i+1,2))*cos(Cdbl(Datensatz.ListBox1.Cell(i +1,0))*PI/180)),Graph.Height/2-(skalierungsfaktor2*Cdbl (Datensatz.ListBox1.Cell(i+1,2))*sin(Cdbl(Datensatz.ListBox1.Cell(i +1,0))*PI/180))
    End If
  Next

Mit dem CurveShape klappt es leider immer noch nicht und ich hab keine Ahnung warum...das ist irgendwie doof. Hat denn keiner eine Idee? Denn Graden sind zwar ganz nett aber Bögen wären mir lieber.

Grüße Michael




Am 29.06.2007 um 17:49 schrieb Michael Köhler:

Ich hab da ein kleines Problem mit den einem CurveShape. Und zwar habe ich eine Reihe von Punkten, welche durch eine Linie verbunden werden sollen. Da es keine Graden sein sollen hab ich ein CurveShape gewählt der Ordnung eins...und auch Ordnung zwei hab ich schon getestet... leider ohne Erfolg. Meine Testreihe besteht aus folgender Tabelle, welche aus einer ListBox kommen:

Winkel  Wert

1               80
2               130
3               170
4               200
5               180
6               125
7               80


Mit dem CurveShape entsteht folgendes Bild:


http://i10.tinypic.com/4umukxh.jpg


Wenn ich die Punkte nur durch Linien verbinde dann kommt folgendes Bild zustande:


http://i7.tinypic.com/4r1fxvl.jpg


Das Bild, bei welchem die Punkte durch Linien verbunden sind, ist so vollkommen korrekt aber warum ist das Bild mit dem CurveShape falsch? Besonders, warum gibt es bei dem CurveShape plötzlich negative Werte? Das verstehe ich nicht so ganz.

Hier noch mein Code zum CurveShape:

  For i=0 to 6 Step 2
grafik.controlx(0)=(skalierungsfaktor2*Cdbl (Datensatz.ListBox1.Cell(i+1,1))*cos(Cdbl(Datensatz.ListBox1.Cell(i +1,0))*PI/180)) grafik.controly(0)=(skalierungsfaktor2*Cdbl (Datensatz.ListBox1.Cell(i+1,1))*sin(Cdbl(Datensatz.ListBox1.Cell(i +1,0))*PI/180))
    grafik.order=1
grafik.x=(skalierungsfaktor2*Cdbl(Datensatz.ListBox1.Cell(i,1)) *cos(Cdbl(Datensatz.ListBox1.Cell(i,0))*PI/180)) grafik.y=(skalierungsfaktor2*Cdbl(Datensatz.ListBox1.Cell(i,1)) *sin(Cdbl(Datensatz.ListBox1.Cell(i,0))*PI/180)) grafik.x2=(skalierungsfaktor2*Cdbl(Datensatz.ListBox1.Cell(i +2,1))*cos(Cdbl(Datensatz.ListBox1.Cell(i+2,0))*PI/180)) grafik.y2=(skalierungsfaktor2*Cdbl(Datensatz.ListBox1.Cell(i +2,1))*sin(Cdbl(Datensatz.ListBox1.Cell(i+2,0))*PI/180))
    grafik.BorderColor=RGB(255,0,0)
    Graph.Graphics.DrawObject grafik, Graph.Width/2, Graph.Height/2
  Next

Und mein Code zu den einfachen Linien:

  For i=0 to 358
If Datensatz.ListBox1.Cell(i,1)<>"" And Datensatz.ListBox1.Cell (i+1,1)<>""Then
      Graph.Graphics.ForeColor=RGB(255,0,0)
Graph.Graphics.DrawLine Graph.Width/2+(skalierungsfaktor2*Cdbl (Datensatz.ListBox1.Cell(i,1))*cos(Cdbl(Datensatz.ListBox1.Cell(i, 0))*PI/180)), Graph.Height/2+(skalierungsfaktor2*Cdbl (Datensatz.ListBox1.Cell(i,1))*sin(Cdbl(Datensatz.ListBox1.Cell(i, 0))*PI/180)),Graph.Width/2+(skalierungsfaktor2*Cdbl (Datensatz.ListBox1.Cell(i+1,1))*cos(Cdbl(Datensatz.ListBox1.Cell(i +1,0))*PI/180)),Graph.Height/2+(skalierungsfaktor2*Cdbl (Datensatz.ListBox1.Cell(i+1,1))*sin(Cdbl(Datensatz.ListBox1.Cell(i +1,0))*PI/180))
    End If
  Next

Die If-Schleife dient nur dazu, dass ich keine Linie zum Nullpunkt zeichen, ein Schönheitseffekt nur. Da muss ich mir bei CurveShape auch noch was Überlegen, wie ich das abfange. Ich hoffe, jemand von euch sieht meinen Fehler, ich bin jedenfalls grad blind.

Für die, die gleich Verbesserungsideen haben: Später sollen die Winkel auch springen können, sprich die Tabelle könnte wie folgt aussehen:

Winkel  Wert

1               80
2               120
5               95
6               88
10              330

Diese Punkte sollen dann durch ein CurveShape verbunden werden.

Achja, noch eines. Wie speicher ich das Bild am Besten ab. Hierfür hab ich jetzt nur mal ein FolderItem f verwendet und gesagt f.SaveAsJpeg Graph. Wie man aber an den Bildern sehen kann ist das nicht unbedingt sehr schön. Welches Format eignet sich denn besonders gut zum Speichern eines Bildes, welches in meiner Applikation gezeichnet wurde, so dass ich es später auch in ein Word-Dokument oder ähnliches integrieren kann? Also diese Bilder hier sind mir eigentlich zu verwaschen.

LG Michael



<Prev in Thread] Current Thread [Next in Thread>
  • Re: Bezierkurvenproblem, Michael Köhler <=