Глава 4
Исходники и exe-файл программы находятся ЗДЕСЬ
Для того, чтобы построить кривую Коха, необходимо научиться чертить приведенную на рис 4.6 фигуру, для любых данных точек (X1, Y1) и (X2, Y2).
Точки (Xa, Ya)(Xb, Yb) и (Xc, Yc) определяются по формулам:
alpha = atan2(Y2-Y1, X2-X1);
R = sqrt((X2-X1)*(X2-X1)+(Y2-Y1)*(Y2-Y1));
Xa = X1 + R*cos(alpha)/3
Xc = Xa + R*cos(alpha - M_PI/3)/3
Xb = X1 + 2*R*cos(alpha)/3
На псевдокоде алгоритм построения кривой Коха порядка .. на отрезке (X1,Y1,X2,Y2) выглядит следующим образом:
Соответствующий код на С++ абсолютно прямолинеен:
void Koch(CPaintDC* pdc1, int order, int X1, int Y1, int X2, int Y2)
{
if(order == 0)
{
pdc1->MoveTo(X1,Y1);
pdc1->LineTo(X2,Y2);
}
else
{
double alpha = atan2(Y2-Y1, X2-X1);
double R = sqrt((X2-X1)*(X2-X1)+(Y2-Y1)*(Y2-Y1));
double Xa = X1 + R*cos(alpha)/3,
Ya = Y1 + R*sin(alpha)/3;
double Xc = Xa + R*cos(alpha - M_PI/3)/3,
Yc = Ya + R*sin(alpha - M_PI/3)/3;
double Xb = X1 + 2*R*cos(alpha)/3,
Yb = Y1 + 2*R*sin(alpha)/3;
int Xa1 = (int)Xa;
int Ya1 = (int)Ya;
int Xc1 = (int)Xc;
int Yc1 = (int)Yc;
int Xb1 = (int)Xb;
int Yb1 = (int)Yb;
Koch(pdc1,order - 1, X1, Y1, Xa1, Ya1);
Koch(pdc1,order - 1, Xa1, Ya1, Xc1, Yc1);
Koch(pdc1,order - 1, Xc1, Yc1, Xb1, Yb1);
Koch(pdc1,order - 1, Xb1, Yb1, X2, Y2);
}
}
Построить кривую N-го порядка теперь можно с помощью вызова функции:
Koch(pdc, 4, ptStart.x, ptStart.y, ptEnd.x, ptEnd.y);
Передаем в параметры: контекст для рисования, порядок линии, начальную и конечную координаты линии.
Кривая Коха четвертого порядка.
Назад |
Начало урока |
Вверх |
Вперед
Содержание