Что касается этой игры программирования, которую я сейчас создаю.
alt text http://img12.imageshack.us/img12/2089/shapetransformationf.jpg
Чтобы перевести холст в WPF, я использую две формы: TranslateTransform
(чтобы переместить его) и RotateTransform
(чтобы повернуть его) [дети одного и того же TransformationGroup
]
Я могу легко получить верхние левые x, y координаты холста, когда он не повернут (или повернут на 90 градусов, так как он будет таким же), но проблема, с которой я столкнулась, - это получить верхний левый (а другой 3 балла).
Это связано с тем, что при применении a RotateTransform
свойства TranslateTransform
X
и Y
не изменяются (и, тем самым, указывают на то, что верхний левый квадрат подобен пунктирному квадрату (от изображение)
Холст поворачивается из его центра, так что это его начало.
Итак как я могу получить "новые" координаты x и y из 4 точек после вращения?
[ОБНОВЛЕНИЕ]
alt text http://img25.imageshack.us/img25/8676/shaperotationaltransfor.jpg
Я нашел способ найти верхние левые координаты после вращения (как вы можете видеть из нового изображения), добавив OffsetX и OffsetY от поворота к стартовым X и Y координаты.
Но теперь у меня проблемы с вычислением остальных координат (другие 3).
С этой вращающейся формой , как я могу определить координаты x и y остальных трех углов?
[EDIT]
Точки второго изображения НЕ ТОЧНЫЕ И ТОЧНЫЕ ТОЧКИ. Я сделал оценки с оценками в голове.
[ОБНОВЛЕНИЕ] Решение:
Прежде всего, я хотел бы поблагодарить Jason S за этот длинный и очень информативный пост, в котором он описывает математику за весь процесс; Я, конечно, многому научился, прочитав ваш пост и опробовав значения.
Но теперь я нашел фрагмент кода (спасибо упоминанию EugeneZ TransformBounds
), который делает именно то, что я хочу:
public Rect GetBounds(FrameworkElement of, FrameworkElement from)
{
// Might throw an exception if of and from are not in the same visual tree
GeneralTransform transform = of.TransformToVisual(from);
return transform.TransformBounds(new Rect(0, 0, of.ActualWidth, of.ActualHeight));
}
Ссылка: http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/86350f19-6457-470e-bde9-66e8970f7059/