Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
|
Re: Hilfe bei Plotter und Umrechnung der Koordinaten
4. Feb 2006, 13:57
Hi,
also erstmal solltest du dir deine Berechnung der max. X- bzw. Y-Werte anschauen. Hier gäbe es einiges, was du vereinfachen kannst. Wie du schon sagst, steigt dein x in jedem Schritt um einen konst. Wert. Egal ob dieser positiv, negativ oder 0 ist, fakt ist dass du nur den ersten und letzten X-Wert beachten müsstest.
Wenn du mit x = 0 anfängst und in jedem Schritt 1 dazu addierst, nun ja, ist einfach monoton (sogar streng monoton) wachsend. Für negative Schritte gilt es analog fallend.
Was die Y-Werte angeht, so ist bräuchtest du auch nur zu schauen, ob der Wert 1 bzw. -1 erreicht wird, ist dies der Fall, so ist müsstest du schon gar nicht weitersuchen (ist halt sin), aber das ist hier egal.
Ich verstehe deine Nullpunktverschiebung noch nicht ganz. Wenn du nur im Positiven Zeichnen möchtest, so musst du nur um den negativen Wert verschieben. Du legst aber deinen Nullpunkt immer auf null, egal was du für max oder min Werte hast.
Was die Höhe oder Breite angeht, die du berechnen möchtest, so müsstest du schon etwas genauer sagen, was gegeben ist. Müsst ihr komplett selbst zeichnen? Gibt es ein Framework (also eine Funktion die ihr benutzen dürft), was sind halt die Vorgaben. In der Regel hast du einfach einen Canvas (eine Zeichenfläche) auf die du zeichnest.
Ich weiß nicht ob du den kennst, aber da findest du ne Menge zu in der Delphi-Hilfe. Ein Canvas wird dabei an sehr vielen Stellen benutzt, sowohl zum zeichnen in eine Bitmap, auf dein Form oder auf dem Drucker kommen einfach nur Canvas vor (die unterscheiden sich zwar, aber du kannst alle wie ein TCanvas behandeln).
Jedenfalls wirst du in der Regel eine feste Größe des Canvas haben, sagen wir du machst das mit einer Bitmap, dann ist die größe der Bitmap = Größe des Canvas.
Du weißt also wie groß deine Zeichenfläche ist und du weißt wieviele Punkte in x Richtung du zeichnen möchtest und wie viele in Y Richtung (halt Maximum - Minimum viele).
Jetzt musst du dass alles nur noch geschickt skalieren. Dazu brauchst du eigentlich nur den Dreisatz (gibt auch andere Wege, aber die will dein Lehrer sicher nicht sehen und sie würden dir weniger bringen). Du hast einfach nur ein Verhältnis dass du ausrechnen möchtest. Wenn du nicht genau weißt wie, dann überleg es dir an einem einfachen Beispiel. Geh davon aus, dass deine Bitmap genau 100 px hat, und du 10 Punkte zeichnen möchtest. Der erste Punkt liegt auf der 0,... Da kannst du also leicht berechnen, mit was du 10 multiplizierst, damit er möglichst exakt auf 100 liegt.
Dann mach es mal umgekehrt, du hast eine 10 px breite Bitmap und willst 100 Punkte zeichnen. Da jeder Punkt mindestens 1 px breit ist, kannst du also nur 10 punkte zeichnen. Das heißt du wirst wohl nicht alle nehmen können (auch hier kannst du schon im Kopf ausrechnen wieviele es sind).
Das was du im Kopf rechnest, ist natürlich auch durch den Rechner berechenbar. Und wenn du die Zahlen änderst, kann er dass immer noch ganz gut. Wichtig ist es also für dich, zu gucken ob du mehr Punkte zeichnen möchtest (in x Richtung) als du Pixel in der Bitmap hast. Ist dies der Fall, kannst du nicht jeden Punkt (in X Richtung) zeichnen. In Y-Richtung kannst du halt einen Rundungsfehler hinnehmen, so exakt muss es da nicht sein. Aber wenn du zwei Y-Werte am selben Pixel (X-Wert) zeichnest, sieht es nicht mehr nach einer Funktion aus (die hat max. einen Y-Wert pro X-Wert).
Hoffe ist grob klar was ich meine.
Jedenfalls ist das schon alles. Du berechnest die x und die y Skalierung (Verhältnis von Breite zu Anzahl der X-Werte und Verhältnis von Höhe zu Anzahl der y-Werte) und multiplizierst jeden Wert entsprechend.
Das ist auch alles was du bei H-Y beachten musst, du musst vorher skalieren. Wie du sicherlich weißt nimmt die Sinus Funktion über 2pi Werte von -1 bis 1 an. Das könntest du in 3 Pixel packen (1, 0, -1) und deine Funktion würde einfach nicht nach Sinus aussehen. In der Regel ist dein Bild deutlich höher als 3 Pixel. Dann skalierst du auch deine Werte entsprechend und siehst auch entsprechend mehr Zwischenwerte.
Gruß Der Unwissende
|