Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.12.2010, 08:14   #1
Isa
Пользователь
 
Регистрация: 21.10.2009
Сообщений: 15
По умолчанию рисование в WinApi - кленовый лист

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




А) Структурный тип, описывающий характеристики изображения:


struct FERN
{
int x,y; // координаты лев. верх. угла изобр. (характеристика - местоположение)
int h; // высота листа (характеристика - размер)
COLORREF color; // цвет линии (характеристика - цвет изображения)
};

Б) Псевдокод, предназначенный для модификации и использования в качестве функции для отрисовки изображения. Контекст отображения передается через параметр hDC, а характеристики изображения - при помощи структуры, содержащей значения этих характеристик:


void fern(HDC hDC,struct FERN frn) // функция вывода листа папоротника
{
long MaxIteration=frn.h*100l; // число итераций
static double x0=0,y0=0,xx,yy, x,y;

// таблица коэффициентов для данного фрактального изображения
double a[4]={ 0.00, 0.85, 0.20,-0.15};
double b[4]={ 0.00, 0.04,-0.26, 0.28};
double c[4]={ 0.00,-0.04, 0.23, 0.26};
double d[4]={ 0.16, 0.85, 0.22, 0.24};
double e[4]={ 0.00, 0.00, 0.00, 0.00};
double f[4]={ 0.00, 1.60, 1.60, 0.44};

for(int i=0; i<MaxIteration; i++) // рисуем очередной пиксел (0<=i<MaxIteration)
{
// определение координат
int k=rand()%100+1;
if(k<=1) k=0;
else if(k>1&&k<=86) k=1;
else if(k>86&&k<=93) k=2;
else if(k>93&&k<=100) k=3;

xx=a[k]*x0+b[k]*y0+e[k]; yy=c[k]*x0+d[k]*y0+f[k];
x0=xx; y0=yy;

x= frn.x+(int)(x0*frn.h/11+frn.h/4); y= frn.y+(int)(y0*(-frn.h)/11+ frn.h);

// вывод очередного пиксела (функция SetPixel)
… нарисовать цветом frn.color пиксел с координатами (x, y)
}
}

В) В оконной функции главного окна приложения объявить статическую переменную frn типа struct FERN для хранения значений характеристик изображения. Значения характеристик будут случайным образом задаваться при получении сообщения WM_PAINT.



Г) При обработке сообщения WM_PAINT присвоить значения характеристикам изображения случайные значения (функция rand) и отрисовать его полностью:


получить контекст отображения;
получить размер рабочей области окна (функция GetClientRect);
присвоить :
frn.h - случайное значение в диапазоне от 20 до разности высоты окна и 20;
frn.x - случайное значение в диапазоне от 0 до разности ширины окна и frn.h/2;
frn.у - случайное значение в диапазоне от 0 до разности высоты окна и frn.h;
frn.color - случайное значение цвета: RGB(rand()%255,rand()%255,rand()%25 5);
вызывать функцию fern, передав контекст отображения и структуру с характеристиками;
освободить контекст отображения.

Д) Создать исполняемый модуль и проверить его работу. Для проверки правильности работы приложения необходимо, например, после запуска приложения сначала минимизировать его главное окно, а затем опять восстановить размер окна. Изображение дожно появиться в другом месте окна и иметь новые значения характеристик.
Изображения
Тип файла: jpg 12.jpg (50.5 Кб, 150 просмотров)
Вложения
Тип файла: txt как я сделал.txt (5.7 Кб, 142 просмотров)
Тип файла: txt исходный код моя первая работа.txt (4.5 Кб, 141 просмотров)
Isa вне форума Ответить с цитированием
Старый 16.02.2011, 14:38   #2
Digit@ll
Brainsbreaker
Пользователь
 
Аватар для Digit@ll
 
Регистрация: 07.02.2011
Сообщений: 26
По умолчанию

Ну где ж это кленовый лист, скорей папоротник.
Digit@ll вне форума Ответить с цитированием
Старый 16.02.2011, 15:24   #3
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Забыл добавить волшебное слово: выполнять, с**и!
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Старый 26.03.2011, 15:29   #4
Romus
Новичок
Джуниор
 
Регистрация: 11.03.2011
Сообщений: 1
По умолчанию

Если нужно могу выложить готовый код)
Romus вне форума Ответить с цитированием
Старый 27.03.2011, 05:21   #5
Digit@ll
Brainsbreaker
Пользователь
 
Аватар для Digit@ll
 
Регистрация: 07.02.2011
Сообщений: 26
По умолчанию

Тю, конечно нужно, вылаживай.
Digit@ll вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Копирование строк таблицы по условию одной ячейки из Лист 1 в Лист 2 Людвиг Microsoft Office Excel 5 25.10.2014 11:46
WinAPI for me Kazimir Фриланс 4 14.12.2009 14:36
Рисование в WinApi nazavrik Win Api 13 30.08.2009 23:54
Рисование на форме созданной на WinApi N!ckeL Win Api 3 30.04.2008 19:02