Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/15: Рейтинг темы: голосов - 15, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 11.05.2010
Сообщений: 48
1

Нарисовать фигуру состоящую из 10 треугольников

11.05.2010, 10:20. Показов 3003. Ответов 9
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Люди добрые, подскажите как:
Нарисовать фигуру состоящую из 10 треугольников при этом нужно посчитать кол-во внутренних треугол(т.е. без внешних граней ); кол-во внешних(т.е. с 1 внешней гранью);при этом внутреннии грани одним цветов ,а внешнии др.; посчитать кол-во узлов и все это сохранить(записать) в фаил с последующим считыванием из него.
Лучше если ответ будет на примере.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.05.2010, 10:20
Ответы с готовыми решениями:

Как нарисовать фигуру (эллипс и крест)?
Привет, подскажите как нарисовать по верх элипса крест... Мне нужно сделать типо кнопку закрыть))

Нарисовать фигуру при клике мышки
Всем, добрый день! Подскажите пожалуйста, как на элементе canvas можно сделать так, что при клике...

Нарисовать фигуру из треугольников
Здравствуйте, форумчане! Задали курсовую, но уже полторы недели голову ломаю, как её сделать....

Нарисовать фигуру из треугольников, координаты, которых находятся в массиве
Здравствуйте! Есть код using System; using System.Collections.Generic; using...

9
Мохаммед Али
131 / 70 / 5
Регистрация: 14.08.2009
Сообщений: 916
11.05.2010, 13:18 2
а треугольники одинаоквые или как
0
0 / 0 / 0
Регистрация: 11.05.2010
Сообщений: 48
11.05.2010, 14:32  [ТС] 3
желательно да)
0
Мохаммед Али
131 / 70 / 5
Регистрация: 14.08.2009
Сообщений: 916
11.05.2010, 16:09 4
просто нарисовать симметричную фигуру неважно какую суть в том что из одинаковых треугольников может образоваться треугольник если таких треугольников 4 и они стоят рядом, тоесть мы проверяем каждый треугольник на наличие треуголльников по всем его бокам, конечно треугольники надо хранить в массиве видимо в виде 4 точек 1 вершина и 3 основание,кароче долго это делать), так как 10 треугольников и то 2 рзамерность совпадения треугольников это 9 можно и не проверять наверное количество узлов вроде -1 от количества общих граней,запаришься кароч)
0
328 / 312 / 68
Регистрация: 05.11.2009
Сообщений: 712
11.05.2010, 16:38 5
вот что-то набрасал с проверкой на одинаковые грани у двух треугольников:
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
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Text;
 
 
namespace WindowsApplication7
{
    class Triangle
    {
        List<Line> lines; // грани треугольника
 
        public Triangle()
        {
            lines = new List<Line>();
        }
 
        public Triangle(Point point1, Point point2, Point point3)
        {
            lines = new List<Line>();
            lines.Add(new Line(point1, point2));
            lines.Add(new Line(point2, point3));
            lines.Add(new Line(point3, point1));
        }
 
        public Line this[int index]
        {
            get 
            {
                if (index > -1 && index < 3)
                    return lines[index];
                return null;
            }
        }
 
        public List<Line> Lines
        {
            get { return lines; }
        }
 
        public void Add(Point point1, Point point2, Point point3)
        {
            lines.Clear();
            lines.Add(new Line(point1, point2));
            lines.Add(new Line(point2, point3));
            lines.Add(new Line(point3, point1));
        }
 
        public void Draw(Graphics gr)
        {
            for (int i = 0; i < lines.Count; i++)
                lines[i].Draw(gr);
        }
 
        public void Common(Triangle triangle) //сравнивание граней
        {
            int count = 0;
            int[] idx = new int[3];
            for (int i = 0; i < lines.Count; i++)
            {
                for (int j = 0; j < triangle.Lines.Count; j++)
                    if (triangle[j] == lines[i])
                    {
                        idx[count] = i;
                        count++;
                    }
            }
 
            if ((count < 3) && (count != 0))
            {
                for (int i = 0; i < count; i++)
                    lines[idx[i]].LColor = Color.Red;
                
            }
        }
    }
 
    class Line
    {
        Point begin;
        Point end;
        Color color;
 
        public Line()
        {
            begin = new Point(0, 0);
            end = new Point(0, 0);
            color = Color.Black;
        }
 
        public Line(Point point1, Point point2)
        {
            begin = point1;
            end = point2;
            color = Color.Black;
        }
 
