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

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

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

 
 Ответить  Открыть новую тему 
> движение обьектов в ТП, используя метод матриц
nast
сообщение 22.11.2005 19:07
Сообщение #1


Гость






Пожалуйста, помогите с задачкой. Одна надежда только на помощь форума.

Надо написать программу, которая, используя матрицы масштабирования поворота и переноса, передвигает объект.
Например, чтобы перенести точку используется результирующая матрица такого вида
|cosa_______________ sina ________________ 0|
|-sina_______________ cosa_______________ 0|
|x (1-cosa)+y sina ____ y(1-cosa) – x sina ____ 1|

где x и у начальниэ кординати , а – угол поворота.

задача состои в том что эллипс двигаэтся по невидимому контуру круга с радиусом 50 по часовой стрелке. Элипс проходя четверть круга уменьшается а в следуэшей – увеличивается. Начальный радиус эллипса rx=30 и ry=15, конечные 10 и 5.
[COLOR=purple]

Сообщение отредактировано: nast - 22.11.2005 19:09
 К началу страницы 
+ Ответить 
virt
сообщение 23.11.2005 19:25
Сообщение #2


Знаток
****

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

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


program graphic_for_nast;
uses crt,graph;
var gd,gm : integer;
i : integer;
rx : integer;
x,y,x1,y1 : real;

begin
gd := detect;
initgraph(gd,gm,'');
rx := 30;
x := 50;
y := 0;
while true do
begin
for i := 1 to 90 do
begin
x1 := 320 - (x - 50) * cos (i / 57.3) + (y - 50) * sin (i / 57.3);
y1 := 240 - (y - 50) * cos (i / 57.3) - (x - 50) * sin (i / 57.3);
setcolor(2);
ellipse(round(x1),round(y1),0,360,rx,rx shr 1);
delay(1000);
setcolor(0);
ellipse(round(x1),round(y1),0,360,rx,rx shr 1);
if i mod 9 = 0 then rx := rx - 2;
end;
if keypressed then break;
for i := 91 to 180 do
begin
x1 := 320 - (x - 50) * cos (i / 57.3) + (y - 50) * sin (i / 57.3);
y1 := 240 - (y - 50) * cos (i / 57.3) - (x - 50) * sin (i / 57.3);
setcolor(2);
ellipse(round(x1),round(y1),0,360,rx,rx shr 1);
delay(1000);
setcolor(0);
ellipse(round(x1),round(y1),0,360,rx,rx shr 1);
if i mod 9 = 0 then rx := rx + 2;
end;
if keypressed then break;
for i := 181 to 270 do
begin
x1 := 320 - (x - 50) * cos (i / 57.3) + (y - 50) * sin (i / 57.3);
y1 := 240 - (y - 50) * cos (i / 57.3) - (x - 50) * sin (i / 57.3);
setcolor(2);
ellipse(round(x1),round(y1),0,360,rx,rx shr 1);
delay(1000);
setcolor(0);
ellipse(round(x1),round(y1),0,360,rx,rx shr 1);
if i mod 9 = 0 then rx := rx - 2;
end;
if keypressed then break;
for i := 271 to 360 do
begin
x1 := 320 - (x - 50) * cos (i / 57.3) + (y - 50) * sin (i / 57.3);
y1 := 240 - (y - 50) * cos (i / 57.3) - (x - 50) * sin (i / 57.3);
setcolor(2);
ellipse(round(x1),round(y1),0,360,rx,rx shr 1);
delay(1000);
setcolor(0);
ellipse(round(x1),round(y1),0,360,rx,rx shr 1);
if i mod 9 = 0 then rx := rx + 2;
end;
if keypressed then break;
end;
closegraph;
end.


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

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

 



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