1 / 1 / 0
Регистрация: 01.10.2014
Сообщений: 14
1

Парабола по координатам windows forms

28.03.2015, 20:03. Показов 2592. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Собственно вопрос, как можно нарисовать "наклоненную" параболу? В интернете множество кодов для рисования парабол, но все они стандартного вида, а мне нужно сделать что-то вроде полёта самолёта(см влож)
Миниатюры
Парабола по координатам windows forms  
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.03.2015, 20:03
Ответы с готовыми решениями:

Будут ли работать приложения написанные на Windows Forms на Windows 8
Будут ли работать приложения написанные на Windows Forms на Windows 8? И собсно еще вопрос, вы...

Как переделать Windows Forms приложение в Windows Service с UI?
Здравствуйте, уважаемые посетители форума! Вопрос такой. У меня есть приложение C# Win Forms с...

Перенос приложения Windows Forms в Windows Market
Как с минимальными затратами времени перенести десктопное приложение на магазин Windows ? Есть ли...

Код для Windows Forms не работает в Web Forms?
В том году я делал лабораторки по Winforms. Естественно, они все у меня сохранились, и я полез в их...

3
8940 / 4852 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
28.03.2015, 23:44 2
Лучший ответ Сообщение было отмечено VasLog как решение

Решение

Параболу строить как показано в многочисленных примерах, но сам объект Graphics нужно вращать на требуемый угол. См. пример
Вращение параболы
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
54
55
56
57
58
59
60
61
62
63
64
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Windows.Forms;
 
namespace ParabolaWinForms {
    public partial class MainForm : Form {
        public MainForm() {
            InitializeComponent();
            ResizeRedraw = true;
            pictureBox1.Paint += pictureBox1_Paint;
        }
 
        void pictureBox1_Paint(object sender, PaintEventArgs e) {
            DrawParabola(e);
        }
 
        /// <summary>Угол поворота</summary>
        float rotAngle;
        /// <summary>Точки параболы/// </summary>
        List<Point> points = new List<Point>();
 
        private void rotAngleNumericUpDown_ValueChanged(object sender, EventArgs e) {
            rotAngle = (float)(sender as NumericUpDown).Value;
            pictureBox1.Refresh();
        }
        /// <summary>
        /// Рисование параболы
        /// </summary>
        void DrawParabola(PaintEventArgs e) {
            points.Clear();//Очищаем список с точками
            int y = 0;
            //Координаты по оси абсцисс
            for (int i = 0; i < e.ClipRectangle.Width / 2; i += 2) {
                y = i * i / 10;//Формула параболы
                //Не выходим по вертикали за пределы зоны рисования
                if (y > e.ClipRectangle.Height) break;
                if (i != 0) {
                    //Точки «отрицательной» ветки параболы
                    points.Insert(0, new Point(-i, y));
                }
                //Точки «положительной» ветки параболы
                points.Add(new Point(i, y));
            }
            /// Используем матрицу аффинных преобразований для
            /// переноса начала координат, поворота относительно начала координат
            /// и для отражения относительно оси асцисс, чтобы положительное 
            /// направление оси ординат было вверх
            using (Matrix m = new Matrix(1, 0, 0, -1, 0, 0)) {
                //Исходная матрица. Задаёт отражение относительно оси абсцисс
                //Перенос начала координат в середину нижней стороны зоны рисования
                m.Translate(e.ClipRectangle.Width / 2, -3 * e.ClipRectangle.Height / 4);
                //Поворот относительно начала координат на заданный угол
                m.Rotate(rotAngle);
                //Применение матрицы
                e.Graphics.Transform = m;
 
            }
            //Рисование контура параболы
            e.Graphics.DrawCurve(Pens.Blue, points.ToArray());
        }
    }
}
Миниатюры
Парабола по координатам windows forms  
Вложения
Тип файла: zip DrawParabola.zip (16.0 Кб, 35 просмотров)
3
1 / 1 / 0
Регистрация: 01.10.2014
Сообщений: 14
29.03.2015, 01:33  [ТС] 3
огромное вам спасибо, в интернете почёму-то не нашёл такого, однозначно лайк :-)
0
8940 / 4852 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
29.03.2015, 01:52 4
Просто ты не знал, что нужно искать. Ну теперь будет и в интернете
0
29.03.2015, 01:52
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.03.2015, 01:52
Помогаю со студенческими работами здесь

Выражение типа "System.Windows.Forms.Control" не может быть выражением типа "System.Windows.Forms.Menu"
Перевёл проект с версии 2008 на версию 2010 Наткнулся при компиляции на кучу не объявленных...

Установить курсор из файла *.cur имея Windows.Forms и Windows.Input
Имеется форма на Windows.Forms. Нужно заменить стандартный курсор, на курсор расположенный например...

Создание приложения Windows Forms на C++/CLI в Windows 8
Добрый день! Нужно создать windows приложение на Си++, стоит 8, на 2013 много заморочек с созданием...

Взаимодействие WPF, Windows Forms и Windows XP
Товарищи! Всю голову сломал, выручайте. Если приложение на нетфреймворке 4 на windows forms. В нем...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

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