![]() |
Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.
![]() ![]() |
![]() |
Valkirie |
![]() ![]()
Сообщение
#1
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 36 Пол: Женский Репутация: ![]() ![]() ![]() |
Началась графика и я решила, что наверное лучше было вешаться сразу, но теперь уже отступать некуда...
![]() Вообщем задание у меня такое: Калейдоскоп. PaintBox делится на 4 части. В одной из них выбирается случайно прямоугольник и закрашивается в случайно выбранный цвет. В остальных частях рисуются прямоугольники того же размера цвета, расположенные симметрично. Для восстановления запоминать 20 предыдущих прямоугольников. И всё бы хорошо... вот только в моём понятие калейдоскоп это такая штучка наполненная осколками цветного стекла... и я смутно представляю как это будет выглядеть с помощью прямоугольников... ![]() Вообщем PaintBox я на 4 части разделила, и прямоугольнички сгенирировала... А дальше... ![]() Я не совсем понимаю: 1. Прямоугольники должна быть случайными по размеру или одинаковыми ? 2. Могут ли они пересекаться ? Если нет, то каково условие для того, чтобы они не пересекались ? 3. Как сгенирировать 3 симметричных прямоугольника в остальных частях ? 4. И ещё момент "Для восстановления запоминать 20 предыдущих прямоугольников" - это как ? Help me please... :p2: |
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
Значит, по-порядку: ;)
Цитата(Valkirie @ 11.04.05 14:45) 1. Прямоугольники должна быть случайными по размеру или одинаковыми ? Скорее всего - разными (случайного) размера.Цитата(Valkirie @ 11.04.05 14:45) 2. Могут ли они пересекаться ? Если нет, то каково условие для того, чтобы они не пересекались ? А у тебя это не оговорено, почему бы не сделать их с пересечениями? И на калейдоскоп больше походить будет...Цитата(Valkirie @ 11.04.05 14:45) 3. Как сгенирировать 3 симметричных прямоугольника в остальных частях ? А вот это как раз напрямую зависит от того, КАК ты разбила PaintBox на 4 части... Я бы сделал так: Разбиваешь PaintBox на 4 прямоугольника, или квадрата (так, что линии разделения пересекаются точно в центре), и привязываешь к точке пересечения этих самых линий начало локальной системы координат. Теперь если ты сгенерировала один прямоугольник с положительными координатами (в математике это называется 1-я четверть), то для получения 3-х остальных тебе достаточно изменить знак или одной или обоих координат (в локальной системе, естественно), преобразовать координаты всех 4-х прямоугольников в систему глобальную и отрисовать их...Цитата(Valkirie @ 11.04.05 14:45) 4. И ещё момент "Для восстановления запоминать 20 предыдущих прямоугольников" - это как ? ![]() |
Valkirie |
![]()
Сообщение
#3
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 36 Пол: Женский Репутация: ![]() ![]() ![]() |
Ню...вообщем у меня получается такая штучка, разноцветные произвольные прямоугольники "носятся" как сумасшедшие в одной части PaintBox`a - до такой степени, что в конце концов получается какая-то каша
![]() PaintBox - разделён ровненько по центру, так как говорил ты... вот только как привязать начало координат к центру ? И как их проектировать дальше... Я не сильна в математике... :p2: |
volvo |
![]()
Сообщение
#4
|
Гость ![]() |
Цитата(Valkirie @ 11.04.05 16:32) PaintBox - разделён ровненько по центру, так как говорил ты... вот только как привязать начало координат к центру ? И как их проектировать дальше... Приведи здесь кусок программы, как ты делишь PaintBox и генерируешь (и рисуешь) прямоугольники, я попробую попрыгать с бубном :D |
Valkirie |
![]()
Сообщение
#5
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 36 Пол: Женский Репутация: ![]() ![]() ![]() |
Вот то, что я имею на данный момент...
Код const N=20; type TRect=record x,y,x1,x2,y1,y2:integer; Color:TColor; end; var Mas:array[1..N] of TRect; procedure DrawRect(Rec:TRect); begin Form1.PaintBox1.Canvas.Pen.color:=Rec.Color; Form1.PaintBox1.Canvas.Brush.Color:=Rec.Color; Form1.PaintBox1.Canvas.Rectangle(Rec.x1,Rec.x2,Rec.y1,Rec.y2); end; procedure HideRect (Rec:TRect); begin Form1.PaintBox1.Canvas.Pen.Color:=Form1.PaintBox1.Color; Form1.PaintBox1.Canvas.Brush.Color:=Form1.PaintBox1.Color; Form1.PaintBox1.Canvas.Rectangle(Rec.x1,Rec.x2,Rec.y1,Rec.y2); end; function GenerateRect(N:integer):TRect; var Rec:TRect; begin Rec.x1:=Random(200)+1; Rec.x2:=Random(200)+1; Rec.y1:=Random(200)+1; Rec.y2:=Random(200)+1; Rec.x:=Random(Form1.PaintBox1.Width div 2)-1; Rec.y:=Random(Form1.PaintBox1.Height div 2)-1; Rec.Color:=RGB(Random(256),Random(256),Random(256)); Result:=Rec end; procedure TForm1.PaintBox1Paint(Sender: TObject); var i,x,y,w,h:integer; begin w:=PaintBox1.Width; h:=PaintBox1.Height; x:=w div 2; y:=h div 2; PaintBox1.Canvas.Rectangle(0,0,w,h); PaintBox1.Canvas.MoveTo(x,0); PaintBox1.Canvas.LineTo(y,h); PaintBox1.Canvas.MoveTo(0,y); PaintBox1.Canvas.LineTo(w,x); for i:=1 to N do DrawRect(Mas[i]); HideRect(Mas[i]); end; procedure TForm1.FormCreate(Sender: TObject); var i:integer; begin for i:=1 to N do Mas[i]:=GenerateRect(i); end; procedure TForm1.Timer1Timer(Sender: TObject); var k:integer; begin k:=random(n)+1; HideRect(Mas[k]); Mas[k]:=GenerateRect(N); DrawRect(Mas[k]); end; end. Посмотри что тут к чему... :p2: И спасибо за отзывчивость ![]() |
volvo |
![]()
Сообщение
#6
|
Гость ![]() |
Ну, в общем, я поменял кое-что, теперь оно рисует одинаковую картинку во всех 4-х частях PaintBox-а. Но я рисовал не по таймеру, а по нажатию кнопки. Если нужно - перенеси это в таймер, можешь поиграться со значениями при генерации прямоугольников.
Прикрепленные файлы ![]() |
Valkirie |
![]()
Сообщение
#7
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 36 Пол: Женский Репутация: ![]() ![]() ![]() |
Спасибо ;) Перенесла... всё крутится по таймеру ;)
Надеюсь - это то, что нужно... |
![]() ![]() |
![]() |
Текстовая версия | 26.07.2025 15:54 |