Пятница, 14.06.2024, 06:14
Информатика и математика в Плесской школе
Приветствую Вас Гость | RSS
Меню сайта
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
Форма входа
 
Метод базовой точки
 
При программировании сложных изображений, состоящих из множества элементов, используется метод, который называется методом базовой точки. Суть этого метода заключается в следующем:
1. Выбирается некоторая точка изображения, которая принимается за базовую.
2. Координаты остальных точек отсчитываются от базовой точки.
3. Если координаты точек изображения отсчитывать от базовой в относительных единицах, а не в пикселях, то обеспечивается возможность масштабирования изображения.

Например, нам нужно изобразить букву «О». Ее размеры зададим переменными a и b. Координаты углов показаны на рисунке. За базовую точку мы примем нижний левый угол, ее координаты будут (x,y). Остальные будем рассчитывать относительно ее. Напомним, что ось ОY направлена в низ. 
Толщину вертикальной части буквы обозначим  переменной с. Она будет составлять 30 процентов от ширины буквы. Для ее вычисления используем функцию Trunc. Которая округляет результат вычисления значения переменной с. Толщину горизонтальной части буквы обозначим d. Она будет составлять 10 процентов от высоты буквы. Координаты внутренней части вычисляем с использованием переменных c и d. (см. рисунок).
 
Текст программы изображающей букву "О"
program n1;
Uses Crt,GraphABC;
 var x,y,a,b,c,d:integer;
begin
   Clrscr;
   x:=100;
   y:=300;
   a:=300;
   b:=200;
   line(x,y,x+a,y);
   line(x+a,y,x+a,y-b);
   line(x+a,y-b,x,y-b);
   line(x,y-b,x,y);
   c:=trunc(a*0.3);
   d:=trunc(b*0.1);
   line(x+c,y-d,x+c,y-b+d);
   line(x+a-c,y-d,x+a-c,y-b+d);
   line(x+c,y-d,x+a-c,y-d);
   line(x+c,y-b+d,x+a-c,y-b+d);
   FloodFill(x+4,y-4,clRed) ;
end.
 
Недавно наткнулся на задачу, связанную с методом базовой точки. Хочу предложить ее решение. Хоть в ней и говорится, что диаметр окружности постоянный, его тоже можно масштабировать.
 
 
 
 
 
 
 
 
 
 
uses crt,graphabc;
var a,x,y:integer;
begin
 clrscr;
 write('Введи размер от 5-10 =');read(a);
 x:=50;
 y:=250;
 a:=a*20;
 line(x,y-trunc(a/4),x,y-trunc(a/2));
 line(x,y-trunc(a/2),x+trunc((a/4)*3),y-trunc(a/2));
 line(x+trunc(a/4),y,x+a,y);
 line(x+a,y,x+a,y-trunc(a/4));
 Arc(x+trunc(a/4),y-trunc(a/4),trunc(a/4),180,270);
 Arc(x+trunc((a/4)*3),y-trunc(a/4),trunc(a/4),0,90);
 circle(x+trunc(a/2),y-trunc(a/4),trunc(a/6));
end.
 
 
Поиск
Календарь
«  Июнь 2024  »
ПнВтСрЧтПтСбВс
     12
3456789
10111213141516
17181920212223
24252627282930
Архив записей
Друзья сайта
  • Официальный блог
  • Сообщество uCoz
  • FAQ по системе
  • Инструкции для uCoz
  • Учительский портал
    Copyright MyCorp © 2024