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

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

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

 
 Ответить  Открыть новую тему 
> помогите с рисованием, немножко)
сообщение
Сообщение #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 -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Я.
****

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

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


ellipse
floodfill

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





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

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


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

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

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

Сообщение отредактировано: tim4d -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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, все понятно с первого взгляда.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


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

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

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


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


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

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

 





- Текстовая версия 20.10.2020 5:13
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name