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

Bezierkurvenproblem

To: Realbasic Mailinglist <realbasic-nug dot de at lists dot realsoftware dot com>
Subject: Bezierkurvenproblem
From: Michael Köhler <realbasic at skie dot info>
Date: Fri, 29 Jun 2007 17:49:49 +0200
Delivered-to: listarchive at realsoftware dot com
Delivered-to: realbasic-nug dot de at lists dot realsoftware dot com
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>
  • Bezierkurvenproblem, Michael Köhler <=