        public Point BeginPoint
        {
            get { return begin; }
            set { begin = value; }
        }
 
        public Point EndPoint
        {
            get { return end; }
            set { end = value; }
        }
 
        public static bool operator ==(Line l1, Line l2)
        {
            if ((l1.begin == l2.begin && l1.end == l2.end) || (l1.begin == l2.end && l1.end == l2.begin))
                return true;
            return false;
        }
 
        public static bool operator !=(Line l1, Line l2)
        {
            if ((l1.begin != l2.begin && l1.end != l2.end) || (l1.begin != l2.end && l1.end != l2.begin))
                return true;
            return false;
        }
 
        public override bool Equals(object obj)
        {
            return base.Equals(obj);
        }
 
        public override int GetHashCode()
        {
            return base.GetHashCode();
        }
 
        public Color LColor
        {
            get { return color; }
            set { color = value; }
        }
 
        public void Draw(Graphics gr)
        {
            gr.DrawLine(new Pen(color, 1), begin, end);    
        }
    }
}
код на самой форме:
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
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
 
namespace WindowsApplication7
{
    public partial class Form1 : Form
    {
        List<Triangle> triangles = new List<Triangle>();
 
        public Form1()
        {
            InitializeComponent();
            triangles.Add(new Triangle(new Point(100, 100), new Point(0, 200), new Point(100, 150)));
            triangles.Add(new Triangle(new Point(100, 100), new Point(200, 200), new Point(100, 150)));
            triangles.Add(new Triangle(new Point(100, 150), new Point(0, 200), new Point(200, 200)));
 
            for (int i = 0; i < triangles.Count; i++)
            {
                for (int j = 0; j < triangles.Count; j++)
                {
                    triangles[i].Common(triangles[j]);
                }
            }
 
        }
 
        private void Form1_Paint(object sender, PaintEventArgs e)
        {
            for (int i = 0; i < triangles.Count; i++)
                triangles[i].Draw(e.Graphics);
        }
    }
}
1
0 / 0 / 0
Регистрация: 11.05.2010
Сообщений: 48
11.05.2010, 17:10  [ТС] 6
asd321 насколько мне известно там можно проще,просто алгоритмы я могу изобразить,но вот со знанием операторов у меня проблемы=)
так вот у треугольника есть номер и 3 "узла" ... потом внутреннюю грань можно найти ,определив ту грань которая встречается 2 раза(например:треуг.№1(0(x,y),1(x,y),2(x,y))
треуг.№2(1(x,y),2(x,y),3(x,y)) и т.д.;где 0(x,y),1(x,y)...- узлы(их координаты))

Добавлено через 6 минут
kuroiryuu спс ,но он пишет ,что не может обратится к
Код
        List<Triangle> triangles = new List<Triangle>();
из-за его защиты
"'System.Windows.Forms.Triangle' is inaccessible due to its protection level "
что это значит?=)
0
328 / 312 / 68
Регистрация: 05.11.2009
Сообщений: 712
11.05.2010, 17:37 7
первая часть кода находится в отдельном файле
можно просто скопировать тело namespace первой части и поставить туда куда вам необходимо.
например так:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
namespace WindowsApplication7
{
    public partial class Form1 : Form
    {
        List<Triangle> triangles = new List<Triangle>();
        ........... 
    }
 
    class Triangle
    {
        List<Line> lines; // грани треугольника
        .....................................
        ..................................... 
    }
 
    class Line
    {
        .................
        .................    
    }
}
1
0 / 0 / 0
Регистрация: 11.05.2010
Сообщений: 48
12.05.2010, 02:54  [ТС] 8
Код
protected override void [B]Dispose[/B](bool disposing)
        {
            if (disposing && (components != null))
            {
                components.Dispose();
            }
            base.Dispose(disposing);
        }
