Легко добавить к классу Canvas функциональность, которая будет «управлять черепахой». Сначала к числу частных (private) элементов данных добавляется CD. Затем добавим три функции:

1. turnToffloat angle). Эта функция задает текущее направление черепахи, равное заданному углу (angle); реализация функции имеет вид

void Canvas:: turnTo(float angle) {CD=angle:}

1 Черепашья графика была введена Сеймором Папертом (Seymour Papert) в MIT (Massachussets Institute of Technologies - Массачусетсский технологический институт) как часть языка LOGO для обучения детей программированию.

3.5. Относительное рисование

2, turnffloat angle). Эта подпрограмма поворачивает черепаху на angle градусов против часовой стрелки; реализация функции имеет вид

void Canvas:: turn(angle){CD += angle:}

Для поворота вправо используется отрицательный аргумент. Отметим, что turn обеспечивает относительные изменения направления; мы задаем не направление, а только изменение направления. Это простое отличие предоставляет огромные возможности при рисовании сложных фигур с помощью черепахи.

3. forward (float dist. int isVisible). Эта команда перемещает черепаху вперед по прямой из текущей позиции CP на расстояние dist в текущем направлении CD, после чего обновляет СР. Если isVisible не равно нулю, то рисуется видимая прямая линия; в противном случае не рисуется ничего.

Френсис Хилл

Рис. 3.22. Результат действия подпрограммы forward()

Из рис. 3.22 видно, что, двигаясь вперед в направлении CD, черепаха перемещается в направлении х на расстояние distx cos(n х CD/180) и в направлении у на расстояние dist х sin(n х CD/180), поэтому forward О реализуется следующим образом:

void Canvas:: forward(float dist. int isVisible) {

const float RadPerDeg=0.017453393: // radians per degree // радиан в градусе

float x - CP.x + dist * cos(RadPerDeg * CO);

float у - СР.у + dist * sin(RadPerDeg * CO);

if(isVisible)

lineTo(x. y):

else

moveTo(x. y):

}

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


⇐ Предыдущая| |Следующая ⇒