moveTo(first data point):
drawMarkerO:
// draw a marker there
// рисуем маркер здесь
for(each remaining data point)
// для каждой остающейся экспериментальной точки
{
lineToCthe next point): // draw the next line segment // рисуем следующий отрезок прямой
drawMarkerO; // draws it at the CP // рисует маркер в точке CP
центр обработки данных datahata.by в Беларуси.
}
На рис. 3.21 изображен маркер в форме стрелки, нарисованный с помощью подпрограммы из листинга 3.11. Текущие координаты этой стрелки расположены в ее самой верхней точке. Для большей гибкости стрелка задана четырьмя параметрами/, я, t и w, как показано на рисунке. Функция arrowQ исполь-
Дополнительные инструменты для рисования
зует только ИпеЯеК), причем нет ни одной ссылки на абсолютные координаты. Отметим, что хотя СР изменяются в процессе рисования, в конце они снова возвращаются к своему исходному состоянию. Следовательно, данная подпрограмма не дает никаких «побочных эффектов» (кроме самого рисования).
Листинг 3.11. Рисование стрелки посредством относительных перемещений и рисований void arrow(float f. float h. float t. float w) {
// assumes global Canvas object: cvs // предполагаем существование cvs -// глобального объекта класса Canvas
cvs.lineRel(-w - t/2. -f): // down the left side // вниз по левой стороне
cvs.lineReKw. 0):
cvs.lineReKO. -h);
cvs.lineReKt. 0);
// across // поперек
cvs.lineReKO. h): // back up // назад
cvs.lineReKw. 0); cvs.lineRel(-w - t/2. f):
}
3.5.2. Черепашья графика Последний инструмент, который мы добавляем здесь, чрезвычайно удобен. Он не только отслеживает с помощью СР, «где мы находимся», но и «направление, в котором нас ведут». Это - разновидность черепашьей графики, которая считается естественной в графическом программировании1. Идея состоит втом, что «черепаха», подобная перу перьевого плоттера, перемещается по странице, оставляя за собой след в виде отрезка прямой линии. Черепаха помещается в СР, указывая определенное направление. Оно называется текущим направлением (current direction - CD) и отсчитывается в градусах от положительного направления оси х против часовой стрелки (counterclockwise - CCW).