теперь выдает:
'WindowsFormsApplication2.Form1.Dispose(bool)': no suitable method found to override
мож это у меня тупая вижуал??(то что я тупой ,уже смирился)
0
328 / 312 / 68
Регистрация: 05.11.2009
Сообщений: 712
12.05.2010, 10:48 9
вот готовый проект (vs 2005)
правда там есть одно но:
нет проверки на вхождение одного треугольника в другой
Вложения
Тип файла: zip WindowsApplication7.zip (13.8 Кб, 36 просмотров)
1
328 / 312 / 68
Регистрация: 05.11.2009
Сообщений: 712
12.05.2010, 13:25 10
переписанный метод нахождения общих и внутренних граней:
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
    class Triangle
    {
        .............................
        public void Common(Triangle triangle)
        {
            int count = 0;
            int[] idx = new int[3];
            Point[] points = new Point[3];
            
            for (int i = 0; i < triangle.Lines.Count; i++)
            {
                if (triangle[i].BeginPoint == lines[i].BeginPoint)
                    count++;
            }
 
            if (count < 3)
            {
                for (int i = 0; i < lines.Count; i++)
                    points[i] = lines[i].BeginPoint;
 
                for (int j = 0; j < triangle.Lines.Count; j++)
                {
                    bool flg1 = IsPointInsidePolygon(points, points.Length, triangle[j].BeginPoint.X, triangle[j].BeginPoint.Y);
                    bool flg2 = IsPointInsidePolygon(points, points.Length, triangle[j].EndPoint.X, triangle[j].EndPoint.Y);
                    if (flg1 && flg2)
                        triangle[j].LColor = Color.Red;
                }
            }
        }
 
        private bool IsPointInsidePolygon(Point[] p, int Number, int x, int y)
        {
            int i1, i2, n, N, S, S1, S2, S3;
            bool flag = false;
            N = Number;
            for (n = 0; n < N; n++)
            {
                flag = false;
                i1 = n < N - 1 ? n + 1 : 0;
                while (!flag)
                {
                    i2 = i1 + 1;
                    if (i2 >= N)
                        i2 = 0;
                    if (i2 == (n < N - 1 ? n + 1 : 0))
                        break;
                    S = Math.Abs(p[i1].X * (p[i2].Y - p[n].Y) +
                             p[i2].X * (p[n].Y - p[i1].Y) +
                             p[n].X * (p[i1].Y - p[i2].Y));
                    S1 = Math.Abs(p[i1].X * (p[i2].Y - y) +
                              p[i2].X * (y - p[i1].Y) +
                              x * (p[i1].Y - p[i2].Y));
                    S2 = Math.Abs(p[n].X * (p[i2].Y - y) +
                              p[i2].X * (y - p[n].Y) +
                              x * (p[n].Y - p[i2].Y));
                    S3 = Math.Abs(p[i1].X * (p[n].Y - y) +
                              p[n].X * (y - p[i1].Y) +
                              x * (p[i1].Y - p[n].Y));
                    if (S == S1 + S2 + S3)
                    {
                        flag = true;
                        break;
                    }
                    i1 = i1 + 1;
                    if (i1 >= N)
                        i1 = 0;
                }
                if (!flag)
                    break;
            }
            return flag;
        }
    }
Добавлено через 33 минуты
протестируйте на данной "фигуре":
C#
1
2
3
4
5
6
7
8
9
10
triangles.Add(new Triangle(new Point(0, 100), new Point(100, 100), new Point(0, 200)));
triangles.Add(new Triangle(new Point(100, 100), new Point(0, 200), new Point(100, 150)));
triangles.Add(new Triangle(new Point(100, 100), new Point(100, 150), new Point(200, 200)));
triangles.Add(new Triangle(new Point(0, 200), new Point(100, 150), new Point(200, 200)));
triangles.Add(new Triangle(new Point(0, 200), new Point(200, 200), new Point(100, 250)));
triangles.Add(new Triangle(new Point(0, 200), new Point(100, 250), new Point(0, 300)));
triangles.Add(new Triangle(new Point(100, 250), new Point(200, 200), new Point(200, 300)));
triangles.Add(new Triangle(new Point(100, 250), new Point(200, 300), new Point(0, 300)));
triangles.Add(new Triangle(new Point(200, 200), new Point(200, 300), new Point(300, 250)));
triangles.Add(new Triangle(new Point(0, 300), new Point(200, 300), new Point(100, 350)));
насчёт сохранения:
сохраните все уникальные узлы с их координатами
а также сохраните матрицу смежности для этих узлов
1
12.05.2010, 13:25
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.05.2010, 13:25
Помогаю со студенческими работами здесь

Нарисовать необычную фигуру
Необходимо нарисовать вот это. Для этого нужно знать все линии каждого сегмента т.е. массив линий...

Нарисовать фигуру Лиссажу
Помогите срочно ребят,Нужно нарисовать фигуру Лиссажу в C#,центр которой находжится в начале...

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

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


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

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