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

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

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

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





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

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


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


Профи
****

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

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


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


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





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

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


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


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

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

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


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


--------------------
Админ наш,
Иже еси на серверах!
Да святится имя Твое,
Да приидет Unix Твой,
Да будет воля Твоя,
Как на земле , так и на небе.
Пинг наш насущный дай нам на сей день;
И прости нам счета наши, как и мы оставляем их должникам нашим;
И не введи нас во искушение виндовое,
Но избавь нас от лукавого Билли.
И да пребудет с нами сила твоя великая,
Во имя Отца-админа, Сына-Пингвина, и духа мастдайного. Админь!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
-tania-
сообщение 3.04.2007 20:13
Сообщение #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 
 К началу страницы 
+ Ответить 
Tan
сообщение 3.04.2007 20:13
Сообщение #6


Профи
****

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

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


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

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

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


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





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

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


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

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


Профи
****

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

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


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

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


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





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

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


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


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

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

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


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

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


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


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


Профи
****

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

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


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


--------------------
Цитата
Imagination is more important than knowledge.
Albert Einstein
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
mamont001
сообщение 3.04.2007 21:03
Сообщение #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 - 3.04.2007 21:07


--------------------
Админ наш,
Иже еси на серверах!
Да святится имя Твое,
Да приидет Unix Твой,
Да будет воля Твоя,
Как на земле , так и на небе.
Пинг наш насущный дай нам на сей день;
И прости нам счета наши, как и мы оставляем их должникам нашим;
И не введи нас во искушение виндовое,
Но избавь нас от лукавого Билли.
И да пребудет с нами сила твоя великая,
Во имя Отца-админа, Сына-Пингвина, и духа мастдайного. Админь!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
-tania-
сообщение 3.04.2007 21:29
Сообщение #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 
 К началу страницы 
+ Ответить 
Tan
сообщение 3.04.2007 21:38
Сообщение #14


Профи
****

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

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


end после case надо


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





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

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


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


Гость






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

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

 



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