Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RFpro.ru: Программирование на C / C++


Хостинг портала RFpro.ru:
Московский хостер
Профессиональный ХОСТИНГ на базе Linux x64 и Windows x64

РАССЫЛКИ ПОРТАЛА RFPRO.RU

Лучшие эксперты по данной тематике

Асмик Гаряка
Статус: Академик
Рейтинг: 8461
∙ повысить рейтинг »
Коцюрбенко Алексей aka Жерар
Статус: Профессор
Рейтинг: 2716
∙ повысить рейтинг »
Boriss
Статус: Академик
Рейтинг: 2636
∙ повысить рейтинг »

/ КОМПЬЮТЕРЫ И СОФТ / Программирование / C/C++

Номер выпуска:1683
Дата выхода:13.09.2011, 16:00
Администратор рассылки:Киселёва Алёна aka Verena (Профессор)
Подписчиков / экспертов:292 / 169
Вопросов / ответов:1 / 1

Консультация # 183992: Уважаемые эксперты! Здравствуйте! Помогите пожалуйста с данными задачами.(Компьютерная графика).1. Составить программу(с блок-схемой) для представления графического объекта:Кривая В – сплайна по 10 точкам. По возможности без усложнений для понимания. И хорошо если будет совместимо с c++ builder.2. Составить программу(с блок схемой) вывода графика Ф...


Консультация # 183992:

Уважаемые эксперты! Здравствуйте! Помогите пожалуйста с данными задачами.(Компьютерная графика).1. Составить программу(с блок-схемой) для представления графического объекта:Кривая В – сплайна по 10 точкам. По возможности без усложнений для понимания. И хорошо если будет совместимо с c++ builder.2. Составить программу(с блок схемой) вывода графика Функция синус
Y=2.5*sin(X)+0.5. Аргумент и его диапазон: X [-2пи, 2пи]. Цвет графика/фона: белый
Зеленый.


Дата отправки: 08.09.2011, 15:27
Вопрос задал: life (Посетитель)
Всего ответов: 1
Страница онлайн-консультации »


Консультирует Jiraff (3-й класс):

Здравствуйте, life!
Среда C++Builder, согласно пожеланию пользователя.
Фрагмент из проекта типа VCL/Форма.
Добавляете в форму Form2 проекта компонент PaintBox.
На событие клика мыши записываете тот обработчик, который приложен выше в коде PaintBox1Click

Решены две задачи:

Сначала готовим площадку для рисования.
///////////////////////////////////////////////////////////////////////////////
TCanvas* gdi=Form2->PaintBox1->Canvas;
TPen* oldPen=gdi->Pen;
TPen* pn=new TPen();
pn->Width=3;
pn->Color=clWhite;
gdi->Pen=pn;
TPen* bpn=new TPen();
bpn->Width=2;
bpn->Color=clOlive;
TBrush* br=new TBrush();
br->Color=clGreen;
gdi->Brush=br;
gdi->FillRect(TRect(0,0,400,250));
///////////////////////////////////////////////////////////////////////////////


1-ая - построение сплайна по 10 точкам (в примере дополнительно к сплайну рисуется десятиугольник по тем же точкам).< br>///////////////////////////////////////////////////////////////////////////////
///////// ДЕСЯТЬ ТОЧЕК //////////////////////////////////////
TPoint pnt[10]={TPoint(78,7), TPoint(123,30), TPoint(149,65), TPoint(123,100),
TPoint(78,123), TPoint(30,100), TPoint(7,65),
TPoint(30,30), TPoint(78,7)};
///////////////////////////////////////////////////////////////////////////////
gdi->Pen=bpn;
first=true;
///////////////////////////////////////////////////////////////////////////////
//// В ЦИКЛЕ ОТОБРАЖАЕМ ЛИНИЯМИ /////
//////////////// ДЕСЯТИУГОЛЬНИК ///////////////////////
for(int i=0; i<10; i++)
if(first)
{
gdi->MoveTo(pnt[i].X,pnt[i].Y);
first=false;
}
else
gdi->LineTo(pnt[i].X,pnt[i].Y);
gdi->Pen=pn;
///////////////////////////////////////////////////////////////////////////////
//////// В ЦИКЛЕ РИСУЕМ СПЛАЙНАМИ /////
gdi->MoveTo(pnt[0].X,pnt[0].Y);
for(int i=1; i<9; i++)
for(doub le t=0; t<=1; t+=0.01)
gdi->LineTo(Xt(pnt,i,t),Yt(pnt,i,t));
gdi->LineTo(pnt[9].X,pnt[9].Y);
///////////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////////
//////// ДЛЯ ВЫЧИСЛЕНИЯ ТОЧЕК ПО /////////
//////// КОТОРЫМ СТРОЯТСЯ СПЛАЙНЫ ///
//////// ОПРЕДЕЛЯЕМ ДВЕ ФУНКЦИИ //////////
int Xt(TPoint (&p)[],int i, double t)
{
double a0=(p[i-1].X+4*p[i].X+p[i+1].X)/6;
double a1=(p[i+1].X-p[i-1].X)/2;
double a2=(p[i-1].X-2*p[i].X+p[i+1].X)/2;
double a3=(p[i+2].X-3*p[i+1].X+3*p[i].X-p[i-1].X)/6;
double xt=((a3*t+a2)*t+a1)*t+a0;
return (int)xt;
}
int Yt(TPoint (&p)[],int i, double t)
{
double b0=(p[i-1].Y+4*p[i].Y+p[i+1].Y)/6;
double b1=(p[i+1].Y-p[i-1].Y)/2;
double b2=(p[i-1].Y-2*p[i].Y+p[i+1].Y)/2;
double b3=(p[i+2].Y-3*p[i+1].Y+3*p[i].Y-p[i-1].Y)/6;
double yt=((b3*t+b2)*t+b1)*t+b0;
return (int)yt;
}
///////////////////////////////////////////////////////////////////////////////


2-ая - построение синусоиды.
///////////////////////////////////////////////////////////////////////////////
const double kX=66.0;
const double kY=10.0;
const double pi=3.14;
bool first=true;
for(double x=-2*pi; x<2*pi; x+=0.01)
{
double y=2.5*sin(x)+0.5;
if(first)
{
gdi->MoveTo(x*kX,y*kY+125);
first=false;
}
else
gdi->LineTo(x*kX,y*kY+125);
}
///////////////////////////////////////////////////////////////////////////////

Консультировал: Jiraff (3-й класс)
Дата отправки: 12.09.2011, 02:51

5
нет комментария
-----
Дата оценки: 13.09.2011, 11:10

Рейтинг ответа:

НЕ одобряю 0 одобряю!


Оценить выпуск | Задать вопрос экспертам

главная страница  |  стать участником  |  получить консультацию
техническая поддержка  |  восстановить логин/пароль

Дорогой читатель!
Команда портала RFPRO.RU благодарит Вас за то, что Вы пользуетесь нашими услугами. Вы только что прочли очередной выпуск рассылки. Мы старались. Пожалуйста, оцените его. Если совет помог Вам, если Вам понравился ответ, Вы можете поблагодарить автора - для этого в каждом ответе есть специальные ссылки. Вы можете оставить отзыв о работе портале. Нам очень важно знать Ваше мнение. Вы можете поближе познакомиться с жизнью портала, посетив наш форум, почитав журнал, который издают наши эксперты. Если у Вас есть желание помочь людям, поделиться своими знаниями, Вы можете зарегистрироваться экспертом. Заходите - у нас интересно!
МЫ РАБОТАЕМ ДЛЯ ВАС!



В избранное