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

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

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

 
 Ответить  Открыть новую тему 
> Задача на графику
сообщение
Сообщение #1





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

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


Задача такая: на паскале пользователь вводит координаты четырех углов ромба. Нужно нарисовать ромб, в центре маленькую окружность, и по кнопкам вверх, вниз, вправо, влево ромб с окружностью должны соответственно двигаться. Задачка простая, но я не могу ее никак написать: ромб я нарисовала, рассчитала координаты центра окружности, акогда начала рисовать саму окружность
circle(xcentra,ycentra,r),
то паскаль мне пишет ошибку type mismatch. xcentra,ycentra у меня real, но как округлять здесь числа я понятия не имею. Помогите пожалуйста!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Профи
****

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

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


round(x) - округление до целого


--------------------
Цитата
Imagination is more important than knowledge.
Albert Einstein
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3





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

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


Я и так пробовала, пишут ту же самую ошибку.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Вожак стада
***

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

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


Можеш привести код программы?


--------------------
Админ наш,
Иже еси на серверах!
Да святится имя Твое,
Да приидет Unix Твой,
Да будет воля Твоя,
Как на земле , так и на небе.
Пинг наш насущный дай нам на сей день;
И прости нам счета наши, как и мы оставляем их должникам нашим;
И не введи нас во искушение виндовое,
Но избавь нас от лукавого Билли.
И да пребудет с нами сила твоя великая,
Во имя Отца-админа, Сына-Пингвина, и духа мастдайного. Админь!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5





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

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


uses graph,crt;
var d,m:integer;x1,x2,x3,x4,y1,y2,y3,y4:integer; xc,yc:real;
begin
clrscr;
initgraph(d,m,'');
readln(x1);
readln(x2);
readln(x3);
readln(x4);
readln(y1);
readln(y2);
readln(y3);
readln(y4);

line(x1,y1,x2,y2);
line(x2,y2,x3,y3);
line(x3,y3,x4,y4);
line(x4,y4,x1,y1);
xc:=(x4+x2)/2;
yc:=(y1+y3)/2; round(x); round(yc);
circle(xc,yc,10);

end.


 ! 
Пользуемся тегами !

 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Профи
****

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

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


Цитата
Задача такая: на паскале пользователь вводит координаты четырех углов ромба

Вероятно речь идёт о вершинах ромба. В таком случае не забывай что пользователь может ввести координаты фигуры, которая не будет ромбом.

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


--------------------
Цитата
Imagination is more important than knowledge.
Albert Einstein
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7





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

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


Здесь она выдает мне ошибку, дальше вообще не знаю как.

Добавлено через 2 мин.
Tan, и как в этом случае писать? Тогда вообще непонятно, как эту окружность туда впихнуть.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Профи
****

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

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


circle (round(xc),round(yc),10). А ты по пифагору проверь, все ли стороны равны. Немного неправильно выразился, то есть используй теорему пифагора чтобы найти длины сторон фигуры и потом сравни их.

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


--------------------
Цитата
Imagination is more important than knowledge.
Albert Einstein
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9





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

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


окружность нарисовать получилось, а как тогда двигать целую фигуру, а не одну точку?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Perl. Just code it!
******

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

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


Есть несколько вариантов как можно перемещать ихображение оп экрану

- отрисоывать каждый раз заново, относительно некой базовой точки
- отрисовать изображение 1 раз, захватить его с помощью GetImage, а за тем выводить где угодно с помощью PutImage


Воспользуйся поиском, решалось много задач на движение фигур, шариков всяких ...


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


Профи
****

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

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


Притивно : идти по всем точкам экрана и проверять их цвет, если это цвет нарисованной фигуры, то двигаем пиксель в зависимости от клавиши, при этом ставя цвет точки на которую "напоролись" цветом экрана . То есть когда пройдёшь по всем точкам, они будут подвинуты. Но это не лучший вариант.


--------------------
Цитата
Imagination is more important than knowledge.
Albert Einstein
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #12


Вожак стада
***

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

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


Начнём из далека-считывание клавиши:

Procedure otris(x1,y1,x2,y2,x3,y3,x4,y4);
var
xc,yc:word;
begin
line(x1,y1,x2,y2);
line(x2,y2,x3,y3);
line(x3,y3,x4,y4);
line(x4,y4,x1,y1);
xc:=(x4+x2) div 2;
yc:=(y1+y3) div 2;
circle(xc,yc,10);
end;
{Вначале обьявляем переменную}
ch:char;
{.................................}
{потом считываем клавишу:}
ch:=readkey;
{Стрелочки это отдельная тема, поетому хватит W,S,A,D}
if ch=97 then
begin
setcolor(0);
otris(x1,y1,x2,y2,x3,y3,x4,y4);
setcolor(4);
x1:=x1-1;
x2:=x2-1;
x3:=x3-1;
x4:=x4-1;
otris(x1,y1,x2,y2,x3,y3,x4,y4);

end; {Клавиша a}
{...........................}



Добавлено через 3 мин.
2 Tan
Цитата
... это не самый лучший вариант...

Это не вариант это такой геморой ,что сложнее сложно было придумать...

2 klem4
Цитата
...getimage...

Я сомневаюсь, что этот человек знает указатели....

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


--------------------
Админ наш,
Иже еси на серверах!
Да святится имя Твое,
Да приидет Unix Твой,
Да будет воля Твоя,
Как на земле , так и на небе.
Пинг наш насущный дай нам на сей день;
И прости нам счета наши, как и мы оставляем их должникам нашим;
И не введи нас во искушение виндовое,
Но избавь нас от лукавого Билли.
И да пребудет с нами сила твоя великая,
Во имя Отца-админа, Сына-Пингвина, и духа мастдайного. Админь!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #13





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

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


[tag=]uses graph,crt;
var d,m:integer;x1,x2,x3,x4,y1,y2,y3,y4:integer; xc,yc:real; c:char;
begin
clrscr;
initgraph(d,m,'');
readln(x1);
readln(x2);
readln(x3);
readln(x4);
readln(y1);
readln(y2);
readln(y3);
readln(y4);
repeat
line(x1,y1,x2,y2);
line(x2,y2,x3,y3);
line(x3,y3,x4,y4);
line(x4,y4,x1,y1);
xc:=(x4+x2)/2;
yc:=(y1+y3)/2;
circle(round(xc),round(yc),10);
gotoxy(x1,y1);
c:=readkey;
case c of
'd':if(x3+1)<640 then x1:=x1+1;
's':if(y2+1)<480 then y1:=y1+1;
'a':if (x4-1)>0 then x1:=x1-1;
'w':if(y1-1)>0 then y2:=y2-1;
until c=chr(27);
end.

Добавлено через 1 мин.
он мне подчеркивает где until и выдает какую-то ошибку
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #14


Профи
****

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

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


end после case надо


--------------------
Цитата
Imagination is more important than knowledge.
Albert Einstein
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #15





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

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


Я сейчас написала. Он мне двигает только точки которые в if, больше ничего не делает, только "растягивает" фигуру, а мне нужно чтобы она просто вся перерисовывалась.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #16


Гость






Цитата
Я сомневаюсь, что этот человек знает указатели....
А я сомневаюсь, что ты знаешь, что такое GetImage в таком случае, ибо для ее использования совершенно не нужны указатели... Буфер нужен, а вот указатели - совсем нет...
 К началу страницы 
+ Ответить 

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

 





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