In Turbo-CPP sind die Abmessungen und die Ausrichtung der Image-Komponente vorgegeben (0,0,Image.Width,Image.Height). Um die Berechnung des Funktionsgraphen zu vereinfachen, wird neben dem Bildbereich ein Weltbereich angenommen. Ein Weltpunkt WP hat die Weltkoordinaten WP.x, WP.y und der zugehörige Bildpunkt BP hat die Bildkoordinaten BP.x, BP.y. Der Nullpunkt der Bildkoordinaten liegt links oben, der Nullpunkt der Weltkoordinaten zunächst im Mittelpunkt des Fensters. Ein Weltpunkt WP ist durch die Klasse WPunkt definiert:
class WPunkt //Weltpunkt (0/0) in Mitte {double x,y; };
Ein Bildpunkt BP ist durch folgende Klasse definiert:
class BPunkt //Bildpunkt {int x,y; };
In der Umrechnung von Welt- in Bildkoordinaten und umgekehrt soll zunächst der Zoomfaktor eingerechnet werden.
Im Programm soll dies durch die Werte zweier Trackbars oder Scrollbars realisiert werden.
Hier werden der Einfachheit halber die Bezeichnungen zoomhz und zoomvt verwendet. Der Wert von zoomhz ist genau die Anzahl der Pixel im Bildbereich, die der Länge 1 auf der x-Achse im Weltbereich entsprechen (analog für zoomvt).
Es ergeben sich somit folgende geometrische Verhältnisse:
zoomhz : 1 = (BP.x - Image→Width/2) : WP.x
zoomvt : 1 = (Image→Height/2 - BP.y) : WP.y
Somit ergibt sich folgender Zusammenhang, um die Bildkoordinaten (BP.x/BP.y) aus den Weltkoordinaten (WP.x/WP.y) zu berechnen:
BP.x :=zoomhz*WP.x +Image→Width/2)
BP.y := (Image→Height/2 -zoomvt*WP.y)
Analog kann man umgekehrt die Weltkoordinaten (WP.x/WP.y) aus den Bildkoordinaten (BP.x/BP.y) berechnen.
CBPunkt WeltZuBild(double x, double y) { //rechnet Weltkoordinaten in Bildkoordinaten um CBPunkt b; b.x=(int) (zoomhz*x+Form1->Image1->Width/2)+0.5; //runden auf Ganze b.y=(int) (Form1->Image1->Height/2-zoomvt*y)+0.5; return b; } CWPunkt BildZuWelt(int x, int y) { //rechnet Bild in Weltkoordinaten um CWPunkt w; w.x=round((double)(x-Form1->Image1->Width/2)/zoomhz); w.y=round((double)(Form1->Image1->Height/2-y)/zoomvt); return w; }