Помощь - Поиск - Пользователи - Календарь
Полная версия: Николай Кузанский
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Чужак
Николай Кузанский, 16в. придумал фигуру из двух треугольников,
напоминающую Звезду Давида, назвал её "Парадигмой" (парадигма-греч.модель).
Вот отрисовка:

program KyzanskiyModel;
uses crt,graph;
var Gd, Gm: Integer;
begin
clrscr;
Gd := Detect;
InitGraph(Gd, Gm, ' ');
Setcolor(15); setlinestyle(0,0,3);
Line(220,140,420,140);Line(220,140,320,340);Line(420,140,320,340);
Line(220,340,420,340);Line(220,340,320,140);Line(420,340,320,140);
Line(320,140,320,340);{-эта линия не обязательно-}
readln;
end.


Ну, отрисовать это легко, но усложнил-решил сделать, чтобы основание нижнего треугольника
сокращалось до нуля, а верхний-наоборот, из нуля выходил, и останавливался,
когда его основание станет таким же, как было у нижнего.
Вот что получилось:

program KyzanskiyModel2;
uses crt,graph;
var Gd, Gm, t: Integer;
begin
clrscr;
Gd := Detect; t:=0;
InitGraph(Gd, Gm, ' ');
repeat
Setcolor(15); setlinestyle(0,0,3);
Line(320+t,140,320-t,140);Line(320+t,140,320,340);Line(320-t,140,320,340);
Line(220+t,340,420-t,340);Line(220+t,340,320,140);Line(420-t,340,320,140);
Line(320,140,320,340); Delay(2000);
Setcolor(0); setlinestyle(0,0,3);
Line(320+t,140,320-t,140);Line(320+t,140,320,340);Line(320-t,140,320,340);
Line(220+t,340,420-t,340);Line(220+t,340,320,140);Line(420-t,340,320,140);
Line(320,140,320,340);
t:=t+1;
until (keypressed) or (t>100);
readln;
end.


Помогите:
1. Как сделать, чтобы после окончания работы программы,
оставался верхний треугольник? (Его в конце зарисовывает тоже).
2. Как сделать заливку
а) одному треугольнику
б) двум, но разным цветом?

Чужак
Ну, первый пункт сам сделал:

program KyzanskiyModel;
uses crt,graph;
Label 1;
var Gd, Gm, t: Integer;
begin
clrscr;
Gd := Detect; t:=0;
InitGraph(Gd, Gm, ' ');
repeat
t:=t+1;
Setcolor(15); setlinestyle(0,0,3);
Line(320+t,140,320-t,140);Line(320+t,140,320,340);Line(320-t,140,320,340);
Line(220+t,340,420-t,340);Line(220+t,340,320,140);Line(420-t,340,320,140);
Line(320,140,320,340); Delay(2000);
if t>=100 then goto 1;
Setcolor(0); setlinestyle(0,0,3);
Line(320+t,140,319-t,140);Line(320+t,140,320,340);Line(320-t,140,320,340);
Line(220+t,340,420-t,340);Line(220+t,340,320,140);Line(420-t,340,320,140);
Line(320,140,320,340);
until keypressed;
1:readln;
end.

Но вопросы остаются:
1. Можно то же сделать, но без метки?
2. Как сделать заливку?
мисс_граффити
 if t>=100 then break;

может, так?

заливка...
FloodFill(x,y,color)

х,у - точка внутри замкнутой области
color - цвет границ области
Чужак
Работает.
За Николая Кузанского- +1. cool.gif
Чужак
Но еще один маленький вопрос-
(наверно, я не до конца разобрался)
почему FloodFill
заливает только белым цветом?
volvo
А ты перед FloodFill устанавливал цвет заливки через SetFillStyle ?

Если нет, то само собой, что белым - ведь белый цвет заливки установлен по умолчанию...

Хочешь залить, к примеру, красным - делай:
SetFillStyle(SolidFill, Red);
FloodFill(...);
Чужак
Еще раз всем спасибо!
ВСЁ работает!
Противоположности переходят друг в друга, как и думал Н.Кузанский cool.gif .

program KyzanskiyModel;
uses crt,graph;
const c=15;
var Gd, Gm, t: Integer;
begin
clrscr;
Gd := Detect; t:=0;
InitGraph(Gd, Gm, ' ');SetFillStyle(SolidFill, с);
repeat
t:=t+1;
Setcolor(с); setlinestyle(0,0,3);
Line(320+t,140,320-t,140);Line(320+t,140,320,340);Line(320-t,140,320,340);
Line(220+t,340,420-t,340);Line(220+t,340,320,140);Line(420-t,340,320,140);
Line(320,140,320,340); Delay(2000);
if t>=100 then break;
Setcolor(3); setlinestyle(0,0,3);
Line(320+t,140,320-t,140);Line(320+t,140,320,340);Line(320-t,140,320,340);
Line(220+t,340,420-t,340);Line(220+t,340,320,140);Line(420-t,340,320,140);
Line(320,140,320,340);
until keypressed;
FloodFill(310,240,с); FloodFill(330,240,с);
readln;
end.

Запускайте и смотрите на экран!
Кстати, может изменение цвета
подчинить какому-то алгоритму blum.gif ?
Но это уже другая задача.
Тему можно закрывать...
(Примечание Иногда странно себя ведет из-за
константы с. Тогда удалите её и впишите номер цвета вручную
SetFillStyle(SolidFill, 15); вместо SetFillStyle(SolidFill, с); также везде.)
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.