Koordinatensystem

jessy_musik

Mitglied
Hallo Leute!

Ich hab da ein Problem. Muß fürs Studium eine bewegte Kurve in einem Koordinatensystem darstellen. Hab keine Ahnung wie ich die Kurve zeichne! Hab da was von Picture Box und scale gelesen. Weiß aber nicht wie ich das umsetzen soll. Kann mir jemand helfen?

Vielen Dank
 
Was meinst du mit "bewegte Kurve"? Sagt mir irgendwie gar nichts.

Hast du da nicht noch ein paar Infos?
 

Ich hätte da schon ne Idee, aber das wird es wohl eher nicht sein. :p

Aaaaaalso : eine Studienkollegin von mir musste mal etwas in VB machen. Und zwar eine Linie zeichnen, die dann verschoben wurde.

Sie hat es so gelöst :

eine Funktion angelegt die mit APIs Drawline eine Linie zeichnet. Beim Klick auf einen Button ist die Linie mit einer Schleife immer wieder neu gezeichnet worden, weil die neuen Koordinaten gleich den alten Koordinaten plus sonstwas waren.

Meinst Du sowas ?
 
kein Problem!

Eine Bewegte Kurve ist im grunde nichts anderes als ne verschiebbare Grafisch-Mathematische-Function

Zu Deutsch: :)

Man nehme eine Mathematische Function z.B. Sinus oder Cosinus

Sieht dan folgendermassen aus:

Benötigt:
2x Scrollbar Horizontal (HS1)
1x Scrollbar Vertikal (VS1)


=CODE=
Code:
Private Sub Form_Load()
'PosX
HS1.Max = Form1.width
HS1.Value = form1.width / 2
'PosY
VS1.Max = Form1.width
VS1.Value = form1.width / 2
'Auflösung
HS1.Max = 360
HS1.Min = 0.01
HS1.Value = 0

form1.forecolor = vbblack
form1.backcolor = vbwhite
form_Paint
end sub

Private sub Form_Paint()
form1.cls
Dim X as long
Dim TempX as double
Dim LTempX as double
Dim TempY as double
Dim LTempY as double
tempx = sin(1 / 1000)
tempy = sin(1 / 1000)
for x = 1 to 360 step hs2.value
ltempx = tempx
tempx = sin(x / 1000)
ltempy = tempx
tempy = cos(x / 1000)
form1.line(hs1.value + ltempx,vs1.value +ltempy)-(hs1.value +tempx,vs1.value +tempy)
next
end sub

Private sub HS1_Change()
form_Paint
end sub

Private sub HS2_Change()
form_Paint
end sub

Private sub VS1_Change()
form_Paint
end sub

Private sub HS1_Scroll()
form_Paint
end sub

Private sub HS2_Scroll()
form_Paint
end sub

Private sub VS1_Scroll()
form_Paint
end sub

Im endeffekt ist das nichts anderes als ne Mathematische Function [Sin(x / 1000)] die man mittels HS1 und VS1 der Form-Function [LINE] übergib, welche ne linie vom letzten punkt (ltempx und ltempy) zum neuen punkt (tempx, und tempy) zeichnet!

Die function Sin und Cos kann man nun durch eigene Math.Functionen ersetzen!, oder erweitern.


Greez
TPM
 
Zuletzt bearbeitet:
Hallo,

erstmal danke für die Antworten.

Das mit dem Scrollen ist schon echt gut, aber ich muß eine Wertetabelle (Array) als eine grafische Kurve darstellen.

Diese Kurve soll im Hintergrund automatisch gescrollt werden, d.h. es ist immer nur ein bestimmter Ausschnitt zu sehen.

Wie kann man so etwas realisieren ?

Danke für Eure Antworten !
 
isrt im grunde nichts anderes!

Man kann das ganze auch zoomen! musst nur deine Koordinaten mit einem "Zoom-Faktor" deiner wahl multiplizieren!

Das Wandern kannste auch automatisieren! Via Timer und oder "randomize" bzw. int((rnd * Screen.Width)+1) ... das ist eine zufällig horizontale positionierung ... oder anderen functionen.

Was die Wertetabelle angeht, die kannste ja anstelle der Math-Funktion verwenden!
Einfach ersetzen! ... in der Tabelle müssen sich ja auch Koordianten befinden ... also X und Y! die kannste ja direkt auf die "Line"-Function übergeben...

Code:
Private Type Pointapi
x as long
Y as long
end type

Dim TabelleD() as pointapi
Dim TabelleC as long

Code:
Dim X as long
for x = 1 to TabelleC-1
line (tabelled(x).x,tabelled(x).y)-(tabelled(x+1).x,tabelled(x+1).y)
next


Greez
Martin
 
Zuletzt bearbeitet:
Hallo ThePuppetMaster!

Vielen Dank für deine Antwort. Hab das mal ausprobiert. Kommt keine Beschwerde von Visual Basic aber leider auch keine Linie auf der Form. Woran könnte das wohl liegen?

Vielen Dank!
 
mhhh .. ist schwer zu sagen ... vieleicht liegts daran, das du versuchst Pixel-Daten auf Twips-Form zu zeichen...

Hilfe: Form -> Eigenschaften -> ScaleMode -> auf "Pixel" ändern

wenn deine Daten als Pixel-Koordinaten vorliegen, musste diese einstellung ändern.
Kannst auch die Werte umrechnen:
Code:
NeuerWertX = Wert(x).x * screen.TwipsperpixelX
NeuerWertY = Wert(x).y * screen.TwipsperpixelY

manchmal kanns sein, das die Form das nicht richtig refreshT ... dann musst du die "AutoRedraw" eigenschaft auf True setzen! DANN darfst du allerdings KEINEN Code in "Form_Paint" schreiben! sonnst bekommst du probleme mit der Ablauf-Reihenfolge!

Nachteil daran ist alerdings, das der Grafikaufbau langsamer ist! allerdings haste dafür kein Flakkern im Bild!

Wenn es schneller haben willst, musst du den Code wieder in "Form_Paint" schreiben, und AutoRedraw auf False setzen.

... momental fält mir auch nichts weiter ein ... muss ich mal schaun, vieleicht find ich noch was :)

Greetz
Martin
 
Hallo!

Vielen Dank für deine Hilfe!
Das mit dem Umrechnen hat geklappt jetzt zeichnet er das dahin, wo ich das hinhaben will!

Vielen Dank nochmal. Hast mir echt geholfen.
 
Zurück