Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Архив2 / курсовая docx100 / Kursovaya_rabota_-_kopia.docx
Скачиваний:
50
Добавлен:
07.08.2013
Размер:
543.16 Кб
Скачать

2 Описание алгоритмов

2.1 Построение кривой по четырем заданным точкам

      1. Вычислить приближенную длину кривой по формуле (1).

      2. Принять шаг параметра , параметр t = 0.

      3. Получить значение следующей точки, принадлежащей кривой, из уравнения (2).

      4. Соединить прямой предыдущую точку с новой. Если t = 1 – закончить, иначе, увеличить t на dt и перейти к шагу 3.

2.2 Построение составной кривой

    1. Определить количество точек в массиве. Если оно делится на три с остатком единица, то перейти к шагу 2, иначе закончить.

    2. Взять первые четыре точки массива.

    3. Построить кривую по четырем точкам.

    4. Если достигнут конец массива, то закончить, иначе перейти к шагу 5.

    5. Взять четвертую точку предыдущего сегмента и три следующие за ней точки массива и перейти к шагу 3.

2.3 Выбор пользователем точки на составной кривой

  1. Считать координаты курсора в момент щелчка левой кнопкой мыши, сохранив как точку pt.

  2. Взять точки начального сегмента составной кривой

  3. Выполнить пункты 1-3 алгоритма 2.1.

  4. Если t = 1, рассмотрен последний сегмент кривой и разность координат pt и рассчитанной точки, принадлежащей кривой, больше 2, то закончить. Иначе если t = 1, разность координат pt и рассчитанной точки больше 2, но рассмотрен не последний сегмент кривой, то взять точки следующего сегмента и перейти к шагу 3. Иначе если t < 1 и разность координат pt и рассчитанной точки больше 2, то перейти к шагу 5. Иначе если t < 1 и разность координат pt и рассчитанной точки меньше 2, то перейти к шагу 6.

  5. Увеличить t на dt и, получив значение следующей точки, принадлежащей кривой, из уравнения (2), перейти к шагу 4.

  6. Закрасить прямоугольник в окрестности двух пикселей от выбранной точки, принадлежащей кривой.

  7. Вычислить направляющие точки по формулам:

; , где P0 – выбранная пользователем точка, P1 – правая точка сегмента кривой, P2 – левая точка.

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

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

3 Описание структуры по

3.1 Структура по

Рисунок 3. Структура программы

int CALLBACK WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine,int nCmdShow) – точка входа в программу. В данной функции приложение выполняет необходимые действия по собственной инициализации, созданию и отображению главного окна.

Параметры: hInstance - дескриптор текущего экземпляра окна;

hPrevInstance – дескриптор предыдущего экземпляра окна;

lpCmdLine – указатель на командную строку;

nCmdShow – показывает состояние окна (режим отображения).

LRESULT CALLBACK MainWindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) – функция, обрабатывающая сообщения, поступающие окну.

Параметры: hwnd – дескриптор окна;

uMsg – сообщение;

wParam и lParam – параметры, задающие дополнительную информацию о сообщении, точное значение зависит от сообщения.

Вызываемые функции: при выборе пользователем пункта «Выход» - DestroyWindow; при поступлении сообщения завершения программы – PostQuitMessage; при движении мыши – OnMouseMove; при сообщении перерисовки окна – DrawTestScene.

BOOL DestroyWindow(HWND hWnd) – функция разрушающая окно.

Параметр: hWnd – дескриптор окна.

void PostQuitMessage(int nExitCode) - указывает системе, что поток сделал запрос на то, чтобы завершить свою работу.

Параметр: nExitCode – код завершения прикладной программы.

void DrawTestScene(DrawingContext* ctx, HWND hwnd, POINT pt) – функция рисования окна. Функция очищает окно, рисует кривую и ее определяющие точки.

Параметры: ctx – контекст рисования;

hwnd – дескриптор окна;

pt – положение курсора.

Вызываемые функции: для вычисления длины кривой – GetLenght; для последовательного определения координат точек, принадлежащих кривой – BCoord, для вычисления направляющих точек узла, выбранного пользователем, – QUAD.

void OnMouseMove(HWND hwnd, POINT pt, DWORD dwFlags, DrawingContext* ctx) – функция, обрабатывающая изменение мышью положения определяющих точек кривой.

Параметры: hwnd – дескриптор окна;

pt – положение курсора;

dwFlags – параметры перемещения мыши;

ctx – контекст рисования.

double GetLenght(Point* points) – функция возвращает длину кривой.

Параметр: points – массив определяющих точек сегмента кривой.

int BCoord(int x0, int x1, int x2, int x3, double t) – возвращает координаты принадлежащей кривой точки, соответствующей заданному значению параметра.

Параметры: x0, x1, x2, x3 – координата определяющих точек сегмента кривой;

t – параметр кривой.

void QUAD(DrawingContext* ctx, Point* p) – функция вычисляет направляющие точки выбранного пользователем узла и записывает их в массив определяющих точек кривой.

Параметры: ctx – контекст рисования;

p – точка, выбранная пользователем.

Соседние файлы в папке курсовая docx100