• Матрица поворота. С решением
    Центр фигуры (5:3). Сама фигура имеет координаты (3:2) (7:2) (7:4) (3:4). Помогите повернуть фигуру в любую сторону относительно центра на угол равный 30°.

Ответы 1

  • Выполняем перенос начала координат в центральную точку, затем поворачиваем фигуру и возвращаем начало координат на место.// PascalABC.NET 3.2, сборка 1467 от 02.06.2017// Внимание! Если программа не работает, обновите версию!type  Point=(real,real);  Figure=array of Point;function MoveTo(Self:Figure;pP:Point):Figure; extensionmethod;begin  var n:=Self.Count;  Result:=new Point[n];  for var i:=0 to n-1 do    Result[i]:=(Self[i][0]-pP[0],Self[i][1]-pP[1])end;function Rotate(Self:Figure;angle:real):Figure; extensionmethod;begin  var mr:=new real[2,2];  mr[0,0]:=cos(angle); mr[0,1]:=sin(angle);  mr[1,0]:=-mr[0,1]; mr[1,1]:=mr[0,0];  var n:=Self.Count;  Result:=new Point[n];  for var i:=0 to n-1 do    Result[i]:=(Self[i][0]*mr[0,0]+Self[i][1]*mr[1,0],      Self[i][0]*mr[0,1]+Self[i][1]*mr[1,1])end;function MoveFrom(Self:Figure;pP:Point):Figure; extensionmethod;begin  var n:=Self.Count;  Result:=new Point[n];  for var i:=0 to n-1 do    Result[i]:=(Self[i][0]+pP[0],Self[i][1]+pP[1])end;procedure Print(p:Figure;w,d:integer);begin  foreach var t in p do    Writeln(t[0]:w:d,' ',t[1]:w:d)end;begin  var center:Point:=(5.0,3.0);  var Rectangle:Figure;  SetLength(Rectangle,4);  Rectangle[0]:=(3.0,2.0);  Rectangle[1]:=(7.0,2.0);  Rectangle[2]:=(7.0,4.0);  Rectangle[3]:=(3.0,4.0);  var angle:=30;  var P:=Rectangle.MoveTo(Center).Rotate(DegToRad(angle)).MoveFrom(Center);  Writeln('Новые координаты');  Print(P,9,5)end.РезультатНовые координаты  3.76795   1.13397  7.23205   3.13397  6.23205   4.86603  2.76795   2.86603
  • Добавить свой ответ

Войти через Google

или

Забыли пароль?

У меня нет аккаунта, я хочу Зарегистрироваться

How much to ban the user?
1 hour 1 day 100 years