1. Заголовок темы должен быть информативным. В противном случае тема удаляется ... 2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения. 3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали! 4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора). 5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM! 6. Одна тема - один вопрос (задача) 7.Проверяйте программы перед тем, как разместить их на форуме!!! 8.Спрашивайте и отвечайте четко и по существу!!!
Здраствуйте. нужна небольшая помошь с рисунком, а именно сделать заливку и дорисовать полукруг снизу. какими командами это делать не знаю. можно хотя бы их) программа:
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);
{ Это твой код } {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, все понятно с первого взгляда.