Среда, 04.10.2023, 00:10
Информатика и математика в Плесской школе
Приветствую Вас Гость | 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.
 
 
Поиск
Календарь
«  Октябрь 2023  »
ПнВтСрЧтПтСбВс
      1
2345678
9101112131415
16171819202122
23242526272829
3031
Архив записей
Друзья сайта
  • Официальный блог
  • Сообщество uCoz
  • FAQ по системе
  • Инструкции для uCoz
  • Учительский портал
    Copyright MyCorp © 2023