Autor Beitrag
afterstep
Hält's aus hier
Beiträge: 4


D7,K1,K3
BeitragVerfasst: Di 29.06.04 08:38 
Hallo2all!

Ich bin gerade dabei ein Programm zu entwicklen welches Sinus und Sinusähnliche Kurven auf einer Zeichenfläche darstellen können soll. Soweit so gut das war mal nicht das Problem. Das Problem ist nun das sich diese Kurven in jede Richtung skalieren lassen sollen ohne das es zu Ecken oder Verschiebungen kommen darf.

Leider schweigen sich die meisten Bücher über SetViewMode u.ä. aus. MSDN hab ich auch schon durch. Was ich bräuchte wäre ein Tutorial, Buch, Seite mit Informationen rund um Skalierungen, Clipping u.ä. Perfekt wäre es wenn es auf Delphi bezogen wäre muß aber nicht sein.

Wäre ein Hammer wenn jemand etwas wüsste!

lg.
afterstep


Moderiert von user profile iconPeter Lustig: Topic aus VCL (Visual Component Library) verschoben am Di 29.06.2004 um 10:10
Muetze1
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 346



BeitragVerfasst: Di 29.06.04 09:34 
Moin!

Wieso API? Das ist doch ein reines mathematisches Problem - das kannst du doch alles selber hinrechnen. Was genau ist das Problem welches du denn jetzt hast?

MfG
Muetze1
afterstep Threadstarter
Hält's aus hier
Beiträge: 4


D7,K1,K3
BeitragVerfasst: Di 29.06.04 09:40 
u.U. bin ich das bisher falsch angegangen. Ich habs versucht mathematisch an ranzukommen allerdings gab's dann immer gewissen Seiteneffekte (Rundungsfehler) sodas die Kurven am Ende nicht mehr Exakt genug waren.

Ich glaube ich sollte erwähnen das es bei den Kurven nicht unveränderlich sind sonder es auch zu einer Stauchung der Zeitachse kommen kann. d.h. das wesentlich mehr Schwingungen sichtbar sein können.
Muetze1
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 346



BeitragVerfasst: Di 29.06.04 09:49 
Moin!

Grundlegend hast du zum zeichnen ja 2 Ansatzmöglichkeiten:

1. Du gehst die dargestellte Achse mit ihren Anstrichen durch in einer Schleife mit einer festlegbaren Schrittweite.
2. Du gehst in einer Schleife einfach die Pixel durch, auf der die x Achse sich verteilt und rechnest für jeden X Wert den
der Pixel darstellt wiederrum einen y Wert aus.

Dabei wäre 2. die beste Lösung, da dir so nix entgeht an Daten und du alle sichtbaren Teile berechnest. Auch hast du das Problem mit der Schrittweite nicht mehr - auch deine Stauchung sollte keine Probleme darstellen. Grundlegend musst du dir nun noch eine Funktion bauen die von einem x-Pixelwert den x-Wert der Achse an dem Punkt berechnet was du dann deiner Formel übergeben kannst um den y Wert zu ermitteln. Diese musst du dann auf die Skalierung deiner Y Achse anpassen und dann hast du den Y Wert.

MfG
Muetze1
afterstep Threadstarter
Hält's aus hier
Beiträge: 4


D7,K1,K3
BeitragVerfasst: Di 29.06.04 10:26 
Bin mir nicht ganz sicher ob ich es richtig verstanden haben aber so was ähnliches hab ich schon probiert. Ich glaube ich erklär das ganze nochmals damit ein paar Eigenheiten ans Licht kommen.


Es geht darum ein Sinus ähnliches(!) Kurvengebilde mit einem fixen Start und Endpunkt (in Bezug aufs Datum) auf einer frei skalierbaren Zeichenfläche zu zeichnen.
Es geht dabei um Messwerte welche Tagen zugeordnet sind.
Die Anzahl der Tage welche dargestellt werden kann dabei schwanken (z.w. 12 und 768). Jeder Tag hat genau einen Messwert.
Links (Die Kurven sind vertikal) gibt's eine Datumsleiste auf welcher das Datum angezeigt werden (fix 13 Ausgaben; je nach Schrittweite mit Sprüngen).

Die Darstellung muß: auf jeden Fall exakt sein. d.h. wenn zu einem Tag ein Extremwert vorhanden ist, muß das in der Grafik bei jeder Schrittweite sichtbar sein (eben bei dem tag).

Die Zeichenfläche sollte sich in alle Richtungen skalieren lassen.

Es können keine Tage am Anfang eingefügt werden oder Tage am ende entfernt werden (auch anders rum nicht ;) ).

Ich kann die Kurven nun soweit zeichen das alles passt bis auf die Skallierung. Wenn sich eine "ungerade" Höhe der Zeichenfläche ergibt muß ich aber entweder inter. oder extrapolieren was das Ergebniss auf Dauer verfälscht. Es entstehen Knicke oder Stauchungen was einfach unschön aussieht.

Ich beiß mir langsam die Zähne an dem Ding aus...

Oder falls jemand eine Komponente kennt die das schöner schneller und einfacher löst (kann ruhig was kosten) wäre mir auch schon geholfen.
Segelflieger
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 124

WinXP Pro
D7 Prof
BeitragVerfasst: Di 29.06.04 18:42 
Könntest du evtl. ein Bild posten, auf dem das Problem ersichtlich wird?`

Wenn ich es richtig verstanden habe, ist dein Problem, dass die Kurve gestaucht/gestreckt wird, wenn man die größe (bzw. das Seitenverhältnis) der Zeichenfläche ändert?

_________________
Früher hatten die Menschen Angst vor der Zukunft. Heute muss die Zukunft Angst vor den Menschen haben.
afterstep Threadstarter
Hält's aus hier
Beiträge: 4


D7,K1,K3
BeitragVerfasst: Fr 02.07.04 06:38 
Hallo!

Hier ist mal ein Bild ohne Skalierung. Das Datum links kann sich wie gesagt verändern (und je nach Schrittweite der Abstand dazwischen).

user defined image

Hoffe das hilft weiter.
Segelflieger
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 124

WinXP Pro
D7 Prof
BeitragVerfasst: Fr 02.07.04 09:46 
Ich verstehe noch nicht, warum Knicke/Stauchungen entstehen, wenn die Größe der Zeichenfläche ungerade ist. Bei einer so großen Zeichenfläche dürfte es doch nicht auffallen, ob sie einen Pixel mehr oder weniger hoch ist?

Oder meinst du mit Skalierung die Schrittweite des Datums und mit Knicken die Knicke, die entstehen, weil du zwei Tage immer mit einer Linie verbindest? Die ließen sich wohl kaum ohne interpolierung vermeiden..

_________________
Früher hatten die Menschen Angst vor der Zukunft. Heute muss die Zukunft Angst vor den Menschen haben.