Здравствуйте! Мы начали изучать новую дисциплину «Компьютерная графика». У меня есть задание по лабе на тему "Поворот фигуры на определенное количество градусов". Задание хотелось бы выполнить самостоятельно, но тема оказалась тяжела для понимания. Подскажите, как реализовать поворот точки на осях координат вокруг их центра на 90 градусов. Если я это пойму, тогда возможно и свою фигуру смогу повернуть самостоятельно.
Оси вроде бы правильно составлены. Вот они:
implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var x,y: Real; x0, y0: Integer; m: Integer; i: Integer; n: Integer; begin x0 := Image1.Width div 2; // центр координатной плоскости по х оси y0 := Image1.Height div 2; // центр координатной плоскости по у оси m := 25; // масштаб
x := -7; // стартовое значение функции n := Abs(Round(x)); // конечное значение функции
// шкалирование осей for i := Round(x) to n do begin Image1.Canvas.MoveTo(x0+i*m, y0-5); Image1.Canvas.LineTo(x0+i*m, y0-(-5)); Image1.Canvas.TextOut(x0+i*m, y0+10, IntToStr(i)); Image1.Canvas.MoveTo(x0+5, y0-m*i); Image1.Canvas.LineTo(x0-5, y0-m*i); Image1.Canvas.TextOut(x0-15, y0+i*m, IntToStr(-i)); end; end;
Здравствуйте! Нужна ваша подсказка. Будьте добры, посмотрите пожалуйста программу. 1)Правильно ли я написала процедуру масштабирования моей фигуры для соответствующей кнопки? (Т.е. не совсем по дилетантски?) 2)Никак не получается написать код для кнопки « Перенос». Подскажите, если не сложно 3)Возможно ли сделать так, чтобы значение угла вращения (Label1) менялось не от 0 до 10, а от 0 до 360 градусов?
procedure TForm1.Button2Click(Sender: TObject); //Процедура переноса фигуры begin Image1.Picture:=nil; DrawCoo;
end;
procedure TForm1.DrawCoo; //Построение осей координат var m, i : Integer; begin m := 25; // масштаб Image1.Canvas.Pen.Color := clBlack; // координатная плоскость Image1.Canvas.MoveTo(0, y0); Image1.Canvas.LineTo(ClientWidth, y0); Image1.Canvas.MoveTo(x0, 0); Image1.Canvas.LineTo(x0, ClientHeight); // шкалирование осей for i := -7 to 7 do begin Image1.Canvas.MoveTo(x0 + i * m, y0 - 5); Image1.Canvas.LineTo(x0 + i * m, y0 - (-5)); if I <> 0 then Image1.Canvas.TextOut(x0 + i * m - 5, y0 + 10, IntToStr(i));
Image1.Canvas.MoveTo(x0 + 5, y0 - m * i); Image1.Canvas.LineTo(x0 - 5, y0 - m * i); if I <> 0 then Image1.Canvas.TextOut(x0 - 20, y0 + i * m - 5, IntToStr(-i)); end; end;
procedure TForm1.DrawRect; // Построение параллелограмма var I : Integer; begin Image1.Canvas.Pen.Color := clBlack;
for I := 0 to 4 do begin RectCooLast[i].X := Round(RectCooOrg[i].X * cosa - RectCooOrg[i].Y * sina + x0); RectCooLast[i].Y := Round(RectCooOrg[i].Y * cosa + RectCooOrg[i].X * sina + y0); end;