У меня проблема с поворотом прямоугольника и поместите его на холст определенным образом. Вот что я пытаюсь достичь:
Вращающиеся прямоугольники 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 градусов, а размеры прямоугольника также могут быть случайными. Но прямоугольники всегда должны быть полностью видимыми на холсте, поэтому мне нужно знать смещения для границ координат положения. (Прямоугольники могут перекрывать себя.)
Надеюсь, вы понимаете мою проблему. Было бы неплохо, если бы вы могли помочь мне.