System.Drawing.Graphics
У меня есть одна проблема, связанная с вращением эллипса данным Центром. Предположим, у меня есть один эллипс, и что должно быть, это вращение этого эллипса на точку, заданную пользователем, и эллипс должен вращаться вокруг данной точки. я пытался
g.RotateTransform(…)
g.TranslateTransform(…)
Код:
Graphics g = this.GetGraphics();
g.RotateTransform((float)degreeArg); //degree to rotate object
g.DrawEllipse(Pens.Red, 300, 300, 100, 200);
это работает хорошо, но как мы можем дать наш центр, чтобы вращать эллипс....
Как это могло быть возможно, пожалуйста, любой приятель может предложить …… Спасибо …….
2 ответа
Решение
RotateTransform всегда вращается вокруг источника. Так что вам нужно сначала перевести ваш центр вращения в начало координат, затем повернуть, а затем перевести его обратно.
Что-то вроде этого:
Graphics g = this.GetGraphics();
g.TranslateTransform(300,300);
g.RotateTransform((float)degreeArg); //degree to rotate object
g.TranslateTransform(-300,-300);
g.DrawEllipse(Pens.Red, 300, 300, 100, 200);
//center of the rotation
PointF center = new PointF(...);
//angle in degrees
float angle = 45.0f;
//use a rotation matrix
using (Matrix rotate = new Matrix())
{
//used to restore g.Transform previous state
GraphicsContainer container = g.BeginContainer();
//create the rotation matrix
rotate.RotateAt(angle, center);
//add it to g.Transform
g.Transform = rotate;
//draw what you want
...
//restore g.Transform state
g.EndContainer(container);
}