IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

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

 
 Ответить  Открыть новую тему 
> помогите с рисованием, немножко)
tim4d
сообщение 3.10.2010 0:26
Сообщение #1





Группа: Пользователи
Сообщений: 2
Пол: Мужской

Репутация: -  0  +


Здраствуйте. нужна небольшая помошь с рисунком,
а именно сделать заливку и дорисовать полукруг снизу.
какими командами это делать не знаю. можно хотя бы их)
программа:
 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);

{zvyk}
a:=a-7;
sound (a);
delay(1000);
nosound;

x:=x+1;
y:=y+1;
z:=z+1;
m:=m+1;
n:=n+1;

delay(7000);
cleardevice;
until x=360;
end;

setcolor (14);
OutTextXY(20, 40, 'again? yes=1/no=0');
readln (b);
until b=0;
closegraph;
end.



Сообщение отредактировано: tim4d - 3.10.2010 1:37
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
sheka
сообщение 3.10.2010 0:54
Сообщение #2


Я.
****

Группа: Пользователи
Сообщений: 809
Пол: Мужской
Реальное имя: Саша

Репутация: -  11  +


ellipse
floodfill

Добавлено через 1 мин.
Форматтируй, пожалуйста, код (делай отступы вложености).
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
tim4d
сообщение 3.10.2010 1:48
Сообщение #3





Группа: Пользователи
Сообщений: 2
Пол: Мужской

Репутация: -  0  +


ellipse
в этой команде 1,2 координата центра
5,6 - крайние точки элипса
а 3,4 значение что значат? как мне полуэлипс сделать?

а понял) это градусы

Спасибо за помошь sheka

Сообщение отредактировано: tim4d - 3.10.2010 1:55
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 3.10.2010 11:23
Сообщение #4


Гость






Цитата
дорисовать полукруг снизу.
Прекрасно можно, используя возможности Вьюпортов:

{ Это твой код }
{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 11:38
Сообщение #5


Злостный любитель
*****

Группа: Пользователи
Сообщений: 1 755
Пол: Мужской

Репутация: -  62  +


Не надо писать begin repeat ... until end
Можно просто repeat ... until


--------------------
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 20.06.2025 5:47
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"