Новые книги

Автор книги — выдающийся ученый, физик и кибернетик, создатель языка Рефал и нового направления в программировании, связанного с преобразованием программ. Известен широкому кругу отечественных читателей как составитель сборника “Физики шутят”. Вынужденный покинуть Родину, с 1977 года он живет и работает в США.

В этой книге В. Ф. Турчин излагает свою концепцию метасистемного перехода и с ее позиций прослеживает эволюцию мира от простейших одноклеточных организмов до возникновения мышления, развития науки и культуры. По вкладу в науку и философию монография стоит в одном ряду с такими известными трудами как “Кибернетика” Н. Винера и “Феномен человека” П. Тейяра де Шардена.

Книга написана ярким образным языком, доступна читателю с любым уровнем подготовки. Представляет особый интерес для интересующихся фундаментальными вопросами естествознания.

Замечания по электронной версии книги присылайте, пожалуйста, членам редакционного совета. Спасибо!
Сегодня успех или провал компании все больше зависит от уровня вовлеченности клиентов и сотрудников. Как пробиться сквозь информационный шум? Чем сегодня можно заинтересовать новое поколение, выросшее и буквально помешанное на играх? С одной стороны, игры часто воспринимаются как проблема, с другой – это единственная область, куда мы сами хотим быть вовлечены.

В этой книге описана совершенно новая концепция геймификации, выстроенная с учетом современных реалий. С помощью нее становится возможным на длительное время привлекать новых клиентов, мотивировать и удерживать талантливых сотрудников и добиваться успеха в условиях жесткой конкуренции.

Рисование геометрических фигур

Рисование геометрических фигур

Оглавление

Рисование в окне
Контекст отображения
Установка атрибутов
Определение атрибутов
Рисование фигур
Аплет Draw
Исходные тексты
Проект аплета

В этом разделе мы опишем методы класса Graphics, предназначенные для рисования элементарных геометрических фигур, таких как линии, прямоугольники, окружности и так далее.

Линии

Для того чтобы нарисовать прямую тонкую сплошную линию, вы можете воспользоваться методом drawLine, прототип которого приведен ниже:

public abstract void drawLine(int x1, 
  int y1,int x2, int y2);

Концы линии имеют координаты (x1, y1) и (x2, y2), как это показано на рис. 1.

Рис. 1. Рисование прямой линии

К сожалению, в контексте отображения не предусмотрены никакие атрибуты, позволяющие нарисовать пунктирную линию или линию увеличенной толщины.

Прямоугольники и квадраты

Среди методов класса Graphics есть несколько, предназначенных для рисования прямоугольников. Первый из них, с именем drawRect, позволяет нарисовать прямоугольник, заданный координатами своего левого верхнего угла, шириной и высотой:

public void drawRect(int x, int y, 
  int width, int height);

Параметры x и y задают, соответственно, координаты верхнего левого угла, а параметры width и height - высоту и ширину прямоугольника (рис. 2).

Рис. 2. Рисование прямоугольника

В отличие от метода drawRect, рисующего только прямоугольную рамку, метод fillRect рисует заполненный прямоугольник. Для рисования и заполнения прямоугольника используется цвет, выбранный в контекст отображения (рис. 3).

Рис. 3. Рисование заполненного прямоугольника

Прототип метода fillRect приведен ниже:

public abstract void fillRect(int x, int y, 
  int width, int height);

Метод drawRoundRect позволяет нарисовать прямоугольник с закругленными углами:

public abstract void drawRoundRect(int x, 
  int y, int width,
  int height, int arcWidth, int arcHeight);

Параметры x и y определяют координаты верхнего левого угла прямоугольника, параметры width и height задают, соответственно его ширину и высоту.

Размеры эллипса, образующего закругления по углам, вы можете задать с помощью параметров arcWidth и arcHeight. Первый из них задает ширину эллипса, а второй - высоту (рис. 4).

 

Рис. 4. Рисование прямоугольника с закругленными углами

Метод fillRoundRect позволяет нарисовать заполненный прямоугольник с закругленными углами (рис. 5).

Рис. 5. Рисование заполненного прямоугольника с закругленными углами

Назначение параметров этого метода аналогично назначению параметров только что рассмотренного метода drawRoundRect:

public abstract void fillRoundRect(int x,
 int y,
 int width, int height,
 int arcWidth, int arcHeight);

Метод fill3Drect предназначен для рисования выступающего или западающего прямоугольника:

public void fill3DRect(int x, int y,
  int width, int height, boolean raised);

Если значение параметра raised равно true, рисуется выступающий прямоугольник, если false - западающий. Назначение остальных параметров аналогично назначению параметров метода drawRect.

