Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/9: Рейтинг темы: голосов - 9, средняя оценка - 4.67
2 / 2 / 1
Регистрация: 27.06.2018
Сообщений: 78
1

Сделать, чтобы фигура подстраивалась под масштаб формы

14.09.2018, 18:31. Показов 1789. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
У меня задано уравнение эллипса, который рисуется на панели в форме. Нужно сделать так, чтобы эллипс изменял масштаб в соответствии с размером формы (увеличивался или уменьшался), не меняя уравнение функций. Попробовала ввести масштабирующий коэффициент:
C#
1
2
3
double kx = Math.Abs(L / (2 * x1)); // L- ширина  панели, х1-радиус эллипса по оси х
                double ky = Math.Abs(HH / (2 * y1)); //НН- длина панели, у1-радиус эллипса по оси у
                double K = Math.Min(kx, ky);
а затем домножила на него координаты эллипса. То, что нужно, не получилось. Может, кто-то додумается, как решить задачу?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.09.2018, 18:31
Ответы с готовыми решениями:

Как сделать, чтобы высота подстраивалась под ширину блока iframe?
Привет. Возможно ли сделать как я хочу? Если да, то подскажите пожалуйста как. Допустим имеем...

Как сделать, чтобы программа автоматически подстраивалась под разрешение монитора
Здравствуйте форумчане! У меня возник некий вопрос. Как сделать: 1. Чтобы окна программы...

Как сделать. чтобы одна нарисованная фигура была под другой?
в проге рисую круг под ним надо нарисовать прямоугольник как сделать чтобы они были друг под...

Как сделать так чтоб игра подстраивалась под расширение экрана?
Нужен скрипт или с настройка поиграть ? Помогите

6
8940 / 4852 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
14.09.2018, 20:42 2
Цитата Сообщение от IngaI Посмотреть сообщение
У меня задано уравнение эллипса
Где оно?
0
2 / 2 / 1
Регистрация: 27.06.2018
Сообщений: 78
15.09.2018, 20:10  [ТС] 3
C#
1
2
x=a*sin(t);
y=b*cos(t);
0
8940 / 4852 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
16.09.2018, 00:24 4
a и b — это полуоси. Масштаб нужно считать относительно них
0
2 / 2 / 1
Регистрация: 27.06.2018
Сообщений: 78
16.09.2018, 10:12  [ТС] 5
a и b - константы, которым я сама даю значения в коде. Их можно менять, но фигура всё равно должна растягиваться по форме и уменьшаться.
0
8940 / 4852 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
16.09.2018, 14:07 6
Лучший ответ Сообщение было отмечено IngaI как решение

Решение

Цитата Сообщение от IngaI Посмотреть сообщение
Их можно менять, но фигура всё равно должна растягиваться по форме и уменьшаться.
Нужно считать масштаб относительно них, т.е. их соотношение с длинами сторон панели рисования.
Кликните здесь для просмотра всего текста
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
43
44
45
46
47
48
49
50
51
52
53
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Windows.Forms;
 
namespace WindowsFormsApp1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            panel1.Paint += Panel1_Paint;
            panel1.Resize += (s, e) => panel1.Invalidate();
        }
 
        private void Panel1_Paint(object sender, PaintEventArgs e)
        {
            if (_points.Count <= 3) return;
            //Начало координат в центр формы
            e.Graphics.TranslateTransform(panel1.ClientRectangle.Width / 2f, panel1.ClientRectangle.Height / 2f);
            var a = 2 * (float)aNumericUpDown.Value;
            var b = 2 * (float)bNumericUpDown.Value;
            //Масштабный коэффициент
            var scale = Math.Min(panel1.ClientRectangle.Width / a, panel1.ClientRectangle.Height / b);
            //Масштабирование рисунка
            e.Graphics.ScaleTransform(scale, scale);
            //Рисование
            using (var pen = new Pen(Color.Blue, 1f / scale))
                e.Graphics.DrawCurve(pen, _points.ToArray());
        }
 
        private List<PointF> _points = new List<PointF>();
        private float _angle;
 
        PointF GetEllipsePoint(float a, float b, float angle)
        {
            return new PointF(a * (float)Math.Cos(angle), b * (float)Math.Sin(angle));
        }
 
        private void buildUpButton_Click(object sender, EventArgs e)
        {
            var a = (float)aNumericUpDown.Value;
            var b = (float)bNumericUpDown.Value;
            _points.Clear();
            for (_angle = 0; _angle <= 360; _angle++)
            {
                _points.Add(GetEllipsePoint(a, b, (float)((Math.PI / 180) * _angle)));
            }
            panel1.Invalidate();
        }
    }
}
Вложения
Тип файла: zip WindowsFormsApp1.zip (10.7 Кб, 11 просмотров)
1
2 / 2 / 1
Регистрация: 27.06.2018
Сообщений: 78
16.09.2018, 16:01  [ТС] 7
Спасибо! Всё работает как надо. Буду теперь разбираться.
0
16.09.2018, 16:01
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.09.2018, 16:01
Помогаю со студенческими работами здесь

Сделать так, чтоб форма подстраивалась под размер и количество динамических панелей
Всем привет! Подскажите, кто знает, как сделать так, чтоб форма подстраивалась под размер и...

форма подстраивалась под разрешение экрана
Как сделать чтобы форма подстраивалась под разрешение экрана. Вот у меня форма на полный экран на...

Как сделать так, чтобы на 1 графике выводились и точки и фигура
Здравствуйте! Не могли бы помочь, дело в том, что я написал 2 закона распределения точек и не могу...

Сделать анимацию чтобы каждая фигура появлялась последовательно с интервалом в 3 секунды
uses graphABC,crt; var x,y,i : integer; begin SetWindowWidth(600); SetWindowHeight(600);...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru