У меня проблема с вращением прямоугольника и размещением его на холсте определенным образом.Вот что я пытаюсь достичь:
Повернутые прямоугольники http://www.freeimagehosting.net/uploads/79844652d2.jpg
Большой прямоугольник на картинке - это мой холст.Меньший прямоугольник - это мой прямоугольник, который я хочу повернуть.Когда я поворачиваю прямоугольник (пунктирный прямоугольник), он, конечно, обрезается.Чтобы избежать этого, я хочу изменить положение прямоугольника, как показано на рисунке справа.
Вот как я пробовал это сделать:
Rectangle rect = new Rectangle();
rect.Width = 100;
rect.Height = 50;
int angle = 30;
rect.RenderTransform = new RotateTransform(angle, rect.Width/2, rect.Height/2);
canvas.Children.Add(rect);
double x = Math.Cos(30) * (rect.Width / 2) + Math.Sin(30) * (rect.Height / 2) - rect.Width / 2;
double y = Math.Sin(30) * (-rect.Width / 2) + Math.Cos(30) * (rect.Height / 2) - rect.Height / 2;
Canvas.SetLeft(rect, x);
Canvas.SetTop(rect, y);
Я думал, что лучший способ сделатьэто для вычисления смещения x и y и позиционирования прямоугольника на Canvas.SetLeft
и Canvas.SetTop
.Но у меня проблемы с выяснением, как сделать математику.(Расчет y, похоже, работает).
На самом деле я хочу разместить несколько прямоугольников на холсте в случайных положениях.Угол поворота может быть в диапазоне от -45 до 45 градусов, а размеры прямоугольника также могут быть случайными.Но прямоугольники всегда должны быть полностью видны на холсте, поэтому мне нужно знать смещения для границ координат позиции.(Прямоугольники могут перекрывать друг друга.)
Надеюсь, вы понимаете мою проблему.Было бы хорошо, если бы вы могли мне помочь.