Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
0 / 0 / 0
Регистрация: 27.02.2018
Сообщений: 4
1

Нарисовать объемную фигуру по заданным точкам

28.02.2018, 00:36. Показов 1727. Ответов 4
Метки нет (Все метки)

Здравствуйте. Пытаюсь как то научиться рисовать объемную фигуру, например: цилиндр или конус. Рисую случайную линию на PictureBox и путем вращения этой самой линии, что бы могла получиться объемная фигура.
Это реально вообще сделать? и на сколько сложно?
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.02.2018, 00:36
Ответы с готовыми решениями:

Как нарисовать фигуру через полигон по точкам
Вот мой проект, объясните теперь мне пожалуйста: 1/Как нарисовать фигуру через полигон по...

В форме нарисовать фигуру по точкам, которые мы отметим кликом мышки
Необходимо например нарисовать 4 точки и что-бы программа соединила их все последовательно! Спасибо...

Как определить фигуру по четырем точкам?
Работаю над классом трапеции. Один из методов должен возвращать периметр фигуры (еще не известно,...

Получить график по заданным точкам
private void button1_Click(object sender, EventArgs e) { double zx...

4
630 / 518 / 321
Регистрация: 20.05.2015
Сообщений: 1,448
28.02.2018, 06:16 2
Цитата Сообщение от kolf-wow Посмотреть сообщение
Это реально вообще сделать? и на сколько сложно?
Я так понимаю используя 2D-графику нарисовать псевдообъемную фигуру?
Цитата Сообщение от kolf-wow Посмотреть сообщение
Рисую случайную линию на PictureBox и путем вращения этой самой линии, что бы могла получиться объемная фигура.
Эм... чего? Лучше выложите код, чтобы понятней было.

Например цилиндр можно нарисовать как-то так:
Кликните здесь для просмотра всего текста
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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
        public class Figure
        {
            public PointF pt_start;
            public PointF pt_end;
            public float radius = 0f;
            public bool set_rad = false;
            public Figure(Point _pt_start,Point _pt_end)
            {
                pt_start = new PointF(_pt_start.X, _pt_start.Y);
                pt_end = new PointF(_pt_end.X, _pt_end.Y);
            }
            public void Draw(Graphics gr)
            {
                Pen p = new Pen(Color.Black, 1);
                if (radius > (pt_end.X - pt_start.X) / 2) radius = (pt_end.X - pt_start.X) / 2;
                gr.DrawLine(p,pt_start,new PointF(pt_start.X,pt_end.Y));
                gr.DrawLine(p, pt_end, new PointF(pt_end.X, pt_start.Y));
                gr.DrawEllipse(p, new RectangleF(pt_start.X, pt_start.Y - radius, pt_end.X - pt_start.X, radius * 2));
                gr.DrawEllipse(p, new RectangleF(pt_start.X, pt_end.Y - radius, pt_end.X - pt_start.X, radius * 2));
 
            }
        }
        private bool change = false;
        private List<Figure> li = new List<Figure>();
        private PointF start_pos;
        public Cylinder()
        {
            InitializeComponent();
            this.MouseDown += Cylinder_MouseDown;
            this.MouseMove += Cylinder_MouseMove;
            this.MouseUp += Cylinder_MouseUp;
 
            this.DoubleBuffered = true;
        }
 
        protected override void OnPaint(PaintEventArgs e)
        {
 
            foreach (var it in li)
                it.Draw(e.Graphics);
        }
 
 
        private void Cylinder_MouseMove(object sender, MouseEventArgs e)
        {
            if (change)
            {
                if (li.Last().set_rad == false)
                {
                    li.Last().pt_end = e.Location;
                }
                else
                {
                    li.Last().radius = Math.Abs(e.Y - start_pos.Y);
                }
                Invalidate();
            }
            
        }
 
        private void Cylinder_MouseDown(object sender, MouseEventArgs e)
        {
            change = true;
            if (li.Count == 0)
            {
                li.Add(new Figure(e.Location, e.Location));
            }else
            if (li.Last().set_rad == false)
            {
                li.Add(new Figure(e.Location, e.Location));
            }
            else
            {
                start_pos = e.Location;
            }
            Invalidate();
        }
 
        private void Cylinder_MouseUp(object sender, MouseEventArgs e)
        {
            if (li.Last().set_rad == false)
            {
                li.Last().set_rad = true;
            }
            else
            {
                li.Last().set_rad = false;
            }
            change = false;
            Invalidate();
        }
0
0 / 0 / 0
Регистрация: 27.02.2018
Сообщений: 4
01.03.2018, 21:38  [ТС] 3
спасибо большое.
Но не могу разобраться, почему у меня ругается на public Cylinder()...
0
0 / 0 / 0
Регистрация: 27.02.2018
Сообщений: 4
01.03.2018, 21:51  [ТС] 4
Мне бы хотелось, как-то реализовать вот такое. Но ума не приложу, как это сделать.
Например, есть 2-а эллипса и между ними случайно проведенная прямая соединяющая их и вращением этой прямой по эллипсам получилась объемная или фигура.
Миниатюры
Нарисовать объемную фигуру по заданным точкам  
0
630 / 518 / 321
Регистрация: 20.05.2015
Сообщений: 1,448
05.03.2018, 02:37 5
Цитата Сообщение от kolf-wow Посмотреть сообщение
public Cylinder
Cylinder - это название формы. Поменяйте на свое название формы и все заработает.
Цитата Сообщение от kolf-wow Посмотреть сообщение
вращением этой прямой по эллипсам получилась объемная или фигура.
Зачем делать так сложно?
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.03.2018, 02:37

Линейный график (сглаженный) по заданным точкам
Здравствуйте! Как у начинающего самоучки - непонятных вопросов много. Один из них, это &quot;Как...

Построить квадрат по двум заданным точкам
подскажите ,пожалуйста,как построить квадрат по двум заданым смежным вершынам? вот мои попытки ...

Нарисовать фигуру
Записать логические выражения, используя условные операторы, операции отношений и логические...

Нарисовать приведенную фигуру
По примеру рисования круга помогите нарисовать такую фигуру: int x, y, rad, xDir, yDir; ...


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

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

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