Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.53/34: Рейтинг темы: голосов - 34, средняя оценка - 4.53
0 / 0 / 1
Регистрация: 03.05.2014
Сообщений: 47

Поворот фигуры. Графика

22.05.2014, 20:57. Показов 7108. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Предоставить пользователю возможность задать количество квадратов
“n”. Причем каждый последующий квадрат должен быть вписан в предыдущий,
так чтобы вершины вписанного квадрата лежали на сторонах большего квадрата.
(Расстояние от вершины большего квадрата до точки касания “h” может задаваться
пользователем).

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
Pen Pero = new Pen(Color.Black, 1);
            //создаем первый квадрат с заданными координатами, причем он будет отрисовываться точно по центру панели
            float x1, y1, x2, y2, x3, y3, x4, y4;
            float x, y;
            x1 = panel1.Width / 2 - storona / 2;
            y1 = panel1.Height / 2 - storona / 2;
            x2 = x1 + storona;
            y2 = y1;
            x3 = x2;
            y3 = y2 + storona;
            x4 = x3 - storona;
            y4 = y3;
            //задаем массив координат сторон квадрата
            Point[] Points;
            Points = new Point[4];
            Points[0] = new Point(((int)x1), ((int)y1));
            Points[1] = new Point(((int)x2), ((int)y2));
            Points[2] = new Point(((int)x3), ((int)y3));
            Points[3] = new Point(((int)x4), ((int)y4));
            //отрисовываем первый квадрат
            graph.DrawPolygon(Pero, Points);
            for (int i = 0; i < n - 1; i++)
            {
                //две переменные x и y для того, чтобы вычислить x4, y4
                x = x1;
                y = y1;
                x1 = x1 + (x2 - x1) * h;
                y1 = y1 + (y2 - y1) * h;
                x2 = x2 + (x3 - x2) * h;
                y2 = y2 + (y3 - y2) * h;
                x3 = x3 + (x4 - x3) * h;
                y3 = y3 + (y4 - y3) * h;
                x4 = x4 + (x - x4) * h;
                y4 = y4 + (y - y4) * h;
                //записываем в массив координат вершин
                Points[0] = new Point(((int)x1), ((int)y1));
                Points[1] = new Point(((int)x2), ((int)y2));
                Points[2] = new Point(((int)x3), ((int)y3));
                Points[3] = new Point(((int)x4), ((int)y4));
                //рисуем новый квадрат по 4 координатам из массива
                graph.DrawPolygon(Pero, Points);
            }
как нужно преобразовать код в цикле, чтобы поворот квадратов осуществлялся правильно?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
22.05.2014, 20:57
Ответы с готовыми решениями:

Почему не получается совершить поворот фигуры?
Не получается повернуть фигуру по заданным параметрам из формы CSHARP] else if (radioButton3.Checked) { ...

Поворот фигуры на заданное число градусов
Доброго времени суток.Есть фигура - треугольник, который задается функцией DrawTriangle() public void DrawTriangle() { ...

Графика, движение фигуры
День добрый, написал программу движения фигуры. Фигура начинает двигаться с центра по диагонали, а нужно что бы двигалась с левого нижнего...

4
814 / 422 / 169
Регистрация: 08.02.2013
Сообщений: 711
22.05.2014, 21:25
Sita RaiNy, а угол поворота?

Добавлено через 1 минуту
Цитата Сообщение от Sita RaiNy Посмотреть сообщение
(Расстояние от вершины большего квадрата до точки касания “h” может задаваться
пользователем).
понятно

Добавлено через 15 минут
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
protected override void OnPaint(PaintEventArgs e)
{
    base.OnPaint(e);
 
    float d = 50.0f; // Сторона квадрата в пикселях
    float h = 30.0f; // расстояние от вершины до точки касания
    int n = 5; // число поворотов
 
    float a = (float)(180.0 * Math.Atan(h / (d - h)) / Math.PI);
    float s = (float)Math.Sqrt(h * h + (d - h) * (d-h)) / d;
            
 
    Graphics g = e.Graphics;
    // переносим начало координат в центр формы
    g.TranslateTransform(ClientRectangle.Width / 2, ClientRectangle.Height / 2); 
    for (int i = 0; i < n; i++)
    {
        g.DrawRectangle(Pens.Black, -d, -d, 2 * d, 2 * d);
        g.RotateTransform(a); // Поворачиваем
        g.ScaleTransform(s, s); // Уменьшаем
    }
}
0
0 / 0 / 1
Регистрация: 03.05.2014
Сообщений: 47
29.05.2014, 19:18  [ТС]
rRczZZ, Ваш код работает, только если его копипастить целиком. Если подключать к работе юзера и делать ввод пользовательских данных, то картинка смещается. Результат не тот, что требуется.
0
814 / 422 / 169
Регистрация: 08.02.2013
Сообщений: 711
29.05.2014, 19:40
Sita RaiNy, добавьте в конце
C#
1
g.ResetTransform();
чтобы не смещалось. Все остальное не имеет к этому коду отношения.
1
0 / 0 / 1
Регистрация: 03.05.2014
Сообщений: 47
02.06.2014, 09:50  [ТС]
rRczZZ, спасибо))
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
02.06.2014, 09:50
Помогаю со студенческими работами здесь

Chart. Включение/выключение сетки, масштабирование, поворот графика. Как это сделать?
.Net 4.5, Visual Studio 2012. Уважаемые форумчане, у меня возник такой вопрос: использую Chart, мне нужно включить и выключить сетку...

Поворот фигуры. Компьютерная графика
Пытаюсь повернуть фигуру по часовой стрелке. При повороте фигура уменьшается в размерах и стремится в точку(начало координат). В чём...

Поворот 2D фигуры
Добрый день форумчане нужен срочно сделать поворот 2D фигуры в данном случае прямоугольника с вписанными оружностями нужна срочно помощь...

Поворот фигуры
Здравствуйте, подскажите, покажалуйста, формулу для поворота фигуры относительно центра фигуры (точнее, формулу для определения координат...

Поворот фигуры
Помогите повернуть фигуру. PROGRAM Zadanie_4b; Uses Crt,Graph; VAR gd,gm,n,m:Integer; Mas:Array Of PointType; BEGIN ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
1С: Программный отбор элементов справочника Номенклатура по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор по наименованию группы. . .
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
1С: Программный отбор элементов справочника Сотрудники по значению перечисления
Maks 21.03.2026
Установка программного отбора элементов справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит предопределенное значение перечислений. Процедура. . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru