Здраствуйте. нужна небольшая помошь с рисунком, а именно сделать заливку и дорисовать полукруг снизу. какими командами это делать не знаю. можно хотя бы их) программа:
program int; uses graph, crt; var grdriver, grmode, driver, m,n,x,y,z,a,b: integer; begin grdriver:=detect; initgraph (grdriver, grmode, ''); setbkcolor (blue); b:=1; repeat x:=120;y:=100;z:=80;m:=60;n:=40;a:=1700; if b=1 then
begin repeat {korobka} setcolor (7); fillellipse (330,365,40,14); line (290,365,290,390); line (370,365,370,390);
{svechka} setcolor (14); line (310,365,310,x); line (350,365,350,x); fillellipse (330,365,20,7); fillellipse (330,x,20,7); setcolor (8); line (330,x,330,y);
{ogon'} setcolor (4); line (330,y,340,z); line (330,y,320,z); line (330,n,340,z); line (330,n,320,z); setcolor (13); line (330,y,335,z); line (330,y,325,z); line (330,m,335,z); line (330,m,325,z);
Добавлено через 1 мин. Форматтируй, пожалуйста, код (делай отступы вложености).
tim4d
3.10.2010 5:48
ellipse в этой команде 1,2 координата центра 5,6 - крайние точки элипса а 3,4 значение что значат? как мне полуэлипс сделать?
а понял) это градусы
Спасибо за помошь sheka
volvo
3.10.2010 15:23
Цитата
дорисовать полукруг снизу.
Прекрасно можно, используя возможности Вьюпортов:
{ Это твой код } {korobka} setcolor (7); fillellipse (330,365,40,14); { Заметил? Радиусы равны соответственно 40 и 14 } line (290,365,290,390); line (370,365,370,390);
{ А вот это добавлено мной } setviewport(0, 391, getmaxx, getmaxy, ClipOn); fillellipse (330, 0, 40, 14); { Ага, радиусы - те же, что и у тебя } setviewport(0, 0, getmaxx, getmaxy, ClipOn);
Запусти и посмотри, что получится...
А теперь чуть подробнее, что именно происходит: сначала я устанавливаю вьюпорт (я не знаю приемлемого перевода, некоторые говорят "графическое окно", но мне кажется, что этот термин не очень подходит для данного случая, я предпочитаю называть это именно словом "Вьюпорт") на нижнюю часть экрана, то есть, ниже всего, что у тебя уже было отрисовано, причем последний параметр = True, то есть, все, что выходит за границы установленной области, НЕ БУДЕТ отображаться. А потом я просто рисую обычный эллипс (обрати внимание, все координаты X и Y задаются не относительно всего экрана, а именно относительно границ Вьюпорта, радиусов это не касается. Именно поэтому в FillEllipse параметр Y равен 0. Параметр X не изменился только по той причине, что по ширине границы Вьюпорта совпадают с границами экрана). Но ведь FillEllipse должен рисовать полный эллипс, а отрисовалась только нижняя часть, заметил? Вот именно потому, что Вьюпорт был задан "с отсечением" - все, что находится выше него, просто не отрисовывается.
Нарисовали нижнюю дугу - возвращаем Вьюпорт на весь экран, иначе все, что будет рисоваться дальша - будет гораздо ниже, чем тебе бы хотелось (не забывай, координаты в графическом режиме - относительные, а не абсолютные).
Это было первое. А вот теперь - второе. Я бы на твоем месте попробовал не перерисовывать изображение каждый раз, а нарисовал бы однократно, сохранил бы его в буфер (GetImage), и потом выводил бы в другом месте (PutImage). Воспользуйся поиском, примеры такой анимации уже были на форуме.
Третье - не используй "магические числа". Что за цвет №14 - отвечай сразу, не задумываясь? Что за цвет №12? А №10? Не надо делать работу за компилятор. Пиши Yellow/LightRed/LightGreen, все понятно с первого взгляда.
TarasBer
3.10.2010 15:38
Не надо писать begin repeat ... until end Можно просто repeat ... until
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.