Многоугольники

Для рисования многоугольников в классе Graphics предусмотрено четыре метода, два из которых рисуют незаполненные многоугольники, а два - заполненные.

Первый метод рисует незаполненный многоугольник, заданный массивами координат по осям X и Y:

public abstract void drawPolygon(
  int xPoints[],
  int yPoints[], int nPoints);

Через параметры xPoints и yPoints передаются, соответственно, ссылки на массивы координат по оис X и Y. Параметр nPoints задает количество точек в массивах.

На рис. 6 показан многоугольник, нарисованный методом drawPolygon.

Рис. 6. Многоугольник, нарисованный методом drawPolygon

В этом многоугольнике шесть вершин с координатами от (x0, y0) до (x5, y5), причем для того чтобы он стал замкнутым, координаты первой и последней вершины совпадают.

Второй метод также рисует незаполненный многоугольник, однако в качестве параметра методу передается ссылка на объект Polygon:

public void drawPolygon(Polygon p);

Класс Polygon достаточно прост. Приведем описание его полей, конструкторов и методов:

Поля класса

  • npoints

Количество вершин

public int npoints;
  • xpoints

Массив координат по оси X

public int xpoints[];
  • ypoints

Массив координат по оси Y

public int ypoints[]

Конструкторы

public Polygon ();
public Polygon(int xpoints[], 
  int ypoints[], int npoints);

Методы

  • addPoint

Добавление вершины

public void addPoint(int x, int y);
  • getBoundingBox

Получение координат охватывающего прямоугольника

public Rectangle getBoundingBox();
  • inside

Проверка, находится ли точка внутри многоугольника

public boolean inside(int x, int y);

Ниже мы показали фрагмент кода, в котором создается многоугольник, а затем в него добавляется несколько точек. Многоугольник рисуется методом drawPolygon:

Polygon p = new Polygon();
p.addPoint(270, 239);
p.addPoint(350, 230);
p.addPoint(360, 180);
p.addPoint(390, 160);
p.addPoint(340, 130);
p.addPoint(270, 239);
g.drawPolygon(p);

Если вам нужно нарисовать заполненный многоугольник (рис. 7), то для этого вы можете воспользоваться методами, приведенными ниже:

public abstract void fillPolygon(
 int xPoints[],
 int yPoints[], int nPoints);

public void fillPolygon(Polygon p);

Первый из этих методов рисует многоугольник, координаты вершин которого заданы в массивах, второй - получая объект класса Polygon в качестве параметра.

Рис. 7. Многоугольник, нарисованный методом fillPolygon

Овалы и круги

Для рисования окружностей и овалов вы можете воспользоваться методом drawOval:

public abstract void drawOval(
  int x, int y,
  int width, int height);

Параметры этого методы задают координаты и размеры прямоугольника, в который вписывается рисуемый овал (рис. 8).

Рис. 8. Рисование овала

Метод fillOval предназначен для рисования заполненного овала (рис. 9). Назначение его параметров аналогично назначению параметров метода drawOval:

public abstract void fillOval(
  int x, int y,
  int width, int height);

Рис. 9. Рисование заполненного овала

Сегменты

Метод drawArc предназначен для рисования незаполненного сегмента (рис. 10). Прототип этого метода приведен ниже:

public abstract void drawArc(
 int x, int y,
 int width, int height, 
 int startAngle, int arcAngle);

Рис. 10. Рисование незаполненного сегмента

Параметры x, y, width и height задают координаты прямоугольника, в который вписан сегмент.

Параметры startAngle и arcAngle задаются в градусах. Они определяют, соответственно, начальный угол и угол разворота сегмента.

Для того чтобы нарисовать заполненный сегмент, вы можете воспользоваться методом fillArc:

public abstract void fillArc(int x, int y,
  int width, int height, 
  int startAngle, int arcAngle);

Задание области ограничения

Если для окна аплета задать область ограничения, то рисование будет возможно только в пределах этой области. Область ограничения задается методом clipRect, прототип которого мы привели ниже:

public abstract void clipRect(
 int x, int y,
 int width, int height);

Параметры x, y, width и height задают координаты прямоугольной области ограничения.

Копирование содержимого прямоугольной области

Метод copyArea позволяет скопировать содержимое любой прямоугольной области окна аплета:

public abstract void copyArea(
 int x, int y,
 int width, int height, int dx, int dy);

Параметры x, y, width и height задают координаты копируемой прямоугольной области. Область копируется в другую прямоугольную область такого же размера, причем параметры dx и dy определяют координаты последней.