зуальну плавність зрушення.
Програма дозволяє наближати / видаляти зображення, ведучи облік в цілочисельний змінної zoom, значення якої формує коефіцієнт наближення за формулою. Саме по собі наближення обчислюється щодо центру зображення. Але, в залежності від положення курсора миші, також йде і перерахунок зсуву на області відображення для зручності користувача.
Перетворення зображення здійснюється аффіннимі перетвореннями підтримуваними бібліотекою Java. Всі ці функції дозволяють користувачеві розташовувати зображення на екрані для зручної роботи з ним.
) Точка. Точка є об'єктом користувача класу G_Point і визначається: координатами в області відображення на момент її установки (center), вимірами області відображення dim.width і dim.height, при яких вона була встановлена ??і полями multx=z * sx і multy=z * sy , де z - коефіцієнт наближення / видалення, а sx=dim.width / w, sy=dim.height / h - коефіцієнти стиснення по x і y, відповідно. Здес w, h - вимірювання.
Визначення: набір значень {dim.width, dim.height, multx, multy} назвемо умовою.
Визначення: наведеними координатами точки p (x, y) до умов B={dw, dh, mx, my} в умовах A={dim.width, dim.height, multx, multy} називаються такі координати x, y що
x=(x + dx - x_c) * zx + x_c=- (- (y + dy) + y_c) * zy + y_c,
де=(dw - dim.width) / 2;=(dh - dim.height) / 2; x_c=(dw) / 2y_c=(dh) / 2zx=mx / multx p>
double zy=my / multy
Відображення точки здійснюється через стандартні бібліотеки Java. Визначення координати на області відображення проводиться шляхом перерахунку координат точки, враховуючи її умова при ініціалізації і умова, характерне для поточного стану програми, тобто обчислюються наведені координати точки в її умовах до поточних умов. Потім ці наведені координати зміщуються на x_init, у_init. У підсумку отримуємо координати, необхідні для коректного відображення точки в області відображення. Такий підхід перерахунку координат відносно умови, в якому була поставлена ??крапка, дозволяє точно (за бажанням користувача) визначати її положення при наближенні, що може бути важливо при ручному виставленні точок і наступному обчисленні їх вихідних координат. Код методу paint об'єкта точки:
public void paint (Graphics2D g2, Dimension dim, double mx, double my, Point shift) {dx=(dim.width - (double) this.dim.width) / 2; dy=( dim.height - (double) this.dim.height) / 2; x_c=(dim.width) / 2; y_c=(dim.height) / 2; zx=mx / multx; zy=my / multy; z_x_ord= (center.x + dx - x_c) * zx + x_c; z_y_ord=- (- (center.y + dy) + y_c) * zy + y_c; g_center=new Point ((int) (z_x_ord) + shift.x, (int) (z_y_ord) + shift.y); D.Double circle=new Ellipse2D.Double (g_center.x - 2, g_center.y - 2, 4, 4); g2.fill (circle);
}
Частина коду методу paintComponent (Graphics g) області відображення, що здійснює відображення точок, збережених в програмі в списку points, має вигляд:
double z=pow (0.9, zoom); dim=this.getSize (); w=(int) image_w; h=(int) image_h; D g2=(Graphics2D) g; (w> ; dim.width | | h> dim.height) {(ListIterator i=points.listIterator (); i.hasNext ();) {sx=dim.width / (double) w; sy=dim.height/(double) h; _Point el=i.next ();. paint (g2, dim, sx * z, sy * z, new Point ((int) (- x_drag - x_in...