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;
Немного про канвас, анимацию и горы :)
В качестве задания попалась достаточно интересная лаба - движение квадрата по горе :D
т.е. как я понял: есть диагональ, на ней есть квадрат, который по таймеру спускается вниз.
одна из проблем - квадрат необходимо повернуть, иначе он движется одной точкой, что в принципе неестественно:rolleyes:
быть может, кто поможет?
буду очень благодарен даже простой анимации точки по диагонали, а дальше бы сам разобрался..
Я конечно может чего то не понимаю, но уравнение прямой ещё никто не отменял: y=a*x+b. Или простейший вариант y=x. Прямая под 45 градусов. Считай координаты и рисуй точку, квардат... что хочешь.
чтобы квадрат на канве можно было поворачивать - используем относительные координаты, типа такого