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

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

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

 
 Ответить  Открыть новую тему 
> заливка области
сообщение
Сообщение #1


Новичок
*

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

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


Залить каждый из внутренних кругов любыми стилем и цветом.помогите пожалуста=(( unsure.gif



Program Circle3;
Uses CRT, Graph;

const
R=185;

var
x0,y0,n,i,k,Color:integer;
driver,regim,error: integer;
a,b:word;
Info:FillSettingsType;
Begin
clrscr;
Detectgraph(driver,regim);
Initgraph(driver,regim,'G:\TP7\BGI');
Error:=GraphResult;
if Error <> grOK then
begin
writeln(GraphErrorMsg(Error));
Halt(Error)
end;

GetAspectRatio(a,b);
x0:=GetMaxX div 2;
y0:=GetMaxY div 2;
SetAspectRatio(GetMaxX-a*x0 div 2,GetMaxY-b*y0);
SetLineStyle(0,0,3);
SetColor(LightGreen);
Circle(x0,y0,R);


Circle(420,225,190 div 2-9);

Circle(260,142,190 div 2-9);

Circle(280,353,190 div 2-9);


readln;
CloseGraph;
end.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






Ну, допустим, залить-то не проблема (для этого достаточно после отрисовки круга вызвать SetFillStyle и FloodFill с координатами центра окружности и зеленым цветом в качестве границы). Но ведь у тебя программа вылетает при попытке выполнить вот эту строку:
Цитата
SetAspectRatio(GetMaxX-a*x0 div 2,GetMaxY-b*y0);
Исправь сначала эту ошибку, потом будешь делать заливку...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Новичок
*

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

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


эм....всмысле вылетает? у меня всё нормально blink.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






Значит, контроль границ отключен... Не надо этого делать. В настройках компилятора (Options -> Compiler) отметь все, что находится в группе Runtime Errors, нажми Ok, перекомпилируй и запусти программу.

Не отключай никогда контроль. Лучше чуть больше времени уделить отладке, чем думать, что у тебя все в порядке, а потом попробовать запустить программу на другом компьютере, где другие настройки, и она начнет вылетать.

Добавлено через 4 мин.
А вот тебе и доказательство того, что не надо закрывать глаза на ошибку, а надо ее исправлять. Берем компилятор FPC, отключаем контроль границ и контроль переполнения Integer-а, компилируем и запускаем программу. Думаешь, я вижу окружности? Ни разу. Вот, что я вижу (хотя, если закомментировать SetAspectRatio - то все в порядке, появляются окружности):


Эскизы прикрепленных изображений
Прикрепленное изображение
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Новичок
*

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

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


ну у кого окружности, а у кого и эллипсы :D
а контроль я не отключала.
подскажи, пожалуйста, что с этим делать? mega_chok.gif


заливка есть, а вот что с коэффициентом сжатия делать? =((

Сообщение отредактировано: Цифровой_Aнгел -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Гость






Цитата
а контроль я не отключала.
А он по умолчанию отключен (без него программы меньше по размеру и более быстрые получаются). Так вот включи контроль, и никогда, пока программа не станет полностью работоспособной, не отключай smile.gif Максимум, что можно делать - это выключать проверки для того, чтобы скомпилировать релиз-версию (в смысле, окончательную и уже полностью отлаженную).

Цитата
что с этим делать?
Обходиться без SetAcpectRatio:
Program Circle3;
Uses Graph;

const
R = 185;
R2 = 190 div 2 - 9;

var
x0,y0: integer;
driver, regim, error: integer;
a, b: Word;
Begin
Detectgraph(driver,regim);
Initgraph(driver,regim,'');
Error:=GraphResult;
if Error <> grOK then
begin
writeln(GraphErrorMsg(Error));
Halt(Error)
end;

GetAspectRatio(a,b);
SetLineStyle(SolidLn, 0, ThickWidth);
SetColor(LightGreen);

x0 := GetMaxX div 2;
y0 := GetMaxY div 2;

SetfillStyle(LineFill, Red);
FillEllipse(x0, y0, R, Trunc((a / b) * R));

SetfillStyle(HatchFill, Yellow);
FillEllipse(420, 225, R2, Trunc((a / b) * R2));
FillEllipse(260, 142, R2, Trunc((a / b) * R2));
FillEllipse(280, 353, R2, Trunc((a / b) * R2));

readln;
CloseGraph;
end.
Никаких ошибок, никаких эллипсов... Странно, правда? Рисуешь Circle (окружность) - получаешь эллипс. Рисуешь FillEllipse (заполненный эллипс) - получаешь окружность smile.gif...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Новичок
*

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

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


Цитата
Странно, правда? Рисуешь Circle (окружность) - получаешь эллипс.

не странно wink.gif

и получились...эллипсы ^_^
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Гость






Ну, если тебе надо обеспечить окружности, а не эллипсы только под Турбо-Паскалем, то:
  x0 := GetMaxX div 2;
y0 := GetMaxY div 2;
a := getmaxx; { Вместо GetAspectRatio }
b := getmaxy;

SetfillStyle(LineFill, Red);
FillEllipse(x0, y0, R, Trunc((a / b) * R));

SetfillStyle(HatchFill, Yellow);
FillEllipse(420, 225, R2, Trunc((a / b) * R2));
FillEllipse(260, 142, R2, Trunc((a / b) * R2));
FillEllipse(280, 353, R2, Trunc((a / b) * R2));

Это отработало. Но тогда у тебя будут проблемы с другими компиляторами...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Новичок
*

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

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


Всё равно эллипсы wacko.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Гость






Цитата
Всё равно эллипсы
А вот теперь - НЕ ВЕРЮ! (С)... Проверено на 4-х машинах, везде окружности. У тебя - эллипсы? Так не бывает. Рассказывай, какой монитор, и какой, собственно, компилятор. Запускай в режиме отладки и показывай, чему равно A и B после GetAspectRatio... Что возвращает GetMaxX, GetMaxY? Какая картинка получается? Давай больше информации. Это в конце концов что, мне надо?

Вот чего рисует Турбо Паскаль 7.0:



Эскизы прикрепленных изображений
Прикрепленное изображение
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


Пионер
**

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

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


Цитата(Цифровой_Aнгел @ 28.03.2010 13:58) *

Всё равно эллипсы wacko.gif

хм, если честно, ради интереса затестил, вроде как эллипсы)


Эскизы прикрепленных изображений
Прикрепленное изображение
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #12


Гость






Цитата
хм, если честно, ради интереса затестил, вроде как эллипсы)
Посмотри выше, я прилепил скриншот... Это что, эллипсы? И вот так - ВЕЗДЕ, на всех доступных мне машинах.

Стоп... У тебя - НЕ Турбо Паскаль, а какой-то 32-битный. Я предупреждал, что с ним что будут проблемы... Показывай, что выдает Турбо.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #13


mea culpa
*****

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

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


Вот это:

uses graph;

const
r=185;
r2=190 div 2 - 9;

var
x0,y0,driver,regim,error:integer;
a,b:word;

begin
detectgraph(driver,regim);
initgraph(driver,regim,'');
x0 := GetMaxX div 2;
y0 := GetMaxY div 2;
a := getmaxx; { Вместо GetAspectRatio }
b := getmaxy;

SetfillStyle(LineFill, Red);
FillEllipse(x0, y0, R, Trunc((a / b) * R));

SetfillStyle(HatchFill, Yellow);
FillEllipse(420, 225, R2, Trunc((a / b) * R2));
FillEllipse(260, 142, R2, Trunc((a / b) * R2));
FillEllipse(280, 353, R2, Trunc((a / b) * R2));
readln;
end.


у меня на TP7 выглядит так (монитор ЭЛТ 17 дюймов):

Сообщение отредактировано: Unconnected -


--------------------
"Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #14


Гость






Еще раз: Чему равны значения A и B после вызова GetAspectRatio, кто-нибудь мне может сказать?

У меня всегда выдает (10000:10000), то есть, "сжимать" картинку, используя полученные таким образом коэффициенты - бесполезно, соотношение будет таким же, как и без "сжатия", поэтому я попробовал заменить GetAspectRatio на конкретные значения GetMaxX и GetMaxY.

Кстати, создается впечатление, что SetAspectRatio вообще ни к чему не приводит, пытался делать
  GetAspectRatio(a,b);
SetAspectRatio(a, 2*b);
- картинка осталась прежней...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #15


mea culpa
*****

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

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


В последнем коде нету GetAspectRatio. Но вот после GetMaxX и GetMaxY переменные A и B равны 639 и 479 соответственно. Или надо было вставить GetAspectRatio?)

Сообщение отредактировано: Unconnected -


--------------------
"Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #16


Гость






Unconnected
Попробуй добавить GetAspectRatio... Все, что интересует - это значения A и B
 К началу страницы 
+ Ответить 
сообщение
Сообщение #17


mea culpa
*****

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

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


По 10000 тоже.


--------------------
"Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #18


Новичок
*

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

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


не знаю чем повлияло создание ехе-шника, но после этого эллипсы превратились в круги biggrin.gif

Program Circle3;
Uses Graph;

const
R = 177;
R2 = 180 div 2 - 9;

var
x0,y0: integer;
driver, regim, error: integer;
a, b: Word;
Begin
Detectgraph(driver,regim);
Initgraph(driver,regim,'g:\tp7\bgi');
Error:=GraphResult;
if Error <> grOK then
begin
writeln(GraphErrorMsg(Error));
Halt(Error)
end;


SetLineStyle(0, 0, 3);
SetColor(LightGreen);

x0 := GetMaxX div 2;
y0 := GetMaxY div 2;
a := getmaxx;
b := getmaxy;
SetFillStyle(EmptyFill,Black);
FillEllipse(x0, y0, R, Trunc((a / b) * R));

SetFillStyle(HatchFill,LightBlue);
FillEllipse(412, 220, R2, Trunc((a / b) * R2));

SetFillStyle(XHatchFill,Magenta);
FillEllipse(257, 145, R2, Trunc((a / b) * R2));

SetFillStyle(LtSlashFill,Blue);
FillEllipse(286, 360, R2, Trunc((a / b) * R2));


readln;
CloseGraph;
End.





volvo, большое спасибо !rose.gif

Сообщение отредактировано: Цифровой_Aнгел -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 





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