Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Немного про канвас, анимацию и горы :)

52K
17 мая 2010 года
yTko
8 / / 22.11.2009
Всем здравствуйте :)
В качестве задания попалась достаточно интересная лаба - движение квадрата по горе :D
т.е. как я понял: есть диагональ, на ней есть квадрат, который по таймеру спускается вниз.
одна из проблем - квадрат необходимо повернуть, иначе он движется одной точкой, что в принципе неестественно:rolleyes:
быть может, кто поможет?
буду очень благодарен даже простой анимации точки по диагонали, а дальше бы сам разобрался..
9.0K
03 июня 2010 года
mr_smit
64 / / 03.12.2006
Я конечно может чего то не понимаю, но уравнение прямой ещё никто не отменял: y=a*x+b. Или простейший вариант y=x. Прямая под 45 градусов. Считай координаты и рисуй точку, квардат... что хочешь.
339
04 июня 2010 года
verybadbug
619 / / 12.09.2005
чтобы квадрат на канве можно было поворачивать - используем относительные координаты, типа такого
Код:
procedure put_square(canvas:tcanvas; x, y: integer; a:float); //a-угол поворота (рад)
var
  x, y, i, idx:integer;
  line: Array[0..3] of TPoint; //под рукой нет delphi, как задать массив сами разберётесь
begin
//line содержит смещения точек относительно ценра
//line = (TPoint(-5, -5), TPoint(5, -5), TPoint(5, 5), TPoint(-5, 5));
  idx := 0;
  for i := 0 to length(line) + 1 do begin // + 1 чтобы замкнуть линию (квадрат)
    x := round(line[idx].X * cos(a) - line[idx].Y * sin(a)); //здесь может быть
    y := round(line[idx].X * sin(a) + line[idx].Y * cos(a)); //ошибка со знаком +/-
    if (i = 0) then canvas.moveto(x, y)
    else canvas.lineto(x, y);
    inc(idx);
    if (idx >= length(line)) then idx := 0;
  end;
end;
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог