chernobel Ответов: 3

Вращающийся Прямоугольник


Всем привет...
Я рисую прямоугольник с помощью класса Rectangle, но я хочу повернуть этот прямоугольник вокруг своей оси. Это означает, что он остается на своем месте, но вращается - это будет выглядеть как Роллинг.

Как я могу это сделать, пожалуйста?

OriginalGriff

См. пересмотренный ответ.

3 Ответов

Рейтинг:
2

Yusuf M Hamza

- все просто.
- используй эту матрицу.
мат = новый Drawing2D.Матрица
мат.RotateAt(ракурс, новую точку(Х+ прямоугольник.Ширина / 2, y+ rect.Высота / 2))
'y и x-точки чертежного прямоугольника
Dim gr As Graphics= Me.CreateGraphics
гр.Преобразование = мат
гр.Объекта drawrectangle(Пен.цвет, Х, Y, прямоугольник.Ширина,прямая линия.Высота)


Dave Kreskowiak

Не публикуйте ответы на вопросы 5-летней давности. Ваш ответ на самом деле ничего не добавляет к дискуссии вообще.

Рейтинг:
19

Heinzzy

Не забудьте сделать TranslateTransform, если вы хотите вращаться вокруг другой точки then (0,0).


public partial class Form1 : Form
    {
        Timer timer;
        int angle;
        public Form1()
        {
            InitializeComponent();
        }
        private void Form1_Load(object sender, EventArgs e)
        {
            this.Paint += new PaintEventHandler(Form1_Paint);
            angle = 0;
            timer = new Timer();
            timer.Tick += new EventHandler(timer_Tick);
            timer.Interval = 10;
            timer.Start();
        }
        void Form1_Paint(object sender, PaintEventArgs e)
        {
            Graphics g = this.CreateGraphics();
            //the central point of the rotation
            g.TranslateTransform(100, 100);
            //rotation procedure
            g.RotateTransform(angle);
            g.DrawRectangle(Pens.Red, new Rectangle(0, 0, 50, 30));
        }
        void timer_Tick(object sender, EventArgs e)
        {
            angle++;
            this.Invalidate();
        }
    }


Member 10671056

Ни одно из этих решений, по-видимому, не решает проблему. Плакат спрашивал, как вращать "класс прямоугольника", а не прямоугольник GDI. У меня тот же вопрос: есть ли способ повернуть класс Rectangle (от Microsoft::VisualBasic::PowerPacks::RectangleShape) таким же образом, как графическую фигуру GDI.

Рейтинг:
1

OriginalGriff

Видеть MSDN: графика.Метод RotateTransform[^]

В принципе, чтобы повернуть прямоугольник на 20 градусов по часовой стрелке в вашем событии рисования:

e.Graphics.RotateTransform(20.0F);
e.Graphics.DrawRectangle(Pens.Red, new Rectangle(5, 5, 30, 40));


-тнкс ...это сработало...но если я хочу выполнить это в событии Timer_tick .за каждую секунду произошло вращение .. возможно ли это..и как, пожалуйста ?? Но все равно спасибо "

Во-первых, не рисуйте в своем событии таймера. Вместо этого обработайте событие Paint для панели или формы и нарисуйте там. Затем в событии таймера измените угол, под которым вы хотите нарисовать верхнюю часть (в переменной уровня класса), и используйте метод Invalidate на панели или форме.
private float rotateAngle = 0.0F;
private void timer1_Tick(object sender, EventArgs e)
    {
    rotateAngle += 5.0F;        // Step the draw angle on
    if (rotateAngle > 360.0F)
        {
        rotateAngle = 0.0F;
        }
    MyPanelForDrawingRectanglesOn.Invalidate();
    }
Я бы предпочел использовать панель, так как рисунок тогда не будет проходить под какими-либо другими элементами управления, но это зависит от вас...


chernobel

спасибо ..он работал...но если я хочу выполнить это в событии Timer_tick .за каждую секунду произошло вращение .. возможно ли это..и как, пожалуйста ?? Но все равно спасибо

chernobel

это сработало очень хорошо, но с проблемой, что прямоугольник вращается вокруг верхнего левого угла..
я пробую метод RotatAt()...вращаться вокруг центра прямоугольника.. но это не сработало...
так как же я могу ее решить? пожалуйста.