Здравствуйте. У меня такая задача.Необходимо, чтобы фигура меняла цвет в движении. Круг - от желтого до синего , звезда - от синего до красного. Суть проблемы такова, что не могу закрасить лучи звезды.
Вот код
Код:
long int cvet1 = RGB(255,255,0);//цвет круга
long int cvet2 = 0;//цвет звезды
double mash = 1; //масштаб фигуры
int napravlenie = 1;//направление движения круга
int rux=0;//выдвижение панели
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{}
/*center-центр круга, radius1-внешний радиус круга, radius2- внутренний радиус круга
luchi-лучи звезды
*/
void TForm1::zvezda(TPoint center, int radius1, int radius2, int luchi, double mash, TColor cvet1, TColor cvet2, double angle)
{
Refresh();
// масштаб внешнего и внутреннего радиуса
radius1 *= mash;
radius2 *= mash;
// рисуем окружность
Canvas->Pen->Color = cvet1;
Canvas->Brush->Color = cvet1;
Canvas->Ellipse(center.x - radius1, center.y - radius1, center.x + radius1 + 1, center.y + radius1 + 1);
Canvas->FloodFill(center.x, center.y, cvet1, fsBorder);
Canvas->Pen->Color = cvet2;
Canvas->Brush->Color = cvet2;
// переходим в "начальную точку" звезды
Canvas->MoveTo(center.x+sin(angle)*radius1, center.y-cos(angle)*radius1);
// рисуем лучи
for (int i = 1; i <= luchi; i++)
{
Canvas->LineTo(center.x+sin(angle+(i*2-1)*M_PI/luchi)*radius2, center.y-cos(angle+(i*2-1)*M_PI/luchi)*radius2);
Canvas->LineTo(center.x+sin(angle+(i*2-3)*M_PI/luchi)*radius2, center.y-cos(angle+(i*2-3)*M_PI/luchi)*radius2);
Canvas->MoveTo(center.x+sin(angle+(i*2-1)*M_PI/luchi)*radius2, center.y-cos(angle+(i*2-1)*M_PI/luchi)*radius2);
Canvas->LineTo(center.x+sin(angle+i*2*M_PI/luchi)*radius1, center.y-cos(angle+i*2*M_PI/luchi)*radius1);
}
Canvas->FloodFill(center.x, center.y, cvet2, fsBorder);
}
//===========================================================================
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Timer1->Enabled = true;
Button1->Enabled=false;
Button2->Enabled=true;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
Timer1->Interval = TrackBar1->Max - TrackBar1->Position + 1;
//масштаб
mash = StrToFloatDef(Edit1->Text, 1) / StrToFloatDef(Edit2->Text, 1);
// радиусы и кол-во лучей
int radius1 = 90, radius2 = 45, luchi = 6;
// кординаты центра фигуры
int x = Tag+radius1*mash, y = -100*sin(Tag*180./ClientWidth/15/M_PI)+ClientHeight-radius1*mash-1;
// фигура строится вначале в левом нижнем углу, туда и возвращается
//===========================================================================
// zvezda(TPoint(x, y), radius1, radius2, luchi, mash, TColor(RGB(cvet1*259, cvet1*15, cvet1*254)), TColor(RGB(cvet1*259, cvet1*15, cvet1*254)), Tag*180./M_PI/ClientWidth/50*StrToFloatDef(Edit4->Text, 0));
float B1 = (float)(ClientWidth-x)/ClientWidth*255,
R = (float)(ClientWidth-x)/ClientWidth*255,
GB = (float)x/ClientWidth*255,
B2 = (float)x/ClientWidth*255;
zvezda(TPoint(x, y), radius1, radius2, luchi, mash, TColor(RGB(B1, R, B2)), TColor(RGB(GB, 0, B1)), Tag*180./M_PI/ClientWidth/50*StrToFloatDef(Edit4->Text, 0));
//===========================================================================
// проверка на достижение фигурой границ формы
if (((x+radius1*mash >= ClientWidth || y-radius1*mash <= 0 || y+radius1*mash >= ClientHeight) && napravlenie > 0) || (x-radius1*mash <= 0 && napravlenie < 0))
{
// меняем направление движения
napravlenie *= -1;
Timer1->Enabled = false;
// задаем время, через которое фигура начнет двигаться в другую сторону
Timer2->Enabled = true;
Timer2->Interval= StrToFloatDef(Edit3->Text, 0)*1000+1;
}
// смещаем фигуру
Tag += napravlenie